首页
社区
课程
招聘
[分享]注册程序破解全过程演练
发表于: 2014-9-13 12:20 6744

[分享]注册程序破解全过程演练

2014-9-13 12:20
6744
注册程序破解全过程演练-------------非常简单的破解,大牛门不要喷哟!!

一、背景
注册程序是使用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日开班!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
楼主自己写的吧!编译的时候勾选个/MX选项,要不然我们打不开
2014-9-13 15:59
0
雪    币: 50
活跃值: (44)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
程序文件和破解请下载"vmpBP_.zip",注:已经采用静态链接把程序用的库打包至PE。
谢谢提醒!
2014-9-13 16:36
0
雪    币: 43
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
8错!!!!!!
2014-10-9 18:52
0
雪    币: 7
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
模块入口点这个方式头一次见哈,顶一下
2014-10-20 12:56
0
游客
登录 | 注册 方可回帖
返回