【爆破的艺术】不直接修改跳转的爆破 2013.6.21
本帖最后由 PoJie_小雨 于 2014-9-14 21:23 编辑【文章标题】:【爆破的艺术】不直接修改跳转的爆破 2013.6.21【文章作者】: xiaoyu
【作者邮箱】:
【保护方式】: none
【使用工具】: PEiD,OllyDbg
【编程语言】:Borland Delphi 3.0
【作者声明】: 主要记录自己的学习过程!欢迎交流学习
【下载地址】: http://pan.baidu.com/share/link?shareid=1775582093&uk=892352529
今天我们讲几种爆破的方法给大家------->主要是给新手~
查壳之后无壳。
1.修改跳转
我们用OD载入 ,
BP GetDlgItemTextA
来到关键代码段。
这里的两个cmp 就是提取判断name 和serial 是否为空
之前已经分析了很多次了
--------------------------------------------------------------------------------
单步走来到:
004192D5 . /75 17 jnz short CrackMe.004192EE
将jnz 修改成jz即可。
2.有些软件是不能改跳转的,那该怎么办呢、?
我们可以发现:
004192D0 .E8 5FADFEFF call CrackMe.00404034
004192D5 .75 17 jnz short CrackMe.004192EE
这个关键跳上面有一个关键的CALL
我们进入CALL分析:
00404034/$53 push ebx
00404035|.56 push esi
00404036|.57 push edi
;保护现场
注意下面的那条CMP
他是可以改变ZF的
0040403B|.39D0 cmp eax,edx
将EDX 与EAX 对比相同则成功,否则将失败
因此 我们只需将edx改成eax
就可爆破成功
3.当然,既然是将edx与eax相比较的话
我们也可以找找之前有那些语句给它们赋值
004192CC .8B55 A8 mov edx,dword ptr ss: ;这条就是赋值给了EDX
004192CF .58 pop eax ;这条给EAX赋值
所以我们要找EAX的值是多少.
与POP对应的PUSH
所以我们要找PUSH EAX找最近的那个
特别注意的是要当中间代码段无其他入栈指令的时候
004192A6 .8B45 AC mov eax,dword ptr ss:
004192A9 .50 push eax
我们找到了
EAX的值其实就是dword ptr ss: 的值
因此我们可以将
004192CC .8B55 A8 mov edx,dword ptr ss:改成:
004192CC .8B55 A8 mov edx,dword ptr ss:
也能达到爆破的目的。
大家试试有兴趣的可以自行分析算法。
PS:大家不太感兴趣算法,我以后就不讲算法了,也比较抽象,对初学者不太容易上手
当然 还可以修改很多地方也能实现不修改跳转爆破,请读者自己思考。
这个够详细了吧 不懂的回帖问我就好了,乐意解答
24号就实习去了,,,,,,9月回来- -
伤不起~大家加油!
感谢大神分享! 其实有时候 虽然不能直接将JZ改为JMP
但是可以通过更改该行的二进制值的方法..{:301_998:}. 淡然出尘 发表于 2013-6-21 12:16 static/image/common/back.gif
其实有时候 虽然不能直接将JZ改为JMP
但是可以通过更改该行的二进制值的方法...
你说的是改ZF 么? 其实cmp不行还是可以mov的 膜拜大牛!!! 1354669803 发表于 2013-6-21 12:21 static/image/common/back.gif
其实cmp不行还是可以mov的
MOV 不好改了EAX的值 PoJie_小雨 发表于 2013-6-21 12:30 static/image/common/back.gif
MOV 不好改了EAX的值
好不好这怎么说呢 反正应用的好就好
1354669803 发表于 2013-6-21 12:34 static/image/common/back.gif
好不好这怎么说呢 反正应用的好就好
不是我是说不够完美,要是EAX 刚好是关键值下面的程序会出错 感谢分享!