Сейчас на форуме: UniSoft, _MBK_, laslo (+9 невидимых)

 eXeL@B —› Программирование —› АнтиОбфускатор
. 1 . 2 . 3 . 4 . >>
Посл.ответ Сообщение


Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 04 декабря 2008 18:02 · Поправил: Модератор
· Личное сообщение · #1

Какие есть методы по борьбе с обфускацией ? Цель написать анализатор заменяющий 10 обфусцированных команд в одну настоящую. Для этого наверное нужно делить по блокам , а потом уже в них искать смысл и изменения. Бывает что между командами лежит просто мусор , который даже не используется =) Поэтому пока что эту часть я хочу просто опустить .. и отследить одну команду выполненую 10 или более команд без изменения смысла той самой одной.

У кого нить есть информация с РАН фаха Кибернетики ? Там професора пишут ух какие тексты.

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 04 декабря 2008 19:06
· Личное сообщение · #2

Информация о создании обфускатора на основе макросов в masm'е правда для таблицы импорта
interpol.blog.ru/
мб чем-то полезно.

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 162.4 (ветеран), 11thx
Активность: 0.060
Статус: Участник

Создано: 04 декабря 2008 19:27
· Личное сообщение · #3

Обычно обфускация табличная. Надо тока востановать эту таблицу и проделать все обратно. (регистры могут быть разные)




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 04 декабря 2008 19:33
· Личное сообщение · #4

может быть =) но это руками надо делать , а я о програмном методе фиксирующем изменения логики масивов из кода

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 126.7 (ветеран)
Активность: 0.140
Статус: Участник
#CCh

Создано: 04 декабря 2008 21:24
· Личное сообщение · #5

mak пишет:
Цель написать анализатор заменяющий 10 обфусцированных команд в одну настоящую.

mak пишет:
я о програмном методе фиксирующем изменения логики масивов из кода

а в чем проблема? если именно из 10 команд, именно 1, то проверь как изменились регистры и пр., одна команда - это не 5 обфусцированных.. или конкретней объясни что нужно

-----
invoke OpenFire





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 04 декабря 2008 21:50
· Личное сообщение · #6

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

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 05 декабря 2008 15:02 · Поправил: Hexxx
· Личное сообщение · #7

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

Типа было:

mov eax, 0x10
mov ecx, 0x40
sub ecx, eax
mov ebx, ecx

Транслируем в си:

unsigned long eax,ebx,ecx;
eax=0x10;
ecx=0x40;
ecx-=eax;
ebx=ecx;

далее компилируем полученый сишный код любым нормальным оптимизирующим компилером с включенной полной оптимизацией.

На выходе получаем бинарь в котором:
mov ebx, 0x30

Занимаемся анализом нового бинаря где все просто и уютно.

-----
Реверсивная инженерия - написание кода идентичного натуральному





Ранг: 209.5 (наставник), 42thx
Активность: 0.10
Статус: Участник
WinCE ARM M@sTeR

Создано: 05 декабря 2008 16:07
· Личное сообщение · #8

Ога, предложение Hexxx верное, только по умному это достигается через всякие SSA и dead code elimination, что и делает компилер с оптимизацией

-----
Get busy living or get busy dying ©





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 05 декабря 2008 18:03
· Личное сообщение · #9

спасибо , уже есть направление куда смотреть

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 13.7 (новичок)
Активность: 0.020
Статус: Участник

Создано: 05 декабря 2008 18:05
· Личное сообщение · #10

А ассемлерного оптимизирующего компилятора нет? А то есть длинный кусок кода, на С оччень долго траслировать. Хотя способ классный. Но, как я понимаю, лишних временных переменных, например, сишный компилятор не уберет?



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

Создано: 05 декабря 2008 18:20
· Личное сообщение · #11

XoDeR пишет:
А то есть длинный кусок кода, на С оччень долго траслировать.


Попробуй HexRays



Ранг: 13.7 (новичок)
Активность: 0.020
Статус: Участник

Создано: 05 декабря 2008 19:00
· Личное сообщение · #12

HexRays почему-то не хавает команды fpu (типо fsin), пишет такие команды в asm-блоке, добавляет какие-то непонятные макросы (__MKCSHR__ -аналог асмового shr ). и полученый с-код надо еще долго править, чтобы скомпилился. Может кто сталкивался с такими задачами, подскажите как сделать эффективнее и быстрее.




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 05 декабря 2008 19:04
· Личное сообщение · #13

задача стоит не ручная , а програмная , поэтому хексрэйс в баню)))

У меня есть оптимизатор на АСМЕ , но без исходников , нужно его разобрать и глянуть что там.

7591_05.12.2008_CRACKLAB.rU.tgz - opti1.zip

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 154.2 (ветеран), 66thx
Активность: 0.080
Статус: Участник
REVENGE Crew

Создано: 05 декабря 2008 23:51 · Поправил: kioresk
· Личное сообщение · #14

Hexxx пишет:
берем обфусцированный код и команда в команду транслируем его в сишный код.

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

Когда копал Code Virtualizer'а, то попалась интересная статья http://www.woodmann.com/forum/showthread.php?t=12015 об оптимизации обфуцированного кода хендлов ее вм.

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

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

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




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 06 декабря 2008 00:04
· Личное сообщение · #15

kioresk оч интересно , как раз по теме ты )))

P.S. выше оптимизатор работает только в директории масма , на нем лежит пекомпакт , вот унпаченная версия , кому интересно

4fe7_05.12.2008_CRACKLAB.rU.tgz - opti_unpacked.exe

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 06 декабря 2008 01:23
· Личное сообщение · #16

