这个软件比较简单···
一、基础信息
页面:
看起来只有一个键 ,从表面上来看需要输入一串序列号,点击下按钮后,得到 3E74984B 后就算破解··
发现多次点击按钮后这软件左边的蜘蛛还会动·····
看起来怕是这程序很难搞的样子··
查壳:
emmmmmm.....脱壳机会比较少。。。不认识这个壳',不过并不影响我们脱掉它。
OD载入后步过了 push 前戏后直接用上esp定律打发,程序没有跑起来,F8走起来后,直接跳到OEP处,右键用吾爱OD脱壳,
再查壳:
成功脱壳。。
事件查看:
不知道事件各自用处前,有三个事件需要关注一下 , (反编译工具 DarkDe 4)
二、暴力破解
断下三个事件后,发现就一个button有用,
[Asm] 纯文本查看 复制代码 0044A353 |. 8B83 CC020000 mov eax,dword ptr ds:[ebx+0x2CC]
0044A359 |. E8 DEA0FDFF call 111.0042443C
0044A35E |. 8D55 F4 lea edx,[local.3]
0044A361 |. 8B83 CC020000 mov eax,dword ptr ds:[ebx+0x2CC]
0044A367 |. E8 A0A0FDFF call 111.0042440C
0044A36C |. 8B45 F4 mov eax,[local.3] ; kernel32.7C839AD8
0044A36F |. 50 push eax
0044A370 |. 8D55 F0 lea edx,[local.4]
0044A373 |. 8B83 F0020000 mov eax,dword ptr ds:[ebx+0x2F0]
0044A379 |. E8 8EA0FDFF call 111.0042440C
0044A37E |. 8B55 F0 mov edx,[local.4]
0044A381 |. 58 pop eax ; kernel32.7C817077
0044A382 |. E8 6198FBFF call 111.00403BE8 ; 重要call
0044A387 |. 75 0F jnz short 111.0044A398 ; 关键跳转
0044A389 |. B2 01 mov dl,0x1
0044A38B |. 8B83 FC020000 mov eax,dword ptr ds:[ebx+0x2FC]
0044A391 |. E8 669FFDFF call 111.004242FC
0044A396 |. EB 11 jmp short 111.0044A3A9
0044A398 |> 8B83 D4020000 mov eax,dword ptr ds:[ebx+0x2D4]
0044A39E |. 8B50 34 mov edx,dword ptr ds:[eax+0x34]
0044A3A1 |. 83EA 0A sub edx,0xA
修改关键跳转的标志位,运行程序。。。完成暴力破解····
三、深入探究注册机
简单过了一遍BUTTON事件后,机智摆脱作者的小计谋··· 0044A382的关键call,和我的目的连一毛钱关系都没有
上一秒还在为我的小机智点赞,下一秒自己挖坑跳进去了······
[Asm] 纯文本查看 复制代码 0044A346 |. B8 06000000 mov eax,0x6
0044A34B |. E8 78D6FBFF call 111.004079C8 ; 有关键点
0044A350 |. 8B55 F8 mov edx,[local.2] ; 这里已经算出值了
0044A353 |. 8B83 CC020000 mov eax,dword ptr ds:[ebx+0x2CC]
0044A359 |. E8 DEA0FDFF call 111.0042443C
0044A35E |. 8D55 F4 lea edx,[local.3]
0044A361 |. 8B83 CC020000 mov eax,dword ptr ds:[ebx+0x2CC]
0044A367 |. E8 A0A0FDFF call 111.0042440C
0044A36C |. 8B45 F4 mov eax,[local.3] ; 3E74984B
0044A36F |. 50 push eax
0044A370 |. 8D55 F0 lea edx,[local.4]
0044A373 |. 8B83 F0020000 mov eax,dword ptr ds:[ebx+0x2F0]
0044A379 |. E8 8EA0FDFF call 111.0042440C
0044A37E |. 8B55 F0 mov edx,[local.4]
0044A381 |. 58 pop eax ; kernel32.7C817077
0044A382 |. E8 6198FBFF call 111.00403BE8 ; 重要call,只是对比两个值用
0044A387 |. 75 0F jnz short 111.0044A398 ; 关键跳转
0044A350 中已经运算出了值了,好死不死0044A34B里还有一段计算代码····果断以为这是在计算我输入的序列号···挖了半天没发现啥····
直到自己重新跑了一遍···
[Asm] 纯文本查看 复制代码 0044A2E8 /. 55 push ebp ; Button1Click
0044A2E9 |. 8BEC mov ebp,esp
0044A2EB |. 33C9 xor ecx,ecx
0044A2ED |. 51 push ecx
0044A2EE |. 51 push ecx
0044A2EF |. 51 push ecx
0044A2F0 |. 51 push ecx
0044A2F1 |. 53 push ebx
0044A2F2 |. 56 push esi
0044A2F3 |. 8BD8 mov ebx,eax
0044A2F5 |. 33C0 xor eax,eax
0044A2F7 |. 55 push ebp
0044A2F8 |. 68 E4A34400 push 111.0044A3E4
0044A2FD |. 64:FF30 push dword ptr fs:[eax]
0044A300 |. 64:8920 mov dword ptr fs:[eax],esp
0044A303 |. 8D55 FC lea edx,[local.1]
0044A306 |. 8B83 C8020000 mov eax,dword ptr ds:[ebx+0x2C8]
0044A30C |. E8 FBA0FDFF call 111.0042440C
0044A311 |. 8B45 FC mov eax,[local.1] ; local.1 是输入的Serial
0044A314 |. E8 EFD6FBFF call 111.00407A08 ; 判断输入的是否是一个有效的长整型
0044A319 |. 8BF0 mov esi,eax ; eax是输入的字符的16进制
0044A31B |. 8B45 FC mov eax,[local.1]
0044A31E |. E8 5DD7FBFF call 111.00407A80
0044A323 |. 52 push edx ; ntdll.KiFastSystemCallRet
0044A324 |. 50 push eax ; eax是输入的字符的16进制
0044A325 |. 8BC6 mov eax,esi
0044A327 |. 99 cdq
0044A328 |. 030424 add eax,dword ptr ss:[esp] ; 加了一次自己..什么骚操作??
0044A32B |. 135424 04 adc edx,dword ptr ss:[esp+0x4]
0044A32F |. 83C4 08 add esp,0x8
0044A332 |. 52 push edx ; ntdll.KiFastSystemCallRet
0044A333 |. 50 push eax
0044A334 |. 8BC6 mov eax,esi
0044A336 |. 99 cdq
0044A337 |. 030424 add eax,dword ptr ss:[esp] ; 又加了下自己又是什么骚操作··
0044A33A |. 135424 04 adc edx,dword ptr ss:[esp+0x4]
0044A33E |. 83C4 08 add esp,0x8
0044A341 |. 52 push edx ; ntdll.KiFastSystemCallRet
0044A342 |. 50 push eax ; 这个eax有点眼熟啊···
0044A343 |. 8D55 F8 lea edx,[local.2]
0044A346 |. B8 06000000 mov eax,0x6
0044A34B |. E8 78D6FBFF call 111.004079C8 ; 有关键点
0044A350 |. 8B55 F8 mov edx,[local.2] ; 这里已经算出值了
0044A353 |. 8B83 CC020000 mov eax,dword ptr ds:[ebx+0x2CC]
0044A359 |. E8 DEA0FDFF call 111.0042443C
0044A35E |. 8D55 F4 lea edx,[local.3]
0044A361 |. 8B83 CC020000 mov eax,dword ptr ds:[ebx+0x2CC]
0044A367 |. E8 A0A0FDFF call 111.0042440C
0044A36C |. 8B45 F4 mov eax,[local.3] ; 3E74984B
0044A36F |. 50 push eax
0044A370 |. 8D55 F0 lea edx,[local.4]
0044A373 |. 8B83 F0020000 mov eax,dword ptr ds:[ebx+0x2F0]
0044A379 |. E8 8EA0FDFF call 111.0042440C
0044A37E |. 8B55 F0 mov edx,[local.4]
0044A381 |. 58 pop eax ; kernel32.7C817077
关键代码0044A324开始下边几行···
程序把我输入的序列号转换成16进制后两次加了自己后拿这个结果和3E74984B直接比较
泥垢:
3E74984B--》 10进制/3 ---》序列号··
送分题?????
(注册机就不写了····)
如有错误,请大佬指出,不胜感激!
|