Сейчас на форуме: -Sanchez- (+8 невидимых)

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

Ранг: 80.6 (постоянный), 194thx
Активность: 0.10.04
Статус: Участник

Создано: 30 апреля 2017 23:26 · Поправил: v00doo
· Личное сообщение · #1

Понадобилось набросать деобфускатор кода (самого стандартного), ранее не писал ничего подобного, а под x64 ничего нормального не нашлось.
Если у кого есть какая информация, менее водянистая, чем большая часть статей с очевидными вещами про управление потоком или чисткой блоков.
Допустим паттерны можно набросать (да их будет много в итоге) против фейковых call'ов и жампов, но возникает вопрос про организацию сворачивания кода с вычислениями значений тех же регистров, например:
SUB EAX,10345678
AND EAX,10345678
XOR EAX,DEADC0DE
могут же быть размыты по коду...
Может уже давно существуют алгоритмы на основе каких-нибудь графов, а может еще у кого-то есть сырцы codedoctor (хотя, конечно же нет) или может кто-то реверсил? (я в курсе про шаблоны, но о процессе обработки там не в курсе).

В общем любая информация приветствуется.

Ps Огромная просьба, НЕ ПИСАТЬ в тему про моторы и прочие вещи, недоступные для понимания простым и глупым смертным, ибо з**ло в каждой теме это говно.




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 30 апреля 2017 23:51 · Поправил: difexacaw
· Личное сообщение · #2

v00doo

> Огромная просьба, НЕ ПИСАТЬ в тему про моторы и прочие вещи, недоступные для понимания простым и глупым смертным

Улыбнуло, спс

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

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

Поэтому следует выбрать вариант решения наиболее простой, доступный.

-----
vx




Ранг: 21.0 (новичок), 19thx
Активность: 0.010.03
Статус: Участник

Создано: 01 мая 2017 00:01
· Личное сообщение · #3

v00doo
в этой теме --> Link <-- есть исходники OllyDeobfuscator, может пригодятся.

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


Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 01 мая 2017 00:06
· Личное сообщение · #4

Тут можно накопать множество инфы по автоматике --> Link <--

Но там всякие LLVM, выносящая мозг матчасть, поэтому врядле вам это нужно. Я бы это не стал рассматривать.

Добавлено спустя 8 минут
v00doo

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




c34f_01.05.2017_EXELAB.rU.tgz - Int29.rar

-----
vx




Ранг: 431.7 (мудрец), 389thx
Активность: 0.730.32
Статус: Участник

Создано: 01 мая 2017 00:16 · Поправил: dosprog
· Личное сообщение · #5

v00doo пишет:
Допустим паттерны можно набросать (да их будет много в итоге) против фейковых call'ов и жампов


)) "Набросать" деобфускатор" не получится.

[...]
Автоматически ничего работать не будет короче.





Ранг: 16.3 (новичок), 2thx
Активность: 0.030
Статус: Участник

Создано: 01 мая 2017 00:28
· Личное сообщение · #6

Угу или таких:
Code:
  1. 0x0F
  2. 0x1F
  3. 0x00

Интел маны не отменял никто




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 01 мая 2017 00:33 · Поправил: difexacaw
· Личное сообщение · #7

Это проблемы не алгоритмов - разбором кода занимается дизасм, ксед к примеру. Проблема в том, что не удаётся после абстрагирования(декомпиляции) применить шаблоны. dosprog прав, на коленке это реализовать не получится. Тем более что тс это нужно с нуля сделать, без использования моторов
Задача оверхед.

-----
vx




Ранг: 16.3 (новичок), 2thx
Активность: 0.030
Статус: Участник

Создано: 01 мая 2017 00:53
· Личное сообщение · #8

--> Про кодетоктор <--




Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 01 мая 2017 00:53 · Поправил: reversecode
· Личное сообщение · #9

было несколько деобфускаторов
один для ида, на питоне, автор помоему его давно забросил, если есть познания в питоне то
--> Link <-- победил контестс
mirror --> Link <--


ДО




ПОСЛЕ




