- UID
- 2198
注册时间2005-6-29
阅读权限255
最后登录1970-1-1
副坛主
该用户从未签到
|
黄河Flash播放器 V7.62 简单分析
这个软件破解不难,明码比较。该程序的验证思路比较典型,本文只谈针对脱壳版本的爆破方式,软件请自行下载。
先给出该程序的两处关键点:
---------------------------------------------------
注册时验证:
004BBB9D |. E8 1ADFFFFF CALL 004B9ABC ; 算法CALL
004BBBA2 |. 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-C] ; 真码
004BBBA5 |. 58 POP EAX ; 假码
004BBBA6 |. E8 3D91F4FF CALL 00404CE8
004BBBAB |. 75 34 JNZ SHORT 004BBBE1
---------------------------------------------------
启动时验证:
其中[EBP-24]存放真码,[EBP-20]存放假码
004C30A3 8B55 DC MOV EDX,DWORD PTR SS:[EBP-24] // 真码给EDX
004C30A6 58 POP EAX // 假码POP到EAX
004C30A7 |. E8 3C1CF4FF CALL 00404CE8 // 字符串比较函数
004C30AC |. 75 1A JNZ SHORT 004C30C8
004C30AE |. C605 38994C00>MOV BYTE PTR DS:[4C9938],1
004C30B5 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
004C30B8 |. 8B40 FC MOV EAX,DWORD PTR DS:[EAX-4]
004C30BB |. 8B80 38030000 MOV EAX,DWORD PTR DS:[EAX+338]
004C30C1 |. 33D2 XOR EDX,EDX
004C30C3 |. E8 78E7F8FF CALL 00451840
004C30C8 |> 33C0 XOR EAX,EAX
-----------------------------------------------
0分 -- 修改注册跳转:
004BBBAB |. 75 34 JNZ SHORT 004BBBE1
-----------------------------------------------
以下为可以成功爆破的几种修改方式,我根据修改方法来给出相应的参考分数。
1分 -- 启动验证修改跳转法:
004C30AC 75 ==> 74
2分 -- 启动验证修改跳转距离法
004C30AD 1A ==> 00
3分 -- 修改比较寄存器法:
004C30A3 8B55 DC MOV EDX,DWORD PTR SS:[EBP-24]
004C30A6 |. 58 POP EAX
修改为:
004C30A3 58 POP EAX ; 00ACABE8
004C30A4 8BD0 MOV EDX,EAX
004C30A6 90 NOP
4分 -- 修改比较数据法:
004C30A5 DC ==> E0
004C30A3 8B55 DC MOV EDX,DWORD PTR SS:[EBP-24]
修改为:
004C30A3 8B55 E0 MOV EDX,DWORD PTR SS:[EBP-20]
5分 -- 堆栈数据利用法:
004C30A4 55 ==> 14
004C30A5 DC ==> 24
004C30A3 8B55 DC MOV EDX,DWORD PTR SS:[EBP-24]
修改为:
004C30A3 8B1424 MOV EDX,DWORD PTR SS:[ESP]
----------------------------------------------
6分 -- 明码比较软件自动保存真码法:
004BBBAC 34 ==> 00
004BBBC7 E8 ==> F4
004BBBC5 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
修改为:
004BBBC5 |8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C] // 保存真码
7分 -- 等价替换验证函数:关键数据利用法
第一处:
004C3464 . E8 ABFAFFFF CALL 004C2F14 // 启动验证函数
修改为:
004C3464 E8 43FCFFFF CALL 004C30AC
第二处:
004C30AC /75 1A JNZ SHORT 004C30C8
004C30AE |C605 38994C00 01 MOV BYTE PTR DS:[4C9938],1
004C30B5 |8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
004C30B8 |8B40 FC MOV EAX,DWORD PTR DS:[EAX-4]
004C30BB |8B80 38030000 MOV EAX,DWORD PTR DS:[EAX+338]
004C30C1 |33D2 XOR EDX,EDX
004C30C3 |E8 78E7F8FF CALL 00451840
004C30C8 \33C0 XOR EAX,EAX
修改为:
004C30AC C605 38994C00 01 MOV BYTE PTR DS:[4C9938],1
004C30B3 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4] // 修改空间不足 借用JNZ那行代码空间
004C30B7 90 NOP
004C30B8 |. 8B40 FC MOV EAX,DWORD PTR DS:[EAX-4]
004C30BB |. 8B80 38030000 MOV EAX,DWORD PTR DS:[EAX+338]
004C30C1 |. 33D2 XOR EDX,EDX
004C30C3 |. E8 78E7F8FF CALL 00451840
004C30C8 C3 RETN
004C30C9 90 NOP
8分 -- 等价替换启动验证函数:全局变量赋值法
修改为:
004C2F14 /$ C605 38994C00 01 MOV BYTE PTR DS:[4C9938],1
004C2F1B |. 8B4424 04 MOV EAX,DWORD PTR SS:[ESP+4]
004C2F1F |. 8B40 FC MOV EAX,DWORD PTR DS:[EAX-4]
004C2F22 8B80 38030000 MOV EAX,DWORD PTR DS:[EAX+338]
004C2F28 B2 00 MOV DL,0
004C2F2A 8850 3E MOV BYTE PTR DS:[EAX+3E],DL
004C2F2D C3 RETN
004C2F2E 90 NOP
004C2F2F 90 NOP
9分:将真码赋值到假码内存写ASM汇编代码实现
10分:将 strcmp 函数修改为 strcpy
...
其他的破解方式,比如SMC、Loader、注入等等,也要建立在对其验证流程的分析基础之上,有了分析结果,写代码就是手工活,所以我们这里暂不讨论。
该程序的破解方法应该还有,欢迎大家补充。这8种修改方法是本轮教学中为拓宽学员破解思路和修改方式的一个总结归纳,借此文来告诉初学者,学习软件破解要重过程,轻结果。不要为了破解而破解,不要为了发布破解而破解。
|
评分
-
查看全部评分
|