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

 eXeL@B —› Вопросы новичков —› Dr.Web's FLY-CODE распаковывает Asprotect любой версии
Посл.ответ Сообщение

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

Создано: 28 сентября 2010 15:01 · Поправил: volopas
· Личное сообщение · #1

Как выковырять этот FLY-CODE? Тестировал Dr.Web cureit свою delphi-программу, запакованную ASProtect SKE 2.56 .

Cureit при старте распаковывается в папку Temp. Там будет 2 exe-файла. Основной - тот который больше по размеру (у меня 2468 KB, имя скорее всего рамдомно задается):
C:\..\Temp\984E2800-4EC2E780-EA2F340-DF552780\5fee1_xp.exe
В OllyDBG в диалоге "Open 32-bit executable" в строке Имя файла: задать 5fee1_xp.exe, в строке Arguments прописать /lng:ru-scan /ini:setup_xp.ini
В cureit нужно остановить проверку запущенных программ, которая там начинается автоматически, нажать F5 выбрать и начать проверку запакованного ASPROTECT'ом файла

После выполнения последовательности
PUSH EBX
PUSH ESI
PUSH ECX
PUSH EDI
PUSH 4
PUSH 0
CALL EAX

все ресурсы уже распакованы. Но находятся в памяти.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 28 сентября 2010 15:09
· Личное сообщение · #2

А чем не устраивает простой отладчик?
Все скрипты для распаковки уже написаны

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




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

Создано: 28 сентября 2010 15:15
· Личное сообщение · #3

Видимо, в этот момент распакованы и не только ресурсы но и тело, но тело я не могу найти...



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

Создано: 28 сентября 2010 17:18 · Поправил: volopas
· Личное сообщение · #4

>А чем не устраивает простой отладчик?
>Все скрипты для распаковки уже написаны
Хочу автоматическую программу. Типа Стриппера. Все эти скрипты не всю работу делают. Надо самому кое-что доделывать.




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

Создано: 28 сентября 2010 17:54
· Личное сообщение · #5

Анпакеры в аверах никогда не славились полнотой анпака, им это и не нужно.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 29 сентября 2010 00:27
· Личное сообщение · #6

volopas пишет:
Все эти скрипты не всю работу делают. Надо самому кое-что доделывать.

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

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




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

Создано: 02 октября 2010 15:52 · Поправил: Clerk
· Личное сообщение · #7

Ладно, опишу подробно.
1. Извлекаем из архива setup.dll и копируем куданибудь.
2. Регаем отладчик для экзешника в реестре("Image File Execution Options", "Debugger").
3. Запускаем CureIt. Откроется отладчик.
4. Ищем строку в *****_xp.exe "DRWEB_InitDll" и ссылку на неё, будет такой код:
Code:
  1.          push 3e806_xp.00551A54    ; ASCII "DRWEB_InitDll"
  2.          push esi
  3.          call 3e806_xp.0045A390
  4.          add esp,8
  5.          test eax,eax
  6.          jnz short 3e806_xp.0045E1BD

5. Патчим эту процедуру(тут 45A390), исходная:
Code:
  1. $        0045A390   /$  8B0D 9C9F5A00                   mov ecx,dword ptr ds:[5A9F9C]
  2. $+6      0045A396   |.  85C9                            test ecx,ecx
  3. $+8      0045A398   |.  75 03                           jnz short 3e806_xp.0045A39D
  4. $+A      0045A39A   |.  33C0                            xor eax,eax
  5. $+C      0045A39C   |.  C3                              ret
  6. $+D      0045A39D   |>  8B5424 08                       mov edx,dword ptr ss:[esp+8]
  7. $+11     0045A3A1   |.  8B01                            mov eax,dword ptr ds:[ecx]
  8. $+13     0045A3A3   |.  8B80 FC000000                   mov eax,dword ptr ds:[eax+FC]
  9. $+19     0045A3A9   |.  52                              push edx
  10. $+1A     0045A3AA   |.  8B5424 08                       mov edx,dword ptr ss:[esp+8]
  11. $+1E     0045A3AE   |.  8B12                            mov edx,dword ptr ds:[edx]
  12. $+20     0045A3B0   |.  52                              push edx
  13. $+21     0045A3B1   |.  FFD0                            call eax
  14. $+23     0045A3B3   \.  C3                              ret