основная идея деобфускатора(ов)
загнать асм код в асм компилер, а компилер его прооптимизирует, выбросит все ненужное
и дальше показать дизасм из того что собрал компилер

был еще такой плаг как ariadne
--> Link <--
--> Link <--
--> Link <--
но по моему он не взлетел
хотя авторы тогда на форуме показывали оптимистические результаты, даже чего то там на VMP намекали..

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

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


Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 01 мая 2017 00:56
· Личное сообщение · #10

reversecode

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

-----
vx





Ранг: 1053.6 (!!!!), 1078thx
Активность: 1.060.81
Статус: Участник

Создано: 01 мая 2017 01:08
· Личное сообщение · #11

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

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




Ранг: 150.3 (ветеран), 175thx
Активность: 0.160.07
Статус: Участник

Создано: 01 мая 2017 01:21 · Поправил: -=AkaBOSS=-
· Личное сообщение · #12

v00doo
Toy Decompiler, статья+сорцы, можно почерпнуть инфу о построении и оптимизации выражений на основе асм кода.

dosprog пишет:
стоит задуматься хотя бы о разборе такого типа конструкций

ну на любой анализатор можно придумать хитрую конструкцию, которая заставит его споткнуться.
даже мусорных ветвлений не надо, хватит и банальной самомодификации типа
Code:
  1. mov dword [@f], 0xC340C033
  2. @@:
  3.    dd 0x12345678 ; пока что мусор


паттерны это не настолько плохая идея, чтобы сразу её отметать - хотя бы часть кода получится упростить для понимания, а потом уже можно думать дальше.

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

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

Ранг: 431.7 (мудрец), 389thx
Активность: 0.730.32
Статус: Участник

Создано: 01 мая 2017 01:32 · Поправил: dosprog
· Личное сообщение · #13

-=AkaBOSS=- пишет:
хватит и банальной самомодификации типа


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

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

--Добавлено--

) Вот, для тестирования будущего деобфускатора, "тряпка" : 6c0d_01.05.2017_EXELAB.rU.tgz - DUMMY.EXE





Ранг: 80.6 (постоянный), 194thx
Активность: 0.10.04
Статус: Участник

Создано: 01 мая 2017 01:41 · Поправил: v00doo
· Личное сообщение · #14

VT-x пишет:
--> Про кодетоктор <--

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

Именно так, для того, что под исследованием пока с головой хватает паттернов.

dosprog, приписка в шапке темы для кого? VT-x касается тоже самое.

reversecode пишет:
основная идея деобфускатора(ов)
загнать асм код в асм компилер, а компилер его прооптимизирует, выбросит все ненужное
и дальше показать дизасм из того что собрал компилер

Именно о подобном подумывал, спасибо за сырцы, я сгуглил поменьше так-то, в общем-то мне нужна как раз именно эта часть (идея).
dosprog пишет:
Вот, для тестирования будущего деобфускатора, "тряпка"

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



Ранг: 431.7 (мудрец), 389thx
Активность: 0.730.32
Статус: Участник

Создано: 01 мая 2017 01:46 · Поправил: dosprog
· Личное сообщение · #15

v00doo пишет:
приписка в теме для кого?

) Наверно, то ты для себя "набросал", не знаю.
Вон, в прошлом посте возьми DUMMY.EXE и попытайся орудовать паттернами.
) О графах и моторах то уже будет после

v00doo пишет:
я лишь хотел собрать материала чтобы автоматизировать это менее уродливо

Задача не решается автоматически в принципе, что бы там кто ни говорил.





Ранг: 80.6 (постоянный), 194thx
Активность: 0.10.04
Статус: Участник

Создано: 01 мая 2017 01:49 · Поправил: v00doo
· Личное сообщение · #16

dosprog пишет:
О графах и моторах то уже будет после

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



Ранг: 431.7 (мудрец), 389thx
Активность: 0.730.32
Статус: Участник

Создано: 01 мая 2017 01:51 · Поправил: dosprog
· Личное сообщение · #17

) Ок, успехов.


 eXeL@B —› Основной форум —› Деобфускация асм кода
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати