Массовый поиск геотэгов на сайтах и в локальном хранилище

На этапе разведки, а также при криминалистическом исследовании, метаданные – это очень хороший источник информации. При этом нужно понимать и оценивать риск фальсификации данных, поскольку эта информация может быть легко подменена.

Что прямо сейчас можно почитать про исследование метаинформации:

Здесь же я хочу поговорить про геотэги. Фактически, геотэги – это метаинформация, полученная от GPS датчика о географических координатах, где сделана фотография. Вы можете использовать уже названные программы для просмотра геотэгов, также обязательно стоит упомянуть jhead и exiv2 [на моих тестовых фотографиях эта программа не показывает геотэги]. Особенно полезна exiv2 для модификации метаинформации.

Причём я хочу поделиться наработками не просто по исследованию геотэгов, а по:

  • массовому поиску GPS информации в фотографиях на локальном диске;
  • поиске GPS информации в фотографиях на сайтах.

Начнём с установки программ, которые нам понадобятся.

В BlackArch:

sudo pacman -S httrack jhead bc

В Kali Linux:

sudo apt-get install httrack jhead bc

Посмотреть метаинформацию, в том числе и о GPS, легко, в дополнение к методам, описанных в статьях, на которые даны ссылки выше, это можно сделать, например, так:

jhead ​файл

01

Нас интересуют здесь:

GPS Latitude : N 48d  8m 37s
GPS Longitude: E 17d  6m 31s

Для массового автоматизированного анализа нам нужно:

  • почистить метаданные, оставив только геотэги
  • придумать, как визуализировать полученную информацию

Визуализировать информацию о большом количестве фотографий можно, например, добавив их координаты на карту. Отсюда у нас возникают две новые задачи:

  • конвертировать запись координат (из вида дни – минуты – секунды) в более понятный для карты вид;
  • сформировать список, удобный для автоматизированного импорта в карту.

Чтобы понять, что я такое понаписал и что я имею ввиду, посмотрите следующее видео:

На нём результаты обработки моего фотоархива размером без малого 170 гигабайт. В нём огромное количество фотографий, но геотэги есть далеко не у всех. Всего с геотэгами набралось 20 тысяч фотографий и все они добавлены на одну карту. Согласитесь, очень удобно для анализа. [я раньше думал, что слишком много сижу дома – а ведь там отсутствуют ещё минимум три страны и десятки российских городов, где я делал снимки].

Теперь я покажу как это сделать с любым количеством фотографий. А потом мы будем искать геотэги в фотографиях на сайтах.

Создайте файл latandlon.sh и скопируйте в него:

#!/bin/bash

t1=$( jhead "$1" | grep -E 'GPS Latitude' | sed 's/GPS Latitude : //' );

if [ "$t1" ]; then
	d1=$( echo $t1 | cut -d ' ' -f 2 | sed 's/d//' )
	m1=$( echo $t1 | cut -d ' ' -f 3 | sed 's/m//' )
	s1=$( echo $t1 | cut -d ' ' -f 4 | sed 's/s//' )
	lat=$( echo "$d1 + $m1/60 + $s1/3600" | bc -l )

	if [ $( echo $t1 | cut -d ' ' -f 1 | sed 's/d//' ) == 'S' ]; then
		lat=-$lat
	fi

	t2=$( jhead "$1" | grep -E 'GPS Longitude' | sed 's/GPS Longitude: //' );
	d2=$( echo $t2 | cut -d ' ' -f 2 | sed 's/d//' )
	m2=$( echo $t2 | cut -d ' ' -f 3 | sed 's/m//' )
	s2=$( echo $t2 | cut -d ' ' -f 4 | sed 's/s//' )
	lon=$( echo "$d2 + $m2/60 + $s2/3600" | bc -l )

	if [ $( echo $t2 | cut -d ' ' -f 1 | sed 's/d//' ) == 'W' ]; then
		lon=-$lon
	fi

	t10=$( echo $1 | sed 's/\///g' )
	echo "['$t10', $lat, $lon],"

else
	echo "$1:nothing"
fi

Эта программа делает довольно простые вещи:

  • очищает геоданные от другой информации;
  • конвертирует координаты;
  • выводит информацию в удобном для импорта в карту виде.

Запускать так:

bash ./latandlon.sh "файл_изображения"

Пример работы программы:

02

Для автоматизации процесса давайте будем использовать команду find. Например, в моём случае:

