Распаковка Themida упакована в x64 исполняемый файл?


2

Прежде чем мы продолжим, я хотел бы, чтобы вы помнили, что я относительно новичок в распаковке исполняемых файлов. Так что у меня есть несколько

Недавно я пытался распаковать исполняемый (x64 архитектуру), также известный как найти ОЕР и восстановить IAT, который упакован с Themida 64:

Я попытался breakpointing в LoadLibraryA. Я читал, что это отличный способ решить эту проблему.

Однако я не знаю, что делать дальше. Это подводит меня к этой странице:

00007FFE291AA240 | 48 89 5C 24 08   | mov qword ptr ss:[rsp+8],rbx   | 
00007FFE291AA245 | 48 89 74 24 10   | mov qword ptr ss:[rsp+10],rsi   | [rsp+10]:LoadLibraryA 
00007FFE291AA24A | 57      | push rdi        | 
00007FFE291AA24B | 48 83 EC 20    | sub rsp,20        | 
00007FFE291AA24F | 48 8B F9     | mov rdi,rcx       | rcx:"USER32.dll" 
00007FFE291AA252 | 48 85 C9     | test rcx,rcx       | rcx:"USER32.dll" 
00007FFE291AA255 | 74 15     | je kernelbase.7FFE291AA26C    | 
00007FFE291AA257 | 48 8D 15 FA 2F 10 00  | lea rdx,qword ptr ds:[7FFE292AD258] | 7FFE292AD258:"twain_32.dll" 
00007FFE291AA25E | FF 15 B4 C9 0F 00  | call qword ptr ds:[<&_stricmp>]  | 
00007FFE291AA264 | 85 C0     | test eax,eax       | 
00007FFE291AA266 | 0F 84 72 A8 03 00  | je kernelbase.7FFE291E4ADE    | 
00007FFE291AA26C | 45 33 C0     | xor r8d,r8d       | 
00007FFE291AA26F | 33 D2     | xor edx,edx       | 
00007FFE291AA271 | 48 8B CF     | mov rcx,rdi       | rcx:"USER32.dll" 
00007FFE291AA274 | E8 17 00 00 00   | call <kernelbase.LoadLibraryExA>  | 
00007FFE291AA279 | 48 8B 5C 24 30   | mov rbx,qword ptr ss:[rsp+30]   | [rsp+30]:LoadLibraryA 
00007FFE291AA27E | 48 8B 74 24 38   | mov rsi,qword ptr ss:[rsp+38]   | 
00007FFE291AA283 | 48 83 C4 20    | add rsp,20        | 
00007FFE291AA287 | 5F      | pop rdi        | 
00007FFE291AA288 | C3      | ret         | 

Я получил несколько адресов, где он находит API, но оно не нагрузить их все! (из того, что я видел)

Например, в одном адресе я загрузил только файлы Windows (kernel32.dll, KernelBase.dll, ...), но из-за этого не хватает тонны libs (DirectX, OpenGL , ...), я выбросил его, не будучи OEP.

Я распаковал файлы, упакованные с UPX, Themida набрасывает меня.

Вся помощь приветствуется! Спасибо :)

8

Распаковка Themida, особенно более новые версии, не является какой-то небольшой задачей. Это буквально миры, отличные от распаковки UPX, и если вы новичок в распаковке, у вас нет абсолютно никакого дела, пытаясь распаковать Themida. Вот почему:

Themida использует чрезвычайно сложную среду виртуальной машины в сочетании с каждым анти-отладочным и антианалитическим трюком в книгах в сочетании со многими различными методами обфускации. Например, в двоичном файле UPX, необходимо просто найти OEP и сбросить его, прежде чем, наконец, перестроить IAT. В двоичном коде Themida различные части кода запускаются на виртуальных машинах, и это заслоняет поведение целевой программы. Лучший способ распаковать пакет, защищенный виртуальной машиной, например, Themida, - это devirtualize, который включает в себя вычисление всего набора команд, который использует упаковщик и написание сценария для интерпретации этого языка. Все это всего лишь один шаг. Themida также сильно мешает таблице адресов импорта, разбивает всю программу и загружает только одну порцию за раз (это предотвращает «сброс» всей программы, как вы делали с UPX), а затем выгружает ее по расписанию, и реализует кучу антианалитических трюков, many of which are listed on their website.

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

Дальнейшее чтение:

A Generic Approach to Automated Deobfuscation of Executable Code

Anti-Unpacker Tricks by Peter Ferrie

Themida/WinLicense Manual Unpack tutorial

+1

Спасибо за разъяснение этого. Я предполагал, что это очень сложная задача. Думаю, я прочитаю это. 14 дек. 172017-12-14 15:05:28