本帖最后由 zhaohj999 于 2015-5-21 18:20 编辑
Themida或WinLicense中解码表及DLL基址表的获取壳只会对导入表中来自kernel32.dll、user32.dll、advapi32.dll 三个dll中的函数作加密变形.外壳程序会把要执行的代码变在VirtualAlloc 分配的地址空间去执行,执行完了再VirtualFree。 壳初始化的时候会申请很多的临时内存空间,从这点可以肯定它会调用VirtualAlloc 函数,我们现在先对这个函数下断点:bp VirtualAlloc+19 ,下断在函数返回处。 Od载入程序,CTRL+G,输入:VirtualAlloc+19,F2下断,F9运行。eax得到的VirtualAlloc 分配的地址。ALT+M看一下
F9连续3次,ALT+M,连续分配的3块内存就是壳加载的kernel32.dll、user32.dll、advapi32.dll 我们用LordPE的“区域转存”功能dump下来看一下
用LordPE打开刚转存的文件
看到VirtualAlloc的偏移是0x8ef1 也就是说壳先加载了自己的3个dll文件,以后对VirtualAlloc的访问将使用壳自己加载的api函数。这就是0x8ef1偏移数据的来源。 下面就在壳的VirtualAlloc下硬件执行断点(取消原来的F2断点),F9,直到EAX返回一个PE的前一个断点,就是最佳返回时机。 其它两个内存分配区域转存的dump文件
【视频】下载地址:
|