-
-
[分享]注册程序破解全过程演练
-
发表于:
2014-9-13 12:20
6745
-
注册程序破解全过程演练-------------非常简单的破解,大牛门不要喷哟!!
一、背景
注册程序是使用vc6.0做的一个简单mfc窗口应用程序,文件菜单中的abc按钮为注册功能入口

点击菜单ABC后会弹出对话框

这个对话框是我们的破解目标,功能很简单,输入正确的注册码可会弹出提示ok的MessageBox,否则弹出err的MessageBox
二、开始破解
1、模块入口点,几种方式可以取得模块入口
1)通过查找主程序模块中的名称来获取,一般模块入口在查找结果的最后一条

2)另一种是当OD加载程序第一次暂停的位置来计算,我用的方法是通过"指令提示窗口"和"堆栈窗口的栈顶值"来计算
这是OD加载后第一暂停的位置

这是指令提示窗口显示的内容
这是堆栈窗口内容

大家注意红框中的内容,后面窗口中的004031AE-1AE=403100即为模块入口地址
还有一种办法得到模块入口点,即OD加载程序后第一次暂停的位置,如果状态栏中提示"模块入口点",则OD中当前指令的位置就是模块入口地址。
注意,这里所讲的模块入口点确认方法前提条件是程序未做反调试处理。
2、确认注册提示窗口MessageBoxA返回地址
1)首先在OD命令窗口中输入bp MessageBoxA

2)之后在OD中F9运行程序
3)在程序注册窗口中输入密码,之后点击确认按钮

OD停止在77D507EA处MessageBoxA第一条指令处,我们在函数退出点77D50830处设置断点,并点击F9运行程序
运行到77D50830时的堆栈内容如图

这里我们不用关注栈顶,直接看蓝框中的内容,并右键"反汇编窗口中跟随"(也可以直接先中这一行之后回车),这样我们在反汇编窗口会跳转到00401AF5位置处,这里是程序调用完MessageBoxA后的返回地址,也就是调用完MessageBox后程序接下来要执行的内容,那么,我们看一下此处附近的代码,

在00401AF5上面我们可以看到MessageBoxA,再向上可以看到两个赋值指令mov dword ptr[ebp-8],0041631C和mov dword ptr[ebp-8],00416330,可以明确,两个直接寻址赋值处的值是两个字符串“err”和“ok”,到这里是不是有些头绪了?我们看地址00401ABE位的跳转指令je short 00401AD1

OD中显示的红线可以看出,je指令条件为真时会跳转到401AD1即err的赋值指令位置,这不是我们想要的逻辑,所以这里我们把je用空指令填充(选中1ABE这一行点击空格,之后弹出窗口中输入nop,点击汇编),这里我们看到在原有的1ABE位置出现了两个nop指令,这是因为原来的je指令占用两个字节,而nop指令是90他占用一个字节,所以要用两个nop来完成对je指令的替换

来接下来我们运行程序看看程序运行结果会发生怎样的变化,好现在程序已经注册成功了

到这里,我们实现了输入任意的注册码即可完成注册。
接下来,我们把在内存中所做的修改保存到磁盘上,在反汇编窗口右键选择"复制到可执行文件",之后在弹出的窗口中选择复制全部,OD此后会弹出新的文件窗口,在窗口中右键"保存文件"即可将内存中的修改保存到磁盘了。
程序文件和破解
vmpBP_.zip,注:已经采用静态链接把程序用的库打包至PE。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!