chuiyan121 发表于 2022-1-25 22:23

The024. 初探脱壳,ACProtect壳[寻找丢失的Stolen Code]


The024. 初探脱壳,ACProtect壳[寻找丢失的Stolen Code]
关于脱壳的记录,已有大牛教科书式帖文了,我就按照自己的习惯记录下来,如有疑问欢迎交流指正。^_^

1、PEiD查壳,UltraProtect 1.x -> RISCO Software Inc.(UltraProtect这个名称是ACProtect的前身)
https://s4.ax1x.com/2022/01/25/7baLad.png

2、OD载入,设置异常选项卡如下图。
https://s4.ax1x.com/2022/01/25/7ba7rD.png

最后一次异常法,2次跑飞,重载后Shift+F9一次,SE句柄处数据窗口跟随,下内存访问断点。
https://s4.ax1x.com/2022/01/25/7baHqe.png

Shift+F9运行,F2断点,再Shift+F9运行,再F2,再Shift+F9运行到如下地址,删除内存访问断点和两个F2断点。
F4运行到retn处,Alt+M打开内存映射窗口,在00401000处下F2断点,Shift+F9运行。
https://s4.ax1x.com/2022/01/25/7baqVH.png

程序会直接跳转到假OEP,根据各编程语言的入口特征,此程序为Delphi语言编写,但入口代码并不完整,代码被偷窃。
https://s4.ax1x.com/2022/01/25/7baTKO.png

重载程序到上述retn处,下断点D 12FFC0,数据窗口下硬件访问断点。
https://s4.ax1x.com/2022/01/25/7baOIA.png

Shift+F9运行,到达被偷窃的代码处。(至于为什么这么操作,我也不明白,以后弄清楚了再来补充)。
将偷窃的代码二进制复制下来:55 8B EC 6A FF。
https://s4.ax1x.com/2022/01/25/7bajPI.png

Alt+M在00401000处F2,Shift+F9即可运行到假的OEP,向上翻几行,粘贴复制的二进制代码(复制的二进制代码为5个字节,这里选择了8C C3 49 2E 79五个字节)。提醒:上翻代码时可能出现乱码,Ctrl+A分析一下代码即可。
https://s4.ax1x.com/2022/01/25/7bavGt.png

粘贴完二进制代码后,设置新的EIP。此时就可以正常脱壳了。
https://s4.ax1x.com/2022/01/25/7baxRP.png

3、LordPE修正镜像大小,完整转存,ImportREC修复。查询无壳,程序无法运行(未知软件异常)。
https://s4.ax1x.com/2022/01/25/7bdpM8.png

将脱壳的dumped_载入OD,会发现此程序的入口点为000431F4。
https://s4.ax1x.com/2022/01/25/7bazxf.png

而原程序的入口点为000AC000,使用LordPE修改脱壳程序的入口点为000AC000,保存。
https://s4.ax1x.com/2022/01/25/7bdCqg.png

入口点是修改过来了,发现程序还是不能运行。
https://s4.ax1x.com/2022/01/25/7bdiZQ.png

OD载入dumped_.exe程序,虽然程序入口到了004AC000处,但代码并没有跳转到真正的OEP,修改代码内容如下:
004AC000 >    55            push ebp
004AC001      8BEC          mov ebp,esp
004AC003      6A FF         push -0x1
004AC005    - E9 EA71F9FF   jmp dumped_.004431F4
此方法是做一个模拟入口代码,然后让程序跳转到真正的OEP入口004431F4处。
修改好了复制到可执行文件,然后右键保存文件为aaa.exe。
https://s4.ax1x.com/2022/01/25/7bd9sS.png

aaa.exe查询无壳,程序正常运行。
https://s4.ax1x.com/2022/01/25/7bdFaj.png



13729181580 发表于 2022-1-25 23:37

感谢分享
页: [1]
查看完整版本: The024. 初探脱壳,ACProtect壳[寻找丢失的Stolen Code]