打开Themida打包的x64可执行文件?


2

在我们继续之前,我想让你记住我对解压缩可执行文件比较陌生。所以,我有几个

最近我一直在试图解压可执行文件(x64体系结构),又名找到OEP并恢复IAT,这是挤满了Themida 64:

我试着在设置断点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,...),但由于它缺少大量的库(DirectX,OpenGL ,...),我把它扔掉了,因为它不是OEP。

我已经打包UPX的文件,Themida困扰着我。

所有帮助表示赞赏!谢谢:)

8

拆开Themida,特别是较新的版本,不是一个小任务的任何手段。从字面上看,它与开箱UPX有着天壤之别,如果你是开箱新手,那么你完全没有办法试图解开Themida。原因如下:

Themida使用了一个极其复杂的虚拟机环境,结合书中的每个反调试和反分析技巧,并结合了许多不同的混淆方法。例如,在一个UPX打包的二进制文件中,您只需要找到OEP并在最终重建IAT之前将其舍弃。在Themida二进制文件中,代码的不同部分在虚拟机中运行,并且掩盖了目标程序的行为。解密像Themida这样的受VM保护的打包程序的最好方法是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 12月. 172017-12-14 15:05:28