Русский / Russian English / Английский

Сейчас на форуме: morgot, Storage (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Основной форум —› Деобфускация нативного кода.
Посл.ответ Сообщение


Ранг: 164.6 (ветеран)
Статус: Участник
Волшебник

Создано: 9 сентября 2013 12:30 · Поправил: neomant New!
Цитата · Личное сообщение · #1

Здравствуйте, все заинтересованные этой темой.

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

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

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

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


Ранг: 1024.6 (!!!!)
Статус: Участник

Создано: 9 сентября 2013 12:34 · Поправил: reversecode New!
Цитата · Личное сообщение · #2

гугл коде optimize плагин для ida
--> Link <--

Ранг: 301.0 (мудрец)
Статус: Участник

Создано: 9 сентября 2013 17:49 New!
Цитата · Личное сообщение · #3

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

Ранг: 36.1 (посетитель)
Статус: Участник

Создано: 9 сентября 2013 18:05 · Поправил: Jonny New!
Цитата · Личное сообщение · #4

reversecode пишет:
гугл коде optimize плагин для ida

на данный момент валится на переходах, которые не выполняются (возврат из подпрограммы, условный переход). Там не хватает эмулятора инструкций.
P.S. Я имею ввиду optimice плагин.

Ранг: 112.9 (ветеран)
Статус: Участник

Создано: 9 сентября 2013 18:54 · Поправил: vden New!
Цитата · Личное сообщение · #5

Тоже понемногу занимаюсь данным вопросом

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

Многопроходный, потому что очень часто за 1 раз удастся только добыть некоторые данные. А граф нужно будет перестроить с учетом полученных данных.

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

простые штучки могут отметаться на лету, например

xor eax, eax
jnz ..
jz ..

Кстати еще могут быть ветвления-дубликаты, т.е. обе ветки в ветвлении делают одно и тоже, но по разному разбавлены мусором.

как распознать, что это действительно вызов и возврат, а не переходы
Думаю, никак. Я вижу 2 варианта:
1. пользователь отмечает что этот call - либо call либо jmp
2. задать шаблон, допустим, все callы при анализе данной функции либо call либо jmp

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

В идеале граф нужно строить в p-коде в SSA форме. Это поможет провести больше оптимизаций в дальнейшем.

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

На самом деле все конечно же сложнее. И это без учета всякой само-модификации кода.


Ранг: 164.6 (ветеран)
Статус: Участник
Волшебник

Создано: 9 сентября 2013 19:16 New!
Цитата · Личное сообщение · #6

reversecode пишет:
коде optimize плагин для ida


По демо вещь действительно хорошая, но пока оценить не смог, не получается прикрутить к IDA IDApython.
Нигде не могу найти инсталл python с python27.dll

Как вижу тема действительно актуальна. Писать отдельный инструмент смысла нет. Сам думал в виде
плагина для Олли, чтоб не заморачиваться ещё с загрузкой трейсом и дизасмом.

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


Ранг: 1024.6 (!!!!)
Статус: Участник

Создано: 9 сентября 2013 19:27 New!
Цитата · Личное сообщение · #7

выбирай любой
http://www.python.org/ftp/python/2.7/python-2.7.msi
там на ftp много их
и optimize лучше с svn обновить последний


Ранг: 669.3 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 9 сентября 2013 19:30 New!
Цитата · Личное сообщение · #8

neomant
А с Immunity Debugger разве не идёт инсталл питона 2.7? --> Заполнить форму надо и вперёд <--


Ранг: 307.7 (мудрец)
Статус: Участник

Создано: 9 сентября 2013 19:36 · Поправил: mysterio New!
Цитата · Личное сообщение · #9

>> python v2.7 << там же и другие версии. Да и собственно уже выше дали ссылку ;)


Ранг: 164.6 (ветеран)
Статус: Участник
Волшебник

Создано: 9 сентября 2013 19:54 New!
Цитата · Личное сообщение · #10

Всё оказалось проще: python не ставился нормально под Windows 7 64, на XP 32 встал нормально и кинул
свою python27.dll.
Прикрутил optimice и... как всегда и сразу же разочаровался. Ничего заявленного в демо не увидел, зато на
первых попавшихся двух приложениях на точке входа плаг вылетает с ошибками. Сегмент новый создан, но
он пуст.


Ранг: 72.3 (постоянный)
Статус: Участник

Создано: 9 сентября 2013 19:55 New!
Цитата · Личное сообщение · #11

> авно назревает идея написания такого инструмента

Какого инструмента, вообще о чём вы говорите. Сия задача даже людям не под силу, в случаи пермутации. Давай, пробуй. Пиши

| Сообщение посчитали полезным: dosprog



Ранг: 1024.6 (!!!!)
Статус: Участник

Создано: 9 сентября 2013 20:24 New!
Цитата · Личное сообщение · #12

можно еще такого зверя вспомнить --> Link <--
жаль канул в лету вместе с его авторами
хотя примеры работы вроде как кого то даже устроили по выхлопу
 eXeL@B —› Основной форум —› Деобфускация нативного кода.

Видеокурс ВЗЛОМ