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

 eXeL@B —› Протекторы —› Декомпилятор ВМ
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 23 . 24 . >>
Посл.ответ Сообщение


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

Создано: 03 марта 2010 12:33
· Личное сообщение · #1

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

Не всё гладко обстоит с определением реализаций ВМ, на сегодняшний день примерно каждая третья реализация автоматом не определяется, приходится под неё модернизировать плагин, т.к. не могу сразу предусмотреть все случаи "издевательств" ВМ с кодом примитивов. Лучше дела с восстановлением "исходного" кода защищенных функций - 70% нормально восстанавливается, хотя во многом это зависит от самой структуры функции. Таким образом, если будет заинтересованность и помощь в нахождении подобных ситуаций, то проект может быть доведен до релизной стадии.

ЗЫ: Речь идет об Ореановских машинах. Нигде специально не упоминал.

9c41_03.03.2010_CRACKLAB.rU.tgz - VMSweeperLst.rar

-----
Everything is relative...




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

Создано: 06 апреля 2010 20:58 · Поправил: V0ldemAr
· Личное сообщение · #2

progopis пишет:
Обрадую вас, в вмпротект нет условных переходов, вообще.

А как тогда обрабатываются jcc?
Извиняюсь херню написал плохо прочитал уставшый с работы...

Вопрос к тем кто следует вмпротект как часто изменяются обработчики от версии к версии?



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

Создано: 06 апреля 2010 21:08 · Поправил: Модератор
· Личное сообщение · #3

Обработчики почти не меняются. Возможно добавляются новые, но я не слежу. Меняется довольно сильно CRC (или как некоторые называют его HASH), хотя общий смысл этой виртуальной инструкции ловится эвристикой. Также меняется обфускация, но она меняется с каждой новой компиляцией. Обфускация обработчиков довольно легко устраняется.

Jcc я пока не разбирал детально, но вроде анализ флагов через NOR и последующий JMP VM_ESP (mov esi, [ebp+0], add ebp, 4). Сейчас гляну и уточню, давно хотел.

V0ldemAr пишет:
Извиняюсь херню написал

Почему это? В обсиде, например, есть выделенная инструкция Jcc, она работает от параметра. В вмпротекте выделенной инструкции нет, поэтому вопрос вполне корректный.




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

Создано: 07 апреля 2010 10:21
· Личное сообщение · #4

progopis пишет:
Обрадую вас, в вмпротект нет условных переходов, вообще. Что будете делать?

Уважаемый progopis, всё что я писал в своем обзоре относится только к Ореановским ВМ (CodeVirtualizer в частности), на тот момент внутренности VMProtect'а я и в глаза не видел, поэтому, когда увижу, тогда и скажу что делать и в каком случае. К сведению, в CV тоже нет условных переходов как таковых, но они есть в любом случае в защищаемой функции, и "ветвление" пикода будет и в ВМ. Всё, что есть обзоре - истина, если можете опровергнуть, то пожалуйста, аргументируйте, но не таким образом - Неверно .

progopis пишет:
Вывод: с мат. частью проблемы. Хорошие идеи есть и их очень много, но не уверен, что идеи авторские.

Понимайте как хотите, но всё что сказано и сделано - это только моё, "умных" мат. книжек примерно лет 20 уже не читал, отсюда и вывод у вас может быть такой, я же скажу проще - мы говорим об одном и том же на разных языках, я на "русском", вы на "английском", суть от этого не меняется - меняется только понимание самой сути, но кто захочет понять - тому не важен язык на каком она изложена, если это ещё и подкреплено практическим исполнением. А идея декомпиляции ВМ появилась отсюда, если интересно, можете взглянуть, когда потребовалась практическая реализация устранения ВМ.

-----
Everything is relative...




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

Создано: 07 апреля 2010 12:13
· Личное сообщение · #5