Немного инфы по формату BNF - включено Appendix B BNF Grammar для МАСМ и Описание стандарта ISO/IEC 14977:1996(E) Extended BNF

Надо только разобрать , или оптимизировать для универсальности не только к Code Virtualizer , для этого данные бнф формата и понадобятся. Хотя по идее должно быть и для другого подходяще

65cb_05.12.2008_CRACKLAB.rU.tgz - bnf.rar

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 154.2 (ветеран), 66thx
Активность: 0.080
Статус: Участник
REVENGE Crew

Создано: 06 декабря 2008 13:27
· Личное сообщение · #17

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

Там в конце статьи прикреплен архив с исходниками подобного оптимизатора, посмотри их, если не заметил.




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 06 декабря 2008 13:52
· Личное сообщение · #18

заметил конечно ) мой глаз видит то что не нужно ))

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

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube





Ранг: 192.7 (ветеран), 154thx
Активность: 0.070
Статус: Участник
The ONE

Создано: 06 декабря 2008 19:27
· Личное сообщение · #19

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

-----
Сотрудник DHARMA




Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 07 декабря 2008 14:28
· Личное сообщение · #20

TrueLies пишет:
Может на основе графов сделать - принцип как у работы антивиря - на основе кода строится графы и при анализе отсеиваются замыкающиеся - таким способом отсеиваем бесполезный код.

Если метаморф - не проканает.

-----
Реверсивная инженерия - написание кода идентичного натуральному





Ранг: 527.7 (!), 381thx
Активность: 0.160.09
Статус: Участник
Победитель турнира 2010

Создано: 08 декабря 2008 13:38
· Личное сообщение · #21

Вопрос общий для реверсинга протекта и малвары.

И если заниматься вопросами деобфускации не на коленке, то стоит имхо обратить внимание
на работы бельгийских товарищей diablo.elis.ugent.be/obfuscation и Red Team (Riverside Research Institute).

Вот кусок предлагающейся по вопросу топика инфы rapidshare.com/files/171388363/deobfus.ZIP.html

-----
127.0.0.1, sweet 127.0.0.1





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 08 декабря 2008 14:50
· Личное сообщение · #22

OKOB СэнкЮ интересно

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 08 декабря 2008 17:12
· Личное сообщение · #23

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




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 08 декабря 2008 22:15
· Личное сообщение · #24

Лично я где-то года 2 назад честно и безуспешно пробовал слить и собрать. Судя по тому, что последняя версия года 2005, не изменилось ничего.




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 27 декабря 2008 16:31
· Личное сообщение · #25

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

0032_27.12.2008_CRACKLAB.rU.tgz - oreans.rar

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 28 декабря 2008 14:36
· Личное сообщение · #26

mak
там не в хедерах дело - тебе нужны flex/bison/gcc под винду чтобы это собрать



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 28 декабря 2008 15:56
· Личное сообщение · #27

Нужен компилятор yacc




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 28 декабря 2008 16:41
· Личное сообщение · #28

Вот начинается Си же универсален .. Спасибо попробую

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 28 декабря 2008 19:25 · Поправил: progopis
· Личное сообщение · #29

mak пишет:
Си же универсален


А кто тебе сказал что там Си? Он там есть, но не всё:
Code:
  1. y.tab.c: parser.${PROG}.y
  2.          yacc parser.${PROG}.y     
  3. y.tab.h: parser.${PROG}.y
  4.          yacc -d parser.${PROG}.y
  5. lex.yy.c: lexer.${PROG}.l y.tab.h   
  6.          flex -l lexer.${PROG}.l   
  7. ${PROG} : lex.yy.c y.tab.
  8.          gcc --${PROG} y.tab.c list.-lfl


GCC у меня и так стоял. Соберу остальное - попробую скомпилить.

Добавлено:
Code:
  1. D:\oreans>make
  2. yacc -d parser.asm.y
  3. flex -l lexer.asm.l
  4. yacc parser.asm.y
  5. gcc --o asm y.tab.c list.-lfl
  6. gcc: y.tab.c: No such file or directory
  7. list.c:2:19: y.tab.h: No such file or directory
  8. list.c: In function `compare_args':
  9. list.c:72: error: `REGISTER' undeclared (first use in this function)
  10. list.c:72: error: (Each undeclared identifier is reported only once
  11. list.c:72: error: for each function it appears in.)
  12. list.c:72: error: `NUMBER' undeclared (first use in this function)
  13. list.c: In function `copy_vars':
  14. list.c:127: error: `TYPE' undeclared (first use in this function)
  15. make: ***

Перевожу на русский: не хватает двух файлов - y.tab.c и y.tab.h
Добавлено:
А ещё заявлют о полной совместимости между Bison и YACC... Bison генерит файл parser.asm.tab.c, а должен y.tab.c
Ну допустим переименовал. Вторая проблема - параметр -lfl. Он отвечает за линковку файла вместе со статической библиотекой flex'а, только вот линковщик этот параметр не знает...



Ранг: 352.4 (мудрец), 4thx
Активность: 0.150
Статус: Участник
retired

Создано: 28 декабря 2008 22:15
· Личное сообщение · #30

progopis пишет:
Он отвечает за линковку файла вместе со статической библиотекой flex'а, только вот линковщик этот параметр не знает...

проверь, может ли линкер до либы дотянуться (libfl.a)


. 1 . 2 . 3 . 4 . >>
 eXeL@B —› Программирование —› АнтиОбфускатор
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати