零、前言
本系列为二进制破解科普系列教程。教程面向新手爱好者,欢迎大家探讨、建议,大牛轻喷。
壹、准备工作
1.Patch
patch也就是我们平时所说的补丁。
所谓给程序打补丁就是我们对程序破解所进行的修改,就是说像我们衣服破了,如果没有打补丁,就会走光的意思。
OllyDBG的“p”可以查看所有打过的补丁。
贰、破解
继上节课我们的爆破程序第二节的时候,我们知道程序的爆破,在这里,我们接着上节课的脚本来简单做一个逆向算法的课程。有些实现跳转处与未实现跳转处的修改,我就不做一一的详细解答,看下面的图片就行
第一处修改:
同样把Z为0
第二处:
第三处修改:把S=1改为S=0
其实下面已经是算法的判定:
004010AE . 85C0 test eax,eax
004010B0 75 02 jnz short reverseM.004010B4
004010B2 . EB 43 jmp short reverseM.004010F7
004010B4 > 33DB xor ebx,ebx
004010B6 . 33F6 xor esi,esi
004010B8 . 833D 73214000>cmp dword ptr ds:[0x402173],0x10
004010BF 7C 36 jl short reverseM.004010F7
004010C1 > 8A83 1A214000 mov al,byte ptr ds:[ebx+0x40211A]
004010C7 . 3C 00 cmp al,0x0
004010C9 . 74 08 je short reverseM.004010D3
004010CB . 3C 47 cmp al,0x47
004010CD . 75 01 jnz short reverseM.004010D0
004010CF . 46 inc esi
004010D0 > 43 inc ebx
004010D1 .^ EB EE jmp short reverseM.004010C1
004010D3 > 83FE 08 cmp esi,0x8
004010D6 7C 1F jl short reverseM.004010F7
004010D8 . E9 28010000 jmp reverseM.00401205
首先分析上面的代码:
ds:402173的值是否等于10.查看402173
可以看到是ReadFile 的参数,可以查找readfile的参数值,找出对应的参数函数意思。(LPDWORD address of numbeer of bytes read)
如果ds:[0x402173],0X10 小于16的short 004010F7就进行调转,跳密钥不合法处。
当程序走到ebx+0x40211A ,ebx是指偏离使用的,这里的ebx的值等于0。
这里的话,他mov 到al ,对相应的值进行比较。
当cmp esi 0x8 >8 的话,程序正常,当cmp esi 0x8 <8的话,说明跳转还是失败。
也会生成一个密钥文件,叫做Keyfile.dat
cmp al,0x47 47是16进制assic码的G
然后对应的密钥就破解成功,如下图所示:
程序下载链接:http://pan.baidu.com/s/1qXzqmxm 密码:8tck
本文作者:whitecell-club.org Wens0n
文章欢迎转载,转载请保留作者与出处
本文始发于微信公众号(WhiteCellClub):二进制破解科普系列第三课
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论