轻度解读一下。
1. 这个软件虽然是用VMProtect保护,但作者似乎不会用VMProtect,没有用到VM、甚至IAT加密,只是一个压缩壳,降低了难度。
在OEP设个硬件断点,就可以进行分析了(软件是用Delphi写的)。
[Asm] 纯文本查看 复制代码 00D2E11C 55 PUSH EBP ; <-OEP found by MistHill
00D2E11D 8BEC MOV EBP, ESP
00D2E11F 33C9 XOR ECX, ECX
00D2E121 51 PUSH ECX
00D2E122 51 PUSH ECX
00D2E123 51 PUSH ECX
00D2E124 51 PUSH ECX
00D2E125 51 PUSH ECX
00D2E126 51 PUSH ECX
00D2E127 51 PUSH ECX
00D2E128 51 PUSH ECX
00D2E129 53 PUSH EBX
00D2E12A 56 PUSH ESI
00D2E12B 57 PUSH EDI
00D2E12C B8 ECB7D200 MOV EAX, 00D2B7EC
00D2E131 E8 AAAF6DFF CALL 004090E0
...
2. 软件本身功能很简单,可能因为是“试用版”的原因。
3. 软件官网的域名很有意思:吾爱破解(www.5ipojie.com),想来应该不会让人失望。
果然,在进一步分析、调试软件后发现,尽管软件自身保护很弱,软件也没啥用处,但作者在软件注册上花了不少心思,使用了大量密码学的知识。
机器码和激活码
两者都是Base36的编码。
机器码的生成:取当前机器的HwProfile(硬件相关),按一定规则变换,再Base36编码。
把机器码发给作者后,他走逆过程:Base36解码、变换、得到用户的HwProfile。
激活码的生成:由用户的HwProfile,按另一套规则变换,经Base36编码后,发送给用户。
机器码和激活码在程序中都要被验证,所以可以找出它们各自的“变换”规则。这些“变换”虽有点烧脑,但有点耐心和经验,也不难。
注意:对于特定机器,HwProfile是唯一的。由于加入了随机因子,机器码和激活码每次都会不一样!
".OFC"文件和注册表项
这两个东西用来保存“试用信息”和“注册信息”。".OFC"文件名是一个随机GUID。
其实,搞定机器码和激活码后,没必要再研究它们。不过,其中的“技术含量”更高!
1) ".OFC"文件解密
- zlib 解压缩
- CRC32 校验
- Base64 解码
- Blowfish 解密
结果为一个字符串,"="后面的内容是一个Base64编码的字符串,和注册表项完全一致!
2) 注册表项解密
为一个Base64编码的字符串,头、尾各4字符用于混淆,抛弃不用。
- Base64 解码
- Blowfish 解密
- MD5 校验
- 拆分字段
比如解密后的内容为字符串:
[Plain Text] 纯文本查看 复制代码 208DE53778B54D048CFE661BA34374E5BP-64JN8-SEQK7-72UP7-FE5CU-L916B-8U11O-HRKEG-U8J6VRR-RRRRR-RRRRR-RRRRR-RRRRR-RRRRR-RRRRR-RRRRR-RRRRR00152018-10-292018-11-065C943AB9E179BC07E0FDA429429C7C10
各字段
[Plain Text] 纯文本查看 复制代码 a) 208DE53778B54D048CFE661BA34374E5 ; 一个随机GUID
b) BP-64JN8-SEQK7-72UP7-FE5CU-L916B-8U11O-HRKEG-U8J6V ; 机器码
c) RR-RRRRR-RRRRR-RRRRR-RRRRR-RRRRR-RRRRR-RRRRR-RRRRR ; 激活码(未输入激活码时)
d) 0015 ; 试用次数
e) 2018-10-29 ; 软件安装日期
f) 2018-11-06 ; 软件运行日期
g) 5C943AB9E179BC07E0FDA429429C7C10 ; 前各字段MD5校验值
每次软件运行后,".OFC"文件和注册表项的内容都会变化。
根据“安装日期”和当前日期可计算出现在的试用天数,4天后需要注册。
本来“试用次数”有限定,为0x50次,但他的条件判断有bug,好象未起作用。
显然,在删除".OFC"文件和注册表项后,又可以再试用4天!
更具体的情节不便“剧透”太多,否则就不好玩了。 |