find imgs/ -type f -and \( -name '*.jpg' -or -name '*.JPG' \) -exec bash ./latandlon.sh "{}" ';'

Результат:

03

Вместо imgs/ укажите ваш каталог с фотографиями.

Давайте отфильтруем данные, которые всё равно не содержат геоинформацию:

find imgs/ -type f -and \( -name '*.jpg' -or -name '*.JPG' \) -exec bash ./latandlon.sh "{}" ';' | grep -E -v ':nothing'

Результат работы:

04

Чтобы сохранить данные в файл делаем так:

find imgs/ -type f -and \( -name '*.jpg' -or -name '*.JPG' \) -exec bash ./latandlon.sh "{}" ';' | grep -E -v ':nothing' > gps.txt

Теперь создадим ещё один файл, назовём его genaratemap.sh и скопируем туда:

#!/bin/bash

cat << _EOF_
<!DOCTYPE html>
<html> 
    <head> 
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
        <title>HackWare.ru: Geotagging</title> 
        <script src="http://maps.google.com/maps/api/js?sensor=false" 
        type="text/javascript"></script>
    </head> 
    <body>
        <div id="map" style="width: 1900px; height: 1100px;"></div>
        <script type="text/javascript">
            var locations = [
                $( cat "$1" )
            ];
            var map = new google.maps.Map(document.getElementById('map'), {
                zoom: 3,
                center: new google.maps.LatLng(0, 0),
                mapTypeId: google.maps.MapTypeId.ROADMAP
            });
            var infowindow = new google.maps.InfoWindow();
            var marker, i;
            for (i = 0; i < locations.length; i++) {
                marker = new google.maps.Marker({
                    position: new google.maps.LatLng(locations[i][1], locations[i][2]),
                    map: map
                });
                google.maps.event.addListener(marker, 'click', (function (marker, i) {
                    return function () {
                        infowindow.setContent(locations[i][0]);
                        infowindow.open(map, marker);
                    }
                })(marker, i));
            }
        </script>
    </body>
</html>
_EOF_

Запускать так (где вместо gps.txt ваш сгенерированный с помощью предыдущей команды файл):

bash genaratemap.sh gps.txt > map.htm

Теперь открываем файл map.htm любым браузером:

05

Поиск геотэгов в фотографиях на сайтах

Теперь, когда мы умеем искать геотэги в любом количестве файлов в каталогах любой вложенности и при этом наглядно представлять полученные данные, думаю, алгоритм поиска GPS информации на фотографиях сайтов понятен, поскольку он очень прост:

  • мы делаем зеркало сайта на локальном диске;
  • ищем геотэги в каталоге с зеркалом сайта как это описано чуть выше.

Программ для создания зеркал много, я буду использовать утилиту командной строки HTTrack Website Copier. Подробную справку о ней вы можете найти здесь.

В моём случае команда выглядит так:

httrack miloserdov.org  -O "/home/mial/websites/Miloserdov"  -%v  *.jpg

Здесь:

  • miloserdov.org – адрес сайт, фотографии с которого меня интересуют;
  • -O "/home/mial/websites/Miloserdov" – каталог с файлами сайта
  • *.jpg – означает принимать все файлы формата jpg.

Теперь ищем фотографии с GPS метками и генерируем карту:

find websites/Miloserdov/ -type f -and \( -name '*.jpg' -or -name '*.JPG' \) -exec bash ./latandlon.sh "{}" ';'  | grep -E -v ':nothing' > gps.txt
bash genaratemap.sh gps.txt > gps.htm

Открываем полученную карту браузером.

Заключение

Мы научились массово искать и добавлять на карту информацию о том, где сделана фотография. Мы можем это делать как на локальных хранилищах, так и на веб-сайтах.

Нужно знать, что почти все программы, которые изменяют/пересохраняют изображения, отбрасывают геотэги. Это же касается и веб-приложений (фотографии после обработки на WordPress, из популярных социальных сетей).

Смежные вопросы, которые не рассматривались:

  • поиск геотэгов в изображениях отличных от .jpg;
  • добавление на карту не только меток с именами файлов, но и самих фотографий;
  • сбор и анализ другой метаинформации (время съёмки, камера и т.д.), которые могут значительно дополнить полученные данные.

Рекомендуемые статьи:

One Comment на Массовый поиск геотэгов на сайтах и в локальном хранилище

  1. name:

    Сильно! Сайт добавил в закладки

Добавить комментарий

Ваш e-mail не будет опубликован.