X86逆向9:通过关键常量逆向

本章将讲解一下关于关键全局变量的一些内容,关键的全局变量对于软件的破解非常的有用,找到了关键全局变量并改写它同样可以完成完美爆破一个程序,这里我将使用CM小例子来讲解搜索关键变量的一些技巧,最后我们来实战破解一个程序练练手,从本节课开始我们将进入实战环节,不再仅仅局限于CM小程序的破解啦。

------------------------------------------------------------
本章难度:★★★☆☆☆☆☆☆☆
课程课件:CM_09.zip
------------------------------------------------------------

 

在实战之前我们先来看一个简单的CM小程序,来讲解一下关于常量破解的原理性的东西,如下我编写了一个小程序,当我们点击验证和1做比较时,程序会通过CMP指令让变量中的数值和1做一次比较,然后通过比较判断是否弹出一个窗体,默认是不弹窗的,第二个正好相反,现在我们的目的就是通过修改程序中的所有常量来达到破解的目的,让两个按钮都弹出窗口。

1.直接OD载入程序,并运行起来,然后点击两个按钮,会发现都没有反映。

 

2.然后按下【ctrl + B】,搜索按钮特征码【FF 55 FC 5F 5E】,点击确定,然后在【00416EBD】这个位置下一个【F2】断点。

 

3.回到程序点击【验证和1做比较】,然后程序会断在【00416EBD】这个位置,我们直接【F7】进入这个按钮事件中去。

 

4.该按钮的按钮事件内容如下,CALL就是一个关键CALL,关键的比较是CMP命令,可以看到它取【4A25F0】变量的内容来进行比较。

 

5.我们可以直接在数据窗口跟随一下这个变量的地址,来看一下比较是否会成立,这里cmp命令会拿【0】和【1】相减,影响下面的关键跳转,【jnz】不为0则跳转,显然这条命令是需要执行的,它正好跳过了我们的弹窗。

 

6.如上图,我们当然可以通过修改CMP指令后面的1将其改为0来完成破解,但是在这之前我们需要确定一下还有没有其他的位置调用了这个常量来进行验证,此时我们直接在反汇编窗口,右键选择【查找】,【所有常量】。

 

7.记下【4A25F0】常量地址,然后直接查找

 

8.然后会看到如下图,会看到所有的调用了【4A25F0】这个常量地址的命令,我们直接在CMP命令上下断,MOV是赋值这里我们不需要管。

 

9.然后我们回到CM程序中,点击第一个按钮,会断在下图的位置,说明它开始做比较了,为了让它跳转成立,我们改写成和0做比较。

 

10.运行程序,程序正常弹窗了,修改第二个的方法相同,当点击第二个按钮时会断下,将其改为1即可实现爆破程序,这里不做演示了,改完直接保存文件就好了。