Форум по 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,087
Версия 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
Лампочка

Спасибо за исчерпывающий ответ)
М-да, я явно не сделаю такой дизассемблер - анализатор, жаль, придется по старинке сравнивать с кодовой таблицей, вот тока Юникод точно в пролете будет
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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