2023年12月24日发(作者:)

1 确定基地址,按查看

基地址003c0000

2 寻找OEP

有个个人的小技巧,就是.text 在3c1000,那么就每次都跳过一些函数段,直到运行到3c1***附近,如图:

每次到了一个新的函数里面,如果不再.text附近,直接找retn,F4运行到这里,就可以进入下一个函数。

按照这个方法,很快就到了3C1240,这里就是函数入口了,强制分析一下就可以看到代码

OEP: 003C1240

3 DUMP

上面找到的这里可以dump,但是对于DLL,重定位处理代码的位置很重要,所以还是需要找到重定位代码出,同时顺便跳过重定位代码,所以就先不dump了,重新启动程序。

这个代码的定位似乎没有什么技巧,感觉和壳有关,看雪上有人回复说这是靠经验,一般是匹配特征码的,所以我也不纠结这里了。

直接跟踪来到这里

本来是不跳的,可以双击z寄存器,让他跳

双击后(判断寄存器就变了)

重新来到OEP,这时候就可以DUMP了

用LoadPE,由于是DLL,不要使用这个不是磁盘上的默认值00400000H了。

,因为加载的基地址

选中相关进程,修复一下基地址,这个是习惯,因为挺多壳喜欢改这里

然后把 dump下来

4 IAT修复

自己手工找一下IAT的地址,建议学会手工,因为其实也不难,ImportRec经常搞不定这个,在OEP入口一下任何地方找类似一下的语句

看到 0x3C702C了吧,然后在里面输入

然后在数据窗口就可以看到这些函数来,上下翻动,就可以知道RVA和SIZE啦

在ImportRec里面

003C7000 77EFEF1C tExtentPoint32A

003C70E0 7C809C98 yteToWideChar

重定位表在.reloc区块里面做好两件事

记住这里不要选。

然后修复输入表就行了。

5 重定位表

这是最麻烦的地方,很难讲清楚通用规则,我个人感觉和壳有关,但是还是直接找到重定位的处理代码,然后按照《加密与解密》的方法打补丁

Pushad

Mov edx,dword ptr[XX]

Sub ebx,YY

Mov dword ptr [edx],ebx

Add edx,4

Mov dword ptr[XX],edx

Popad

Or al,al

Jmp short ZZZZZ

XX:填写申请的内存空间的地址

YY:填写DLL载入的基地址

ZZZZZ:

这里不详细,看不多《加密与解密》可以参考本文档的截图,本文档不具备所有细节。