Позвольте уточню. В вашей документации вы даёте чуть ли не определения понятий, при этом рассматривая их под призмой конкретной ВМ. Также вы пытаетесь сделать продукт универсальный сразу для всех широко применяемых типов ВМ, отталкиваясь от наработок по конкретной ВМ. И вот тут могут быть проблемы. Я тоже занимался сначала одной ВМ (и работу эту мы сделали до конца), рассчитывая создать базу для других ВМ. Но вот только зубы обломал. Движок оказался настолько не универсальным, что его пришлось переписывать чуть ли не с нуля. А всё потому, что сначала надо было ознакомиться с проблемой, изучить разные типы ВМ, а уже потом решать задачу.

"ключом хэширования является адрес размещения пикода в памяти" - вообще говоря ключом может быть всё, что угодно, а может и вообще ключ есть только на операнды
"с созданием сигнатурного шаблона каждого примитива" - либо проблема с определением, либо проблема с представлением о задаче, которая стоит, откройте Obsidium и поймёте о чём я говорю. Вы никогда не составите шаблоны для его КОПов ни в статике, ни в динамике. Если нужны подробности - в ЛС. Если вам вдруг потребуется работать с ВМ в ASProtect, StarForce, то там вы познакомитесь с работой настоящих профессионалов. И все методы сложите в коробочку.

Vamit пишет:
мы говорим об одном и том же

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



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

Создано: 07 апреля 2010 15:24
· Личное сообщение · #6

Хм, а что ключь не меняется от обработчика к обработчику? т.е один ключ на всю таблицу? В нормальных ВМ(на примере солидшилда обработчиков там >10тис) ключь изменяется и каждый опкод дешифруется уже с новым ключем... + алгоритмы дешифровки на каждый обработчик свои и они изменяются при каждой компиляции.




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

Создано: 07 апреля 2010 15:25 · Поправил: mak
· Личное сообщение · #7

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

Как професионально снимать ВМ в ASProtect, StarForce ??? )))) Очень интересно! Главное чтоб после профессионалов все работало. Все эти методы нацелены только под конкретную цель и методы действительно другие , но тем не менее сравнивать нет смысла, по охвату на разные вм , методы предложенные от "профессионалов" не подойдут. Поэтому динамик нужен при 0 информации практически, а статик уже при имении чегонибудь, тем самым комбинируется методы. Пройдет время и это станет ясно как и с анализом всех вм , проанализировать которые весьма большая задача для одного человека , смотря для кого правда. О чем речь вообще ? Делает декомпиль и пусть делает , постоянно кто то отговаривает или какой то шлак ... Хотите помочь помогите ... Пол страницы о том что было весьма хорошо описано и зная это автор даже указал что во избежании флуда , код нацелен на то-то , то-то.

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

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




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

Создано: 07 апреля 2010 15:51
· Личное сообщение · #8

V0ldemAr пишет:
а что ключь не меняется от обработчика к обработчику?

В вмпроте - да, в обсиде - нет, про продукты ореанс не знаю

V0ldemAr пишет:
ключ изменяется и каждый опкод дешифруется уже с новым ключем

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

mak пишет:
Как професионально снимать ВМ в ASProtect, StarForce ???

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




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

Создано: 07 апреля 2010 16:13 · Поправил: Vamit
· Личное сообщение · #9

V0ldemAr пишет:
В нормальных ВМ(на примере солидшилда обработчиков там >10тис) ключь изменяется и каждый опкод дешифруется уже с новым ключем... + алгоритмы дешифровки на каждый обработчик свои и они изменяются при каждой компиляции.

100% согласен, у Ореана аналогично, моя же фраза "ключом хэширования является адрес размещения пикода в памяти" означала, что начальным ключом или инициализацией ключа хэширования является адрес размещения пикода в памяти.

mak и progopis Ребята, не надо ссориться, давайте жить дружно... Задача по декомпиляции ВМ нужная и не такая уж простая, поэтому для пользы дела не нужно нездоровой критики, типа кто и как в школе учился. Главное результат, а кто и как к нему пришел - в данном случае неважно.

-----
Everything is relative...




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

