Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > ОС и железо
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.12.2010, 16:27
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Восклицание Получение ANSI и UNICODE строк из тела PE

Приветствую!

Задача:
получить список строковых констант ANSI и UNICODE из тела подопытного PE-файла.

Цель:
конечная цель - программно получить ПОЛНЫЙ список зависимостей НЕ ЗАПУЩЕННОГО PE (а также используемых файлов) для их анализа самописной антивиркой. Импорт получать умею, но многие проги вызывают ДЛЛ динамически. Умею получать список загруженных прогой ДЛЛ, когда она запущена, а также список используемых файлов.

Аналог:
с этим отлично справляется дизасм PE Explorer, но, бывает, глючит.

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

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


ЗЫ
За любую помощь заранее благодарю.
Ответить с цитированием
  #2  
Старый 13.12.2010, 17:07
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

А где ты видел чистые не упакованые/криптованые вирусняки? Если такие и есть, то это какие-то ламовири и строки зачастую шифруют.
__________________
Меня греют ваши плюсы к моей репутации...
Ответить с цитированием
  #3  
Старый 13.12.2010, 17:16
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну тогда просто ищи вызов LoadLibrary.
Т.е. тебе нужен именно код обращения к этой функции.

Хотя, на сколько я помню, даже DependencyView из VisualStudio не показывает зависимости от динасически подгружаемых библиотек.
Ответить с цитированием
  #4  
Старый 13.12.2010, 18:00
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

Нужно хукнуть LoadLibraryW (чтоб отловить больше длл). Но некоторые вири, хотя даже большинство из них используют антиотладочные трюки, проверка брекпоинтов и хуков на важных апи, и прочее. Но зачастую это глупая школота, которая нашла на просторах интернета антиотладочный модуль, подключила его а толком не знают как им пользоваться.
__________________
Меня греют ваши плюсы к моей репутации...
Ответить с цитированием
  #5  
Старый 13.12.2010, 23:55
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
По умолчанию

Мне неважно, шифрованные строки или нет, главное получить их так. как это делает дизассемблер PE Explorer'a, относительно быстро и без мусора.
Ответить с цитированием
  #6  
Старый 14.12.2010, 08:43
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

Цитата:
Сообщение от Vayrus
Мне неважно, шифрованные строки или нет, главное получить их так. как это делает дизассемблер PE Explorer'a, относительно быстро и без мусора.
Ну это нужно анализатор писать. Что-то типа сначала проверить флаги секций чтоб узнать в каких секциях есть данные. Если секция имеет не имеет кода а только данные, ну или ещё таблички импорта(релоков, прочего), то эти таблички пропускаем и ишем в остальном пространстве секции. Если же секция также имеет код (в делфи локальные константные типы используемые с ф-ях находятся ниже ф-ии) потому сначало проходим дизассемблером длин, это будет быстрее, этим отсеиваем участки от кода, оставшиеся проверяем на строкиэ Но это тоже не оптимальный ваниант, лучше было бы проверять все инструкции типа
Код:
PUSH <addr>
MOV r32, <addr>

А потом проверяешь эти адреса на строки.

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

Последний раз редактировалось BoRoV, 14.12.2010 в 09:02.
Ответить с цитированием
  #7  
Старый 14.12.2010, 16:55
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка

Спасибо за исчерпывающий ответ)
М-да, я явно не сделаю такой дизассемблер - анализатор, жаль, придется по старинке сравнивать с кодовой таблицей, вот тока Юникод точно в пролете будет
Ответить с цитированием
  #8  
Старый 14.12.2010, 22:49
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

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

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

З.Ы. А что собственно ты хочешь создать в итоге, если не секрет?
__________________
Меня греют ваши плюсы к моей репутации...
Ответить с цитированием
  #9  
Старый 15.12.2010, 09:41
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
По умолчанию

Цитата:
Сообщение от BoRoV
Ну это только делфи кладёт в секцию с кодом строки и прочие константы. А другие компили для этого отводят отдельно секцию. Ну еще может совет, в прогах на вб только юникод строки.

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

З.Ы. А что собственно ты хочешь создать в итоге, если не секрет?

Определять компиль я умею и у меня именно поставлена цель исследования всех исполняемых и не исполняемых файлов на упакованность и тд и тп
Написать хочу что то типа антивируса, в первом посте глянь внимательно), и тд и тп (иммунизатор и оптимизатор системы). Наработок рабочих много, надо лишь объединить в один движок и проработать множество нюансов. Был бы в команде ответственный честный ПРО кодер с кучей времени - получился бы в короткие сроки антивирь получше там всяких авастов, ИМХО)

ЗЫ
Это моя мечта, но рано или позно, но что то напишу
Ответить с цитированием
  #10  
Старый 15.12.2010, 16:30
Аватар для BoRoV
BoRoV BoRoV вне форума
Начинающий
 
Регистрация: 08.09.2008
Сообщения: 193
Репутация: 12694
По умолчанию

У меня тоже когда-то была такая розовая мечта :-) но смог написать только конкретно для индюка. Пытался потом что-то большее сделать но самому было скучно писать и я бросил.
__________________
Меня греют ваши плюсы к моей репутации...
Ответить с цитированием
  #11  
Старый 15.12.2010, 16:39
Аватар для Vayrus
Vayrus Vayrus вне форума
Исполняемый Ретровирус
 
Регистрация: 09.08.2008
Адрес: Umbrella Corporation
Сообщения: 743
Репутация: 1293
Лампочка

Цитата:
Сообщение от BoRoV
У меня тоже когда-то была такая розовая мечта :-) но смог написать только конкретно для индюка. Пытался потом что-то большее сделать но самому было скучно писать и я бросил.

Ну начать снова никогда не поздно

ЗЫ
У меня также, то начинаю, то забрасываю, в итоге в выхлопе разрозненные части единой системы
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:44.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter