Определяем местоположение по коммитам в git

в 20:31, , рубрики: Git, OSINT, безопасность, визуализация данных, геолокация

Вот вам карты «возможного» местоположения разработчиков Telegram и React для затравки.

Telegram Desktop. Всего 205 человек. Из них 3 основные. Два (работают с 2014 и 2019) в районе Самара-Кавказ (Армения, Грузия, Азербайджан) и один (работает с 2018) вероятно в Турции.

Telegram Desktop. Всего 205 человек. Из них 3 основные. Два (работают с 2014 и 2019) в районе Самара-Кавказ (Армения, Грузия, Азербайджан) и один (работает с 2018) вероятно в Турции.
ReactJS. Всего 1854 человек. Основной состав: 14 работает, 26 уволилось. Примерно 50/50 сидят на восточном и западном побережье США.
ReactJS. Всего 1854 человек. Основной состав: 14 работает, 26 уволилось. Примерно 50/50 сидят на восточном и западном побережье США.

Параметры:

  • масштаб +/- страна;

  • промах до тыс. км.;

  • вероятность ошибки, по ощущениям, пока ~20%;

Факты:

  • время коммита сохраняется с timezone пользователя;

  • мы можем извлечь историю коммитов вызывав git log;

Текущий алгоритм:

  • смотрим часовой пояс в метке времени коммита;

  • в некоторых часовых поясах расположен лишь один крупный город (например: +4:30 Кабул, +5:45 Катманду, +10:30 Аделаида);

  • в некоторых часовых поясах расположена лишь одна страна (например: +05:30 Индия, +12:00/+13:00 Новая Зеландия);

  • имея зону с N странами учитываем только те, где большая вероятность IT (например: в зоне Буркина Фасо / Великобритания исключаем Буркина Фасо)

  • проверяем домен первого уровня у почтового ящика (например: mil в основном используют военные США);

  • проверяем почтовый сервер (например: китайцы предпочитают qq.com)

  • проверяем уникальные символы в текстах коммитов (например: ł для Польши, ß для Германии, ñ для Испании);

  • проверяем популярные фамилии (например: Ким и Пак это ~15 млн. корейцев из зоны Корея/Япония, а Судзуки и Сато ~4 млн. японцев)

Что можно ещё:

  • сохранить ТОП 100 IT-компаний и их адресов. Из email узнать компанию (например: для ivan@luxoft.com это, скорее всего, Luxoft). Сопоставить почту, офисы и текущий диапазон стран.

  • если человек долго и много коммитил, можно составить гистограмму и сопоставить провалы в ней с гос. праздниками (например: рождество у католиков, фиеста и сиеста у испанцев, день независимости в Папуа — Новая Гвинея).

  • сопоставить местоположение с другими метриками и выделить на карте работающих и уволенных (или основной состав). Далее корректировать местоположение отдельных ребят по позиции большинства.

Минусы:

  • много мест с «если», поэтому будут ошибки. Моя задача угадать не 100% случаев, а верно предположить «для большинства».

  • алгоритм легко обмануть, но «для большинства» это бессмысленная задача.

Да, метод не самый точный. Но текущая реализация (с багами) уже неплохо угадывает, а если добавить правильные переходы на летнее и зимнее время, а также расширить метрики, станет ещё лучше. Исходники тут, онлайн демо тут.

Пакеты для Python, Ruby, JS, PHP, Docker

Python:
установка:pipx install assayo
создать отчёт:assayo

Ruby:
установка:gem install assayo
создать отчёт:assayo

JS:
создать отчёт:npx assayo

PHP:
установка:composer require bakhirev/assayo
создать отчёт:vendor/bin/assayo

Docker:
образ: https://hub.docker.com/r/bakhirev/assayo

P.S.: Когда я писал это, новости про Linux ещё не было. А теперь как-то странно выходит, ведь это потенциально можно использовать для массовых баннов. Но с другой стороны, причина банов не в инструменте составления списков. Странно будет удалять это.

UPD: Снял лог c Linux:

~4850 компаний (из них 8% Intel, 4% AMD, 3% RedHat) ~26780 программистов (из них 498 "основных"). 756 человек, скорее всего, из РФ (это 3%). Для сравнения 1664 из Индии (6%). По одному человеку от Аляски, Непала и Вьетнама.

~4850 компаний (из них 8% Intel, 4% AMD, 3% RedHat) ~26780 программистов (из них 498 "основных"). 756 человек, скорее всего, из РФ (это 3%). Для сравнения 1664 из Индии (6%). По одному человеку от Аляски, Непала и Вьетнама.

Автор: bakhirev

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js