Создано: 07 апреля 2010 16:16
· Личное сообщение · #10

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

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




Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 07 апреля 2010 17:03
· Личное сообщение · #11

mak пишет:
Понятия некоторые самопальные

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

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





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

Создано: 08 апреля 2010 15:01
· Личное сообщение · #12

Vamit,

поправь баг в «Analyze all VM references» — диалог не закрывается крестом.

Еще я бы добавил:

1. ограничение в адресах на 8 символов (тут все просто SendMessage c EM_LIMITTEXT)
2. ограничение в адресах на ввод только шестнадцатиричных значений (тут чуть положнее — либо 4 раза сабклассинг, либо 1 раз суперклассинг)




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

Создано: 08 апреля 2010 16:38 · Поправил: Vamit
· Личное сообщение · #13

kioresk пишет:
поправь баг в «Analyze all VM references» — диалог не закрывается крестом.

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

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

-----
Everything is relative...





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

Создано: 11 апреля 2010 13:23
· Личное сообщение · #14

Реальные шаблоны интерпретаторов ВМ полученные декомпилятором для двух типов конкретных реализаций ВМ:
1. VMProtect
Code:
  1. 01AB3C83: cmd = picode[0xFFFFFFFF]
  2. 01AB3C8B: cmd ^= hash
  3. 01AB3C91: cmd += 0x9F
  4. 01AB3C96: cmd = ~cmd
  5. 01AB3C9A: cmd -= 1
  6. 01AB3CA4: cmd <<= 4
  7. 01AB3CB9: hash ^= cmd
  8. 01AB3CCB: handle = [cmd * 4 + 0x01AB3D9A]
  9. 01AB3CD3: handle = -handle
  10. 01AB434B: handle += 1
  11. 01AB434C: handle ^= 0x32FAD637
  12. 01AB435A: handle -= 1
  13. 01AB3813: handle <<= 8
  14. 01AB3CE5: handle -= 1
  15. 01AB3CE6: handle ^= 0x3BC43F70

2. Ореановские ВМ
Code:
  1. 0119C34E: cmd = [picode]
  2. 0119C355: cmd += hash
  3. 0119D666: cmd ^= 0xD2
  4. 0119EF60: cmd -= 0xF1
  5. 0119EF93: hash += cmd


-----
Everything is relative...




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

Создано: 11 апреля 2010 13:31
· Личное сообщение · #15

Vamit
Не могли бы вы дать тот файл с вмпротом, для которого в предыдущем посте получен шаблон? Действия до обращения к таблице вроде стандартные, потом начинается что-то странное.




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

Создано: 11 апреля 2010 16:44
· Личное сообщение · #16

int пишет:
Не могли бы вы дать тот файл с вмпротом, для которого в предыдущем посте получен шаблон?

Вот здесь повторю.
handle - декодирование адреса примитива

-----
Everything is relative...




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

Создано: 11 апреля 2010 17:23
· Личное сообщение · #17

Потому и спросил файл, ибо ваш листинг - бред:
Code:
  1. mov     al, [esi-1]
  2. xor     al, bl
  3. add     al, 9Fh
  4. not     al
  5. dec     al
  6. rol     al, 4 ; это типа очень похоже на "cmd <<= 4" ???
  7. xor     bl, al
  8. movzx   eax, al
  9. mov     edx, ds:dword_1AB3D9A[eax*4] ; адрес этой инструкции 0x1AB3CCC, но не 0x1AB3CCB
  10. neg     edx ;
  11. inc     edx
  12. lea     esi, [esi-1] ; VM_EIP++
  13. xor     edx, 32FAD637h
  14. dec     edx
  15. rol     edx, 8 ; тоже самое - "handle <<= 8" - неверно
  16. dec     edx
  17. xor     edx, 3BC43F70h
  18. add     edx, 0
  19. push    edx
  20. ;stack obfuscation
  21. retn    0Ch





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

Создано: 11 апреля 2010 20:29
· Личное сообщение · #18

int пишет:
Потому и спросил файл, ибо ваш листинг - бред

И чем же я вам так не нравлюсь, а кто сказал, что <<= равно shl, это общая мнемоника операторов сдвига влево, под которой сидит то, что нужно, в данном случае rol. Неужели вы меня совсем за дурака считаете? Это шаблон и в нем есть условности в представлении, на самом деле это набор структур со вполне реальным содержимым, который работает так как нужно... Хотя наверно, можно было найти более адекватное представление для rol и других операторов сдвига, например, rol=

-----
Everything is relative...





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

Создано: 12 апреля 2010 08:50
· Личное сообщение · #19

int пишет:
А зачем вы тогда эти шаблоны делаете? Смысли в них, если они "общие"?

Только для контроля за декомпилятором, назначение тоже что и у всех логов.
Это Керниган и Ритчи придумали, я ничего не говорил
Это в С они придумали, но к сожалению в С отсутствуют понятия циклических сдвигов и много чего другого, что есть в ассемблере.

теперь сдвиги пытаетесь обобщить. Я не понимаю стремления переписать всю номенклатуру.
Предложите для пользы дела своё видение мнемоники операторов сдвига в едином стиле:
lvalue operate rvalue

-----
Everything is relative...




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

Создано: 12 апреля 2010 09:51 · Поправил: Модератор
· Личное сообщение · #20

Vamit
ASM: rol eax,4
lvalue = eax, rvalue = 4
C: lvalue = (lvalue << rvalue) | (lvalue >> sizeof(lvalue) * 8 - rvalue)
Если же цель сделать именно lvalue operate rvalue , то я бы предложил <<>= и >><=. Есть ещё RotateLeft(lvalue, rvalue) и RotateRight(lvalue, rvalue) из состава WinNT.h. Но я бы предпочёл первый предложенный мной вариант, чтобы можно было сделать скрипт расшифровки таблицы в IDA, например такой:

Code:
  1. auto i, j, val, mask, table_addr;
  2.  
  3. table_addr = 0x1AB3D9A;
  4. val = 8;
  5. for (= 0; i < 256; i++)
  6. {
  7.   j = Dword(table_addr + i*4);
  8.   j = (j ^ 0xFFFFFFFF) + 1; // NEG
  9.   j++; // INC
  10.   j = j ^ 0x32FAD637; // XOR 32FAD637h
  11.   j--; // DEC
  12. // в IDA не совсем обычные сдвиги, поэтому надо делать модификацию
  13.   mask = -1 ^ (-1 << val);
  14.   j = (<< val) | ((>> (32 - val)) & mask); // ROL 8
  15.   j--; // DEC
  16.   j = j ^ 0x3BC43F70; // XOR 3BC43F70h
  17.   PatchDword (table_addr + i*4, j);
  18. }

Вот это уже польза. Взял скрипт и проверил работу декомпиля

Av0id
При чём здесь оптимизация? Что я должен проверить? То про что я точно знаю, что оно неверно? Нет слов.
P.S. Специально для вас подарок в атаче. Зубков тоже допустил не мало ошибок при создании своего справочника, но в данном случае всё верно.

e95c_12.04.2010_CRACKLAB.rU.tgz - ch02_03e.htm



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

Создано: 12 апреля 2010 10:19 · Поправил: Модератор
· Личное сообщение · #21

В догонку шаблоны для скриптов IDA:

ROR j, val
mask = -1 ^ (-1 << (32 - val));
j = ((j >> val) & mask) | (j << (32 - val));
ROL j,val
mask = -1 ^ (-1 << val);
j = (j << val) | ((j >> (32 - val)) & mask);
NOT j
j = j ^ 0xFFFFFFFF;
NEG j
j = (j ^ 0xFFFFFFFF) + 1;
XOR j,val
j = j ^ val;
ADD j,val
j = j + val;
SUB j,val
j = j - val;
INC j
j++;
DEC j
j--;

SHL/SAL/SHR/SAR там вроде не бывает, ибо это необратимые операции, но я думаю вам не составит труда сделать и их в случае чего.




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

