一点脱壳经验
asprotect版本多,升级快,每一次小小的升级,都足以使以前的脱壳方法或工具失效,没有一种自动脱壳工具是万能的。这里是caspr的作者SAC/UG2000对asprotect的评价:
ASProtect是一个非常强大的win32保护工具。它拥有压缩(compression)、加密(encryption)、反跟踪代码(anti-debugging code)、反-反汇编代码(anti-disassembler code)、crc校验(crc checking),反脱壳(anti-dumping)等特点。它使用了 Blowfish,Twofish,TEA等强劲的加密算法,还用RSA1024 - 非常强劲的公钥加密算法 (very strong public keys cryptographic algorithm )- 作为注册密钥生成器(sregistration keys generation)。(注:公钥加密算法属于非对称密钥算法体制,与对称密钥体制相对。)它还通过API钩子(API hooks,包括importhooks(GPA hook)和export hooks)与加壳的程序进行通讯。
ASProtect v1.1甚至 用到了 Win95.Marburg's 多态变形引擎(polymorphic engine)。
ASProtect v1.11c 增加了 反Apihook代码(anti-Apihook code(stolen from Win32.Crypto)) 和BPE32 的多态变形引擎(BPE32's polymorphic engine.)。
现在的大问题是:ASProtect究竟是一个超级病毒还是一个商业软件?(Is it a super virus or a commercial protector?)
怎么样,是不是已经对asprotect望而生畏了?
因此我对asprotect的作者Alexey Solodovnikov(从名字看应该是个俄国人)非常钦佩。不过不用怕。
公欲善其事,必先利其器。
要脱asprotect加的壳,似我等菜鸟,只能使用工具。我的工具箱里有:
fi243,检测文件壳的类型
trw1.23,不用多说;
bw2k02,冲击波2000,用来找入口点EP;
SuperBPM,辅助设断工具,确保trw能够中断成功;
peditor,修正脱壳后的文件;
ImportREC1.2beta2,用来修复脱壳后文件的import表;
此外还有专用自动脱壳工具,如rad,caspr等。
实在不行,脱不下来或脱下来不能用,只有用内存补丁了。我推荐ppatcher3.93,比常见的3.60版增加了许多有用的新特性,如aitForWindowName,下面会讲到。URL未知,我是从作者那里直接获得的。
我的运行环境是win98第二版,没有安装softice。
概括一下一般的脱壳步骤:
第一步,用fi243确定壳的类型,有自动脱壳工具的,用工具脱。否则第二步。
第二步,用bw2k确定程序的真正入口点OEP,不妨记为xxxx;若找不到,请试一试Softice + icedump: 使用Icedump 的/tracex 命令可能找到OEP 的地址;若还找不到,只能手动跟踪,看你的功力和运气了。
第三步,用trw装入(load)程序,下bpx xxxx,g。中断后用pedump命令脱壳,格式是
pedump c:\test\test.exe。不能中断时运行superbpm,选中erase,重复第三步操作。若脱出来的test.exe可以运行,则脱壳完毕,否则第四步。
第四步, 用peditor 修正test.exe,用Import REConstructor v1.2 beta2修复输入表,参照以下这篇文章
若还是不行,建议你用内存补丁或放弃暴破,去算注册号吧。
以下以S-Spline 2.04为例,讲一讲手动脱壳和修复import表的具体操作步骤。S-Spline 2.04
第一步,用fi243确定壳的类型。fi243没有GUI界面,是命令行程序,用法是这样:
c:\fi243\fi s-spline.exe。
Fi已经检测不出新版asprotect了,所以如果遇到检测不出的类型,就有可能是asprotect。接着往下做吧。
第二步,用bw2k确定程序的真正入口点OEP,
运行bw2k,面板上的entry point显示为00000000。按track钮,再运行s-spline.exe,程序界面出来之后,bw2k的面板上entry point显示为7e910,这就是入口点了。退出s-spline,我们又迈出了可喜的第二步。
第三步,运行SuperBPM,选中erase(默认为不选中),确保trw能够中断。
第四步,运行trw2k,按browse找到并选中s-spline.exe,按loader装入。下bpx 47e910,g。trw弹出时输入pedump c:\test\test.exe,退出trw(不退也行),但不要退出s-spline。在c:\test下会找到test.exe。这个程序目前还不能运行,因为它的import表是被加密的。
第五步,用peditor修正test.exe。运行peditor,按browse找到test.exe,确定。再按sections,弹出一个窗口,显示每个section的信息。在窗口中点右键,在弹出菜单中选dumpfixer(RS=VS & RO=VO),提示'DONE',这时可以关闭peditor了。
第六步,运行ImportREC1.2beta2,在Attach to an Active Process下拉框中选中s-spline.exe,然后在左下方OEP中输入7e910(就是EP-image base=47e910-400000),按IAT AutoSearch。出现对话框Found Something!=》
“Found address which may be in the Original IAT.Try 'Get Import'”
按Get Import,再按Show Invalids 按钮,在Imported Function Found框中会有很多蓝色的项目。在其中点右键,选Trace Level1(Disasm),再按Show Invalids 按钮,可以看到所有的dll都为valid:YES字样。输入表到此完成。
第七步,修复已脱壳的程序test.exe。选择Add new section(缺省是选上的),按Fix Dump,并选择刚才Dump出来的文件test.exe。ImpRECT 会在该文件所在目录生成一个新的文件:test_.exe ,这就是修复后的文件。至此终于大功告成,点击test_.exe可以运行了。
在遇到asprotect之前,procdump一直是我最爱的脱壳工具,它能脱的壳很多,操作方便,稳定性好,很少令我失望。直到那一次,一连碰到三个asprotect加壳的软件:
Aspack2.11,加壳软件,asprotect 1.1b 加壳,未注册版有时间限制和功能限制;以前的下载地址找不到了,今天找到一个带破解文件的,URL:
49cK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2#2k6q4)9J5k6i4y4*7i4K6u0W2K9Y4y4A6L8X3k6G2i4K6u0W2L8X3g2@1i4K6u0r3M7r3g2J5i4K6u0r3j5h3q4J5L8$3&6Q4x3V1k6X3K9h3I4W2M7#2)9J5c8X3y4G2L8i4m8J5k6i4y4K6L8%4u0K6i4K6u0r3N6$3W2F1i4K6u0r3j5i4y4H3j5h3y4C8x3U0p5I4i4K6u0W2P5X3W2H3i4@1f1K6i4K6R3H3i4K6R3J5
Picturetoexe2.30,图片转可执行文件工具,asprotect 1.0 加壳,未注册版制作出得文件有公司标志;
ca0K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6i4N6F1M7$3!0X3N6q4)9J5k6h3y4G2L8g2)9J5c8X3q4H3M7R3`.`.
Advanced ZIP Password Recovery3.51(azpr),zip密码恢复工具,asprotect 1.1 加壳;未注册版只能破解5位以下密码。ftp://
f5aK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3&6W2N6$3S2#2j5g2)9J5k6h3y4G2L8g2)9J5c8X3q4*7M7s2u0Q4x3X3g2*7K9i4l9`.
有兴趣的不妨试一试,练练手。
那段时间好痛苦啊。找不到真正的入口点(OEP),中断不了,壳脱不下来,脱下来的又不能运行,真是往事不堪回首。到现在也还谈不上破解,只是想把自己的一点经验写出来,希望弟兄们看了能少走点弯路。
提示:
Aspack用上述方法脱壳修复后,运行时显示
Exception EaccessViolation in module ASPACK_.EXE at 007fb318.
Access violation at address bfc54c.Read of addreds bfc54c.
不能运行。失败。但是可以用rad06(
948K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2#2k6q4)9J5k6i4y4*7i4K6u0W2K9Y4y4A6L8X3k6G2i4K6u0W2L8X3g2@1i4K6u0r3M7r3g2J5i4K6u0r3j5h3q4J5L8$3&6Q4x3V1k6X3K9h3I4W2M7#2)9J5c8Y4g2F1M7r3q4U0K9$3g2J5M7#2)9J5c8Y4N6A6L8W2)9J5c8Y4u0S2k6q4)9#2k6Y4j5H3y4W2)9J5k6i4A6A6M7q4)9J5z5g2!0q4y4W2)9^5z5q4)9&6x3q4!0q4y4g2)9^5b7g2)9&6c8W2!0q4z5q4)9^5y4q4!0n7x3g2!0q4y4g2!0m8x3#2!0n7x3#2!0q4c8W2!0n7b7#2)9^5b7#2!0q4z5q4)9^5y4q4!0n7x3g2!0q4y4g2!0m8x3#2!0n7x3#2!0q4y4g2)9&6x3q4)9^5c8g2!0q4z5q4)9^5y4#2!0m8b7g2!0q4y4g2)9^5b7g2!0m8z5q4!0q4y4g2)9^5c8g2!0n7b7W2!0q4y4W2)9^5c8g2)9^5z5g2!0q4y4W2)9&6y4#2!0n7y4W2!0q4z5g2)9&6y4#2!0n7y4q4!0q4z5g2)9&6z5g2)9&6x3q4!0q4y4g2)9^5z5q4!0n7y4W2!0q4c8W2!0n7b7#2)9^5b7#2!0q4y4q4!0n7c8q4)9^5y4W2!0q4y4q4!0n7b7W2)9^5c8q4!0q4y4q4!0n7z5q4!0n7b7g2!0q4y4W2)9&6b7#2!0m8b7g2!0q4y4W2!0n7x3#2!0m8z5q4!0q4y4g2)9^5y4W2)9^5b7#2!0q4y4#2)9^5z5g2)9^5z5q4!0q4x3#2)9^5x3q4)9^5x3R3`.`.
Picturetoexe2.30用上述方法脱壳失败,impREC修复的程序运行时提示非法操作。用caspr v0.952脱壳成功。
Azpr用上述办法修复成功,文件可以运行,但对其进行修改后,提示找不到api函数,不能运行。无奈只能用内存补丁ppatcher3.93。这里有thewd提供的破解方法。
首先在注册表中添加如下内容
[HKEY_LOCAL_MACHINE\Software\Elcom\Advanced ZIP Password Recovery\Registration]
"Code"="00023112193920061941tcKxzxKUhzLjuAAD"
以下是ppatcher配置文件(.ppc)的内容。
-------------------------------------------------------------------
#Process Patcher Configuration File
Version=3.93
WaitForWindowName=AZPR*
PatchAuthor=thewd
PatchContactInformation=thewd@hotmail.com
DisplayName=Advanced ZIP Password Recovery v3.51
Filename=azpr.exe
Filesize=294912
Address=0x416CE7:0x89:0x8B // (1)
Address=0x416CE8:0xC8:0xC2
#End of Configuration File
#Cracking Notes
(1) Registration Code Example: 00023112193920061941tcKxzxKUhzLjuAAD
First 4 characters are ignored.
Next 16 characters are constant (MD5 Hash)
Last 16 characters are hashed (MD5) and compared against
the resource 'DB' for a match.
i.e.
mov eax, ecx (Bad Code) ==> mov eax, edx (Correct Code)
---------------------------------------------------------------------
[培训]科锐逆向工程师培训第53期2025年7月8日开班!