Конечная:
Code:
  1. $ ==>    0045A390            /$  E8 10000000                                        call 3e806_xp.0045A3A5                                ; PUSH ASCII "E:\Dw\setup.dll"
  2. $+5      0045A395            |.  45 3A 5C 44 77 5C 73 65 74 75 70 2E 64 6C 6C 00    ascii "E:\Dw\setup.dll",0
  3. $+15     0045A3A5            |>  E8 D1793A7C                                        call kernel32.LoadLibraryA                            ; \LoadLibraryA
  4. $+1A     0045A3AA            |.  FF7424 08                                          push dword ptr ss:[esp+8]                             ; /ProcNameOrOrdinal
  5. $+1E     0045A3AE            |.  50                                                 push eax                                              ; |hModule
  6. $+1F     0045A3AF            |.  E8 7C0A3B7C                                        call kernel32.GetProcAddress                          ; \GetProcAddress
  7. $+24     0045A3B4            \.  C3                                                 ret

Стаб изменяется должным образом, имя и смещение. Потом в олли можно юзать бинарный копипаст.
6. Запускаем процесс. Будет загружен наш setup.dll указанный.
7. Берём ядерный отладчик(можно дров собрать на коленке), определяем ObType-калбэк в dwprot.sys. Раскрываем второе ветвление в калбэке(после Call IoGetCurrentProcess()). Там в самом начале проверка двух байтовых переменных на ноль. Зануляем первую, это отключит самозащиту(хз мб где в опциях есть).
8. Все остальные действия выполняются с setup.dll(VM тамже). Ищем строку "Asprotect". Это будет длинный список имён пакеров. Находим ссылку на найденное имя. Это будет один вход в таблице, в которой описаны пакеры. Таблица содержит множество сигнатур, вот описатель входа:
Code:
  1. PACK_INFO struct
  2. ; o EOL: D[0] = -1
  3. ;
  4. SigOffset1               SHORT ?        ; + 0
  5. SigLength1               USHORT ?       ; + 2
  6. SigHash1                  DWORD ?         ; + 4
  7.  
  8. SigOffset2               SHORT ?        ; + 8
  9. SigLength2               USHORT ?       ; + 0x0A
  10. SigHash2                  DWORD ?         ; + 0x0C
  11.  
  12. SigOffset3               SHORT ?        ; + 0x10
  13. SigLength3               USHORT ?       ; + 0x12
  14. SigHash3                  DWORD ?         ; + 0x14
  15.  
  16. SigOffset4               SHORT ?        ; + 0x18
  17. SigLength4               USHORT ?       ; + 0x1A
  18. SigHash4                  DWORD ?         ; + 0x1C
  19.  
  20. Unpacker                  PVOID  ?        ; + 0x20, ROUTINE(Esi: @EP, Ebp: ARG's)
  21. PackName                  PSTR  ?         ; + 0x24
  22.  
  23. Version            CHAR 8 DUP (?)
  24. PACK_INFO ends

Это 4 сигнатуры по которым определяется пакер, имя его, версия и ссылка на анпакер. Вот эта ссылка вам и нужна.
9. По ссылке на таблицу найдёте код выполняющий идентификацию пакера, вызывающий анпакер и выполняющий остальную работу с запакованным модулем. Кстате в глобальной таблице калбэков флая имеется вызываемый после идентификации анпакера, именно он и пишет в лог инфу про пакер(индекс 0x1E).

| Сообщение посчитали полезным: Dynamic
 eXeL@B —› Вопросы новичков —› Dr.Web's FLY-CODE распаковывает Asprotect любой версии
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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