Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 26 • Страница 1 из 21  2  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Junior
Статус: Не в сети
Регистрация: 04.05.2006
Общая идея:

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

Примерно то же самое делают с людьми, когда выдают им паспорта, и заставляют делать регистрацию... :-)

Если провести аналогии с живой природой, то программа (совокупность всех её копий) - это будет вид, а конкретный экземпляр программы - особь данного вида.

Этой аналогии можно посвятить отдельную большую статью (ареал обитания, выживание и распространение вида, и даже самопожертвование отдельной особи ради выживания вида). Здесь рассмотрим только лишь ПУТИ распространения программ.

Идея в том, чтобы проследить как распространяется от компьютера к компьютеру конкретный экземпляр программы.

Мне представляется очень интересным отследить эти пути распространения, как то: Иванов скопировал программу Петрову, Петров - Сидорову, а Сидоров - Рабиновичу.

В большинстве случаев с распространением программ всё просто: программа скачивается с сайта или устанавливается с CD-диска и живёт на компьютере до перестановки системы. Эти случаи не представляют особого интереса, тут всё понятно.

Нам интересны случаи: "О! какая классная программа - скопируй мне!", когда программа передаётся из рук в руки или кочует по локальной сети или электронной почте.

Также любопытно отследить как кочуют вирусы и трояны.


Как это технически реализовано:

Где хранить информацию о перемещениях программы? Реестр по понятным причинам не подходит. Конфигурационные файлы: не всегда их могут скопировать, да и это представляется мне не лучший вариант (хотя наверное самый простой). Поэтому, как самый безотказный вариант, - данные будем хранить прямо в екзешнике!

Как известо, в конец exe-файла можно дописать всё что угодно, и он будет продолжать работать как ни в чём не бывало.

Информацию о том, на каких машинах её запускали программа будет дописывать себе в конец exe-файла. Эта информация следующая: имя компьютера, имя пользователя, дата и время.

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

"Поймав" такую окольцованную программу можно прочитать записи о том, сколько она прошла компьютеров и в какое время, и составить некоторое представление о том, как же она распространяется в информационном пространстве.


Реализация:

Для реализации используем Borland Delphi и библиотеку KOL. (можно сделать всё на чистом WinAPI, но на KOL всё это делать гораздо удобнее).

Читать из запущенного екзешника можно без проблем.
Код:
//чтение
AssignFile(F,paramstr(0));
FileMode := 0;  {Set file access to read only }
Reset(F,1);
Seek(F,FileSize);
repeat
  BlockRead(F,Buf,SizeOf(Buf),NumRead);
  s:=s+copy(String(buf),1,NumRead);
  //MsgOk(Int2Str(NumRead)+#13#10+s);
until NumRead<SizeOf(Buf);
CloseFile(F);


FileSize - это константа, которая содержит размер собственно exe-файла, без всяких дополнительных записей. Именно с этого места и до конца файла программа начинает читать записи. В каждом конкретном случае нужно исправить эту константу, посмотрев размер только что откомпилированного файла.

С записью - несколько сложнее. Для этого используем следующий трюк: запущенный файл в Windows нельзя удалить или изменить, но можно переименовать или переместить.

В итоге получаем следующий алгоритм:
- переименовываем свой файл
- создаём новый файл, изменённый, с прежним именем
- запускаем новый файл, с параметром чтобы удалить старый
Код:
//переименовываем свой файл
MoveFile(PChar(paramstr(0)),PChar(paramstr(0)+'.old'));

//создаём новый файл, с прежним именем
CopyFile(PChar(paramstr(0)+'.old'),PChar(paramstr(0)),false);

//изменяем его
AssignFile(F2,paramstr(0));
Append(F2);
Write(F2,
   BeginSig+
   GetComputerName+
   MiddleSig+
   GetUserName+
   EndSig+
   DateTime2StrShort(Now)
   );
CloseFile(F2);

//запускаем новый файл, с параметром чтобы удалить старый
ExecuteWait(paramstr(0),'"/del"'+' '+'"'+paramstr(0)+'.old'+'"','',0,0,0);


скачать пример: http://siliks.org/STUFF/fileringing/example.rar



Партнер
 

Member
Статус: Не в сети
Регистрация: 05.12.2005
siliks
Хм, я не понял только одной вещи:
Допустим человек не заметил никаких махинаций с перемещением файлов, изменением его размеров, несовпадением чексум, перезапуском процессов, но как ты потом будешь отслеживать своих "животных" ? Когда "окольцовывают", то остается радиосвязь или что-то еще, по которой в дальнейшем можно узнать примерное местоположение животного, у тебя же такая возможность отсутствует, пока тебе случайно этот экземпляр программы не попадется.


 

Leap Ahead™
Статус: Не в сети
Регистрация: 02.09.2003
siliks
siliks писал(а):
Нам интересны случаи: "О! какая классная программа - скопируй мне!",

Таких уже еденицы.
В основном - "О, какая классная программа, дай ссылку".


 

Junior
Статус: Не в сети
Регистрация: 09.06.2008
Или "О, какая классная программа, дай дистр"


 

Advanced member
Статус: Не в сети
Регистрация: 10.04.2003
Откуда: Москва
siliks, лучше уж в программу внедрять serial number, а при запуске высылать этот номер. Только не на mail, есссно. :)


 

Member
Статус: Не в сети
Регистрация: 16.11.2007
Откуда: Эстония
По моему бредовая затея. Как правильно заметили выше если и кочуют то кочуют дистрибутивы. И если и писать чтото в екзешник, то писать в екзешник дистрибутива.
А трассировку впринципе можно через АиПи машины релизовать. Вот только как же постоянные крики в адрес тех софтверных производителей которые собирают втайне информацию пользователя (не будем называть мелких и мягких имен:)) )


 

Junior
Статус: Не в сети
Регистрация: 04.05.2006
2 sashar2:
Когда окольцовывают никакой радиосвязи нет, есть просто кольцо с номером на лапе птицы или зверя. Когда животное убивают на охоте сознательный охотник передаёт кольцо с номером "куда следует", с указанием места, где он его подстрелил.

2 serj
это что же - каждую копию программы отдельно компилить со своим серийным номером? или как? а если её скопируют, номер, получается, не изменится и будут 2 программы с одинаковым номером? Путаница получается...
не все круглосуточно сидят в инете, чтобы прям так сразу отправлять...
А если что-то высылать без ведома пользователя, так это уже посылка получается (как говорил почтальон Печкин), т.е. троян.

2 amadest

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


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
siliks
Не буду об этом спорить, ты не ответил на сам вопрос:
sashar2 писал(а):
как ты потом будешь отслеживать своих "животных" ?

Самые интересные экземпляры ты и не увидишь :).

Ну и что-то с перечисленными минусам нужно делать:
sashar2 писал(а):
перемещением файлов, изменением его размеров, несовпадением чексум, перезапуском процессов


 

Junior
Статус: Не в сети
Регистрация: 04.05.2006
1) при случайной поимке "животного" можно проследить, через сколько и каких машин оно прошло.
2) если это вирус или троян, то он может отправлять информацию куда-нибудь наружу и с его помощью автор может оценивать масштаб и пути распространения.

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

а) с перемещением файлов наверное ничего не сделать - в виндах нельзя писАть в запущенный екзешник

б) изменение размера можно побороть дописав в конец мусора сразу после компиляции. потом по мере продвижения по машинам заменять мусор на осмысленные записи.

в) с чексуммами - примерно также, изменяя хвост из мусора таким образом, чтобы контрольная сумма не изменилась. "сам себе полиморфизм".

г) с перезапуском процесса - см. пункт "а"


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
siliks
Случайная поимка, да ещё удачного экземпляра практически невозможна т.к в живой природе (если нет устройства определяющего местоположение) можно в какой-то момент времени прочесать большую часть местности, то по компьютерам ты не пройдешь... Поэтому это и отбивает интерес от такой затеи.
Ну и создание конфигурационного файла не такой плохой вариант, ведь ты можешь без его запуска просто запретить работу с программой, единственный минус в том что придется переносить на один файл больше, если файла конфигурации не было предусмотрено. Но всё дальнейшее обсуждение скрытия данных о владельцах бессмысленно без механизма отслеживания.


 

Junior
Статус: Не в сети
Регистрация: 04.05.2006
В обсуждениях имеет место быть неправильная постановка вопроса.

Нет задачи СПЕЦИАЛЬНО искать экземпляры программы.

Есть возможность определить, сколько машин прошёл данный конкретный экземпляр. Как, например, счётчик пройденных километров в автомобиле. Речь ведь не идёт о том, чтобы знать сколько километров прошли ВСЕ автомобили, и передавать эту информацию в диспетчерскую. Но можно определить сколько километров прошёл ИМЕННО ЭТОТ автомобиль. Данный механизм - не более чем "счётчик километров", прикрученный к программе.

Точно также не надо путать окольцовывание с радиомаяком. Радиомаяк позволяет отследить перемещения и найти животное. Но на всех зверей маяки не навесишь. Окольцовывание же (в отличие от радиомаяка и в силу большей "массовости") позволяет не только отследить перемещения отдельных животных, но и на основе их анализа делать заключения о перемещениях ВИДА В ЦЕЛОМ.

Конфигурационный файл слишком "прозрачен". Его можно забыть скопировать или просто удалить. Программа вынуждена будет вновь его создать, и информация о перемещениях потеряется. Зачем нужен такой счётчик километров, пройдённых автомобилем, который "лёгким движением руки" можно установить в любое положение или просто обнулить?


 

Advanced member
Статус: Не в сети
Регистрация: 27.02.2007

_________________
Да не з0банят меня за это.. (С)
Ребята, давайте жить дружно, иначе получите в морду. (С)


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
siliks
siliks писал(а):
Конфигурационный файл слишком "прозрачен". Его можно забыть скопировать или просто удалить. Программа вынуждена будет вновь его создать,

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

И зачем нужен этот "счётчик километров", если его установка добавляет в машину пятое колесо и посмотреть его можно только лишь разобрав машину по частям? Образно говорю о том, что твой метод содержит много проблем, а так же оказывается практически бесполезен (хотя тут была изначально под вопросом полезность собранных данных).


 

Junior
Статус: Не в сети
Регистрация: 04.05.2006
чтобы программа не запускалась без конфигурационного файла только потому, что она не может записать туда информацию о своём распространении - это бред. Хорошая программа если у неё отсутствует (или поврёждён) конфигурационный файл должна создать его заново (или исправить то, что повреждено), а не устраивать пользователю дополнительные трудности.

Можно шифровать данные, это да.

Для собственно езды автомобиля счётчик бесполезен. Он полезен для совершенно других вещей, для которых требуется узнать, сколько проехал автомобиль. Для статистики, для исследований, для чего-нибудь ещё.

Чтобы посмотреть показания такого счётчика не надо разбирать машину, это неправда. Достаточно например запустить программу с параметром и она выдаст показания счётчика. Либо использовать другую программу, специально для этого предназначенную - тут уж, как говориться соль и перец добавить по вкусу :-)

Данные можно собирать любые, речь не о данных, а о способе их хранения. Ну и собственно сама идея мне представляется интересной.

Итак, резюме:
- счётчик нужен для исследований
- просмотреть его достаточно просто
- данные можно собирать любые

Я не предлагаю использовать это повсеместно, это надо использовать там и только там, где это может оказаться полезным.


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
siliks
siliks писал(а):
чтобы программа не запускалась без конфигурационного файла только потому, что она не может записать туда информацию о своём распространении - это бред.

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

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

Вот именно, а программа от вашего счётчика страдает...

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

Я не говорю уже о том, что текущая реализация по какой-то причине узко направлена на "Borland Delphi и библиотеку KOL", а так же далеко не безопасна т.е ваш код придется переписывать полностью. Лучше бы реализовать ее на WinAPI + C++ / Delphi или хотя бы на .NET.


 

Junior
Статус: Не в сети
Регистрация: 04.05.2006
Программа не может сгенерить библиотеку, если её нету. А конфигурационный файл - может. В этом и разница. :-P

Если данные дописывать в библиотеку, то возникнут те же самые проблемы: с изменением контрольной суммы, размера, и невозможностью записи при статической линковке.

Кстати, монитор Доктора Веба на пример не ругается...
Кто может проверить на других антивирусниках?


Что значит "интересные экземпляры"?

Ещё раз повторяю, не ставилось (и не ставится) задачи отследить ВСЕ (или большинство) цепочек распространения программы. Для этого, действительно, нужно изобретать другой способ.
Ставилась задача посмотреть, сколько машин прошёл ДАННЫЙ екзешник с момента компиляции.

Borland Delphi и библиотеку KOL я использую потому что они мне нравятся. :-)
Библиотека KOL, это по сути WinAPI и есть, WinAPI в удобной Delphi-шной обёртке "с человеческим лицом". :-)

Основное - это идея, а реализация на Delphi+KOL служит всего лишь для примера того, что идея реализуема и это работает. Если кому-то понадобится этот способ, он без труда реализует его самостоятельно, на чём захочет.


 

Member
Статус: Не в сети
Регистрация: 18.12.2006
Самый простой и, наверное, единственно работающий способ - социальный: при запуске показывать "письмо счастья" с просьбой дописать в определённый (текстовый!) файл своё имя и при распространении отдавать только этот, новый вариант.


 

Member
Статус: Не в сети
Регистрация: 17.06.2005
Откуда: [ХАРЬКОВ]
Каспер говорит: Trojan.Win32.Agent.alrx

_________________
Кольорова крейда це знаряддя деявола!


 

Junior
Статус: Не в сети
Регистрация: 04.05.2006
Интересно....
Каспер какой версии?
Это при работе, или при сканировании файла?


 

Member
Статус: Не в сети
Регистрация: 05.12.2005
siliks
Если интересно при сканировании, то смотри:
http://www.virustotal.com/ru/analisis/b ... 958c109cc6


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 26 • Страница 1 из 21  2  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  

Лаборатория














Новости

Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan