1,老版本软件无壳,可直接上手
新版本加了PE壳,采用ESP定律F9四次即可到达OEP,无难度,不详述
2,观测软件:
1)底部label显示“未注册版本,机器码XXXX”的提示
2)存在注册按钮,重启验证
3)发送时验证是否注册,未注册弹框提示
3,思路:
1)字符串
2)dede按钮事件
2)API下断
4,爆破过程
1)OD载入,搜索字符串,发现“已注册版本”字样,双击跟随到汇编代码:
004CF493 |. 803D A02B4E00>cmp byte ptr [4E2BA0], 0 ; 比较全局变量的值
004CF49A |. 74 10 je short 004CF4AC ; 为0则跳走
004CF49C |. BA 14F54C00 mov edx, 004CF514 ; 已注册版本
根据先易后难的原则,初步猜测byte ptr [4E2BA0]为我们的突破口,在数据窗口中跟随到 4E2BA0 ,对该Byte下硬件访问断点以便调试,内存断点的话第二次就没了,不如硬件断点方便
2)F9运行,会断在访问 [4E2BA0] 代码的下一行,对其进行分析可知 :
004CF222 |. 83F8 18 cmp eax, 18 ; 注册码必须为24位
004CF225 0F9405 A02B4E>sete byte ptr [4E2BA0] ; 不是24位则失败,置全局变量为0
3)继续F9:
004CF243 |. E8 6058F3FF call 00404AA8 ; 检查序列号是否是否为本机序列号
004CF248 |. 0F95C0 setne al
004CF24B |. 2205 A02B4E00 and al, byte ptr [4E2BA0] ; 序列号不一致则弹出提示框
004CF251 E9 B2000000 jmp 004CF308 ; 爆破,修改为jmp强制跳转
4)继续F9:
004D3532 |. 8A12 mov dl, byte ptr [edx]
004D3534 |. 80F2 01 xor dl, 1 ; 停在此处
004D3537 |. 8B83 48040000 mov eax, dword ptr [ebx+448]
004D353D |. E8 7A5BF9FF call 004690BC
004D3542 |. A1 BCED4D00 mov eax, dword ptr [4DEDBC]
004D3547 |. 8038 00 cmp byte ptr [eax], 0 ; 全局变量比较
004D354A |. 74 0C je short 004D3558 ; 关键跳2
004D354C |. B8 D4364D00 mov eax, 004D36D4 ; ASCII "正在检查新版本..."
5)继续F9
004CE899 807D EF 00 cmp byte ptr [ebp-11], 0 ; 二次检测的标志位,不能为0
004CE89D 75 4D jnz short 004CE8EC
004CE89F |. A1 BCED4D00 mov eax, dword ptr [4DEDBC]
004CE8A4 |. C600 00 mov byte ptr [eax], 0
004CE8A7 |. 803D 842B4E00>cmp byte ptr [4E2B84], 0
004CE8AE |. 74 19 je short 004CE8C9 ; 跳过注册码错误
........
004CE8EC |> /A1 BCED4D00 mov eax, dword ptr [4DEDBC] ; 来自4ce89e
004CE8F1 |. 8038 00 cmp byte ptr [eax], 0 ; 比较全局变量
若需深入,004CE899为二次检测标志,可考虑对其下硬件访问断点,检测其变化过程。
6)继续F9,在更改二次检测标志后,底部label显示“已注册!”字样,开始测试功能:
点击发送,弹出注册码错误的提示框,来到004D6982 |. 83F8 18 cmp eax, 18 ; 进行二次检测
之后会检测发送内容是否为空,再检测QQ是否存在,有几个qq,如果不是一个qq的话,会弹出选择框。
7)待续。