Создано: 12 апреля 2010 12:39
· Личное сообщение · #22

int пишет:
C: lvalue = (lvalue << rvalue) | (lvalue >> sizeof(lvalue) * 8 - rvalue)
Если же цель сделать именно lvalue operate rvalue , то я бы предложил <<>= и >><=....Но я бы предпочёл первый предложенный мной вариант, чтобы можно было сделать скрипт расшифровки таблицы в IDA

Это выражение правильно для С, но я делаю не декомпилятор С, поэтому такая транскрипция одной операции мне не нужна, <<>= и >><= - это ближе к делу, но учитывает не все варианты операторов сдвига, как здесь отличить rol от rcl? Ида со своими скриптами отношения к ВМ не имеет, как и полторы страницы написанных постов, т.ч. остановлюсь на своём варианте - rol=, rcl=, <<= (shl, sal), ror=, rcr=, sar=, >>= (shr)

-----
Everything is relative...




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

Создано: 12 апреля 2010 13:03 · Поправил: Модератор
· Личное сообщение · #23

Vamit
Я окончательно не понял, что вы хотите. RCL это операция от трёх операндов, или вы не согласны?

Vamit пишет:
я делаю не декомпилятор С

А зачем же вы давали ссылку на тему про декомпилятор? Шаблон который вы делаете, скажите пожалуйста, зачем он вам? Я привёл пример - сделать скрипт IDA и проверить работу декомпиля. Не нравится IDA, можно для OllyDbg. Но смысла в "rol=" я не вижу. В общем делайте как хотите, я просто думал что тема создана не в духе "смотрите что у меня есть", а с целью обсуждения инструмента, баг-репортов и предложений.

P.S. Тему почистил, если ещё какие посты считаете флудом - без проблем, стучите в ЛС, поскипаю




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

Создано: 13 апреля 2010 15:02
· Личное сообщение · #24

Прога накрытая Темидой под Олькой ведет себя нормально (стоят плагины Phantom 1.54, StrongOD upk 2010). Но при потытке запустить этот пакет из под дебагера VS 2008 для отладки декомпилятора (плагин под Ольку), Темида просыпается и посылает на свой саппорт, но иногда, раза с 3-4 всё срабатывает нормально и можно дебажить, но при нажатии в VS кнопки StopDebugging всё падает вместе с Виндой.
Вопрос: можно ли победить эту хрень и как?

-----
Everything is relative...





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

Создано: 13 апреля 2010 15:21
· Личное сообщение · #25

Конечно можно, надо только антиотладку отключить. Но имхо в в твоем случае проще защитить файл фемидой без опций антиотладки/антипатча/обнаружения мониторов и исследовать на здоровье.




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

Создано: 14 апреля 2010 08:29
· Личное сообщение · #26

kioresk пишет:
надо только антиотладку отключить.

А поподробнее можно?
проще защитить файл фемидой без опций антиотладки/антипатча/обнаружения мониторов и исследовать на здоровье.
Да, для декомпиляции ВМ, это, наверное, правильный способ, но мне нужно сделать анализ только всех вхождений в ВМ именно на этом файле, т.к. здесь декомпилятор падает с исключениями.

-----
Everything is relative...





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

Создано: 14 апреля 2010 09:38 · Поправил: OKOB
· Личное сообщение · #27

Vamit пишет:
мне нужно сделать анализ только всех вхождений в ВМ именно на этом файле


Да какие проблемы? Дампим жертву из ольки не обязательно на ОЕР и без восстановления импорта.
Скармливаем дамп ИДА и напускаем скриптец (в атаче). И усе...

В срипте нужно задать только свои границы кодовой секции и границы хвоста фимы (пример границ из самой Фимы 2110)
beg_main = 0x05EF7AC;
end_main = 0x07F1000;
beg_wl = 0x093B000;
end_wl = 0x1443000;

Кому нужно тот перелудит скрипт для вывода в файл.

CODEREPLACE входы однозначно, а для остальных могут быть ошибочные

d5da_13.04.2010_CRACKLAB.rU.tgz - FindVMEntry.idc

-----
127.0.0.1, sweet 127.0.0.1





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

Создано: 14 апреля 2010 10:55
· Личное сообщение · #28

OKOB пишет:
Да какие проблемы?

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

-----
Everything is relative...





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

Создано: 14 апреля 2010 12:04
· Личное сообщение · #29

Vamit,

выложи файл или скинь в личку.




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

Создано: 16 апреля 2010 10:13
· Личное сообщение · #30

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

1. Нахождение и анализ точек входа в ВМ.
Эта функция использует алгоритмы, которые не зависят от типов ВМ, сам тип ВМ она не определяет, но анализирует и распознает следующие параметры точек входа в ВМ:
- Error - ошибка при определении точки входа, тип ошибки в лог файле.
- Not recognized - точка есть, но её функционал не распознан.
- Done - точка обработана и устранена (в этой функции устраняется только кодированный импорт).
- Cancelled - ошибочная точка, выводится только для проверки анализатора.
- Processing - точка находится в состоянии обработки.
- Postponed - отложенная точка, для обработки требуется определение типа ВМ, которое выполняет другая функция декомпилятора.
Состояние дел:
Реализовано (v1.2) и проверено на VMProtect, CodeVirtualizer.
Реализовано (v1.3) и проверяется на Themida.
В принципе, сложностей здесь нет, если декомпилятор не берет какой либо файл, то можете его выслать (в исходном виде (нераспакованный) мне, желательно указать ОЕП или что-нибудь близкое к нему) и декомпилятор будет доработан.

2. Восстановление импорта.
Эта функция встроена в анализатор точек входа в ВМ. В процессе работы определяется адрес конкретной АПИ функции, после завершения анализа всех точек восстанавливается IAT и коды вызова АПИ функций в теле программы.
Состояние дел:
Реализовано (v1.2) и проверено на VMProtect. В CodeVirtualizer кодированного импорта не найдено.
Есть вопрос по Themidе: Имеется ли в ней кодированный ВМ импорт? Если да, то желательно дать с ним файлик. Замену/эмуляцию нескольких стандартных библиотек я не рассматриваю, на это дело есть скрипты и данную функцию по воссстановлению этого импорта я не планирую добавлять в декомпилятор.

3. Восстановление тела функции (декомпиляция ВМ).
Про эту функцию уже было много сказано, здесь только добавлю и поделю её на 3 шага, т.к. в v1.3 добавлен определитель типа ВМ:
1. Обработчики инициализации ВМ (до цикла интерпретатора) и цикла интерпретатора ВМ определяют тип ВМ и получают настройку окружения/среды ВМ.
2. Определение конкретной реализации ВМ.
3. Построение промежуточного кода и декодирование тела функции.
Реализовано (v1.2) и проверено на CodeVirtualizer (шаги 2 и 3).
Реализовано (v1.3) и проверено на CodeVirtualizer (шаги 1 - 3).
Реализовано (v1.3) и проверено на VMProtect (шаг 1).
В стадии реализации для VMProtect шаг 2, здесь для ускорения процесса может кто-нибудь поделится чистыми/значимыми телами обработчиков примитивов. Вообще-то это "скучная" работа разбора примитивов, для CV мне на разбор 168 примитивов потребовался почти месяц, здесь (VMProtect) времени нужно ещё больше, желательна помощь.
В стадии реализации для Themida шаг 1, вопросов пока нет...

-----
Everything is relative...




Ранг: 1045.7 (!!!!), 31thx
Активность: 0.570
Статус: Участник

Создано: 16 апреля 2010 10:48
· Личное сообщение · #31

Vamit пишет:
Имеется ли в ней кодированный ВМ импорт?

В фиме нет


<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . 10 ... 23 . 24 . >>
 eXeL@B —› Протекторы —› Декомпилятор ВМ
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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