逆向工程(3):实例破解
文中软件及原视频下载地址:http://pan.baidu.com/s/1slh4nbn 密码:u3ab 目标:破解软件功能限制 工具:OD 安装好这款软件打开如图
这款软件有诸多功能限制,如
当我们选择Add Group,提示没有注册只能创建3个Group
选择Add,提示没有注册只能添加4个联系人
我们打开About PixtopianBook,弹出未注册版本信息 我们将其载入OD(建议下载一个原版OD#www.ollydbg.de#,我们尝试手动配置忽略异常)如图
点击运行后,并没有出现程序界面,而是抛出了异常
我们手动开启忽略异常
打开后选择 exception
勾选如上,再点击Add lase exception
配置完成后点击OK
配置完成后重新载入程序,点击运行,成功打开了程序
下面我们正式开始破解这款软件!
1.Group
将软件载入OD,点击Add Group
我们在其弹出消息框后暂停OD 此时状态栏显示:暂停,我们此时需要返回到程序领空,快捷键Alt+F9
然后点击消息框 确定 此时状态栏显示:返回到用户
我们成功返回到程序领空,向上翻
看到了一个MessageBox,这就是我们刚才确定的那个消息框 向下我们将
这个命令将带我们返回到调用CALL处。所以我们继续向下执行。
进行retn
我们跳出了call,返回到了调用处 我们看到 1.这个Call就是我们刚才进入的Call,加入我们能跳过这个call,就能避免跳出消息框。 2.查看这个ascii码,正是消息框的标题和内容,在这里被压入栈,等待调用。 3.这里有一个cmp,比较eax与3大小(即Group是否等于3),如果小于就跳转到(JL)00408B34,如果已经有3个Group了,就执行call弹出未注册消息框
你一定已经知道我们将要干什么了!
将JL(小于则跳转)改为jmp(强制跳转) 这样我们就成功跳过了GROUP验证 我们将其保存
测试一下
哈哈,已经可以自由添加Group了!!是不是很有成就感啊!学习逆向成就感很重要哦!
2.联系人
默认未注册用户只能添加四个联系人,我们采取同样方法 1.弹出消息框后暂停 2.Alt+F9执行到用户代码 3.点击确定
跳转到这个位置,我们向上翻,看到同样的MessageBox,如下
通过retn跳出call,回到调用处,向上翻
1.这个call调用了MessageBox,弹出了消息框 2.这句话同我们看到的一样,确定程序在这里将其压入栈 3.比较eax与4的大小(联系人是否已经有4个),如果小于等于(JL)4个,那就跳过消息框,否则弹出未注册消息框 我们同样修改jl为jmp,强制其跳转
保存后测试一下
我们又成功搞定了一个功能!这个阉割版已经成了注册版,不过还有一些美中不足的地方。 比如
那我们就开始让它从里到外都是注册版!
3.更改版本信息
标题,版本文字在代码区是找不到的,我们直接在内存中找
输入查找关键字UNREGISTERED
如果ASCII没有搜索到就用UNICODE (这里ASCII也可以搜索到,不过不是版本信息,UNICODE下搜索到版本信息,点击确定)
记录下004D4830,在dump面板跳转
跳转之后成功找到需要修改的内容
我们选择要修改的内容,右键编辑
编辑为自己想写的字符,如下
4.DIY标题
同样是在内存中查找,在弹出的搜索框里输入关键字:(UNREGISTERED VER (一般情况下是不知道要搜索的文字是ascii还是unicode,我们会都尝试搜索一次。
记下004E4BE6,在dump窗口跟随
找到需要修改的字符然后编辑
确定后如下图所示
5.更改提示注册文字
同理,我们在内存中搜索
首先尝试UNICODE,没有搜索到结果 再尝试ASCII搜索
成功搜到了字符串
记录下位置48F974,并跳转到该处
用同样的方法编辑ASCII码
编辑完成后如下
在所有工作做完之后,不要忘记保存
保存后我们查看效果
6.结尾 我们仍发现了一些美中不足的地方。 在进入程序时,首先是欢迎信息
几秒后变为
我们想让它更加简洁,一直显示welcome信息,该怎么操作呢? 那我们开始进行最后一步!! 通过上面的操作我们已经知道了注册文字在48F974处,在dump(数据窗口)窗口右键跳转到48F974
我们需要知道程序哪一段调用了这段字符串 我们右键选择查找参考(Ctrl+R)(个人觉得做汉化翻译得有点问题,这个命令的英文是Find references,意思应该是查找引用,参考这个词不太合适)
找到一处引用,我们双击进入
我们来到如图所示的代码位置
发现上面有一处cmp和jnz(cmp与jnz组合代表:如果不相等,则跳转),如果ebp等于907,则将这串字符压入栈(可以猜测,907代表未注册),我们根据跳转向上翻
向上翻到这里
又有一处cmp和jnz,意思是如果ebp不等于906,就要跳转回0040C22F处。 (我们可以猜测,906代表注册过) 这个程序我们已经完全弄清楚了,我们直接在0040C235的jnz处进行强制跳转,让其不会将这串字符压入栈
修改后,我们最后一次保存
打开
整款软件已经被我们完全破解了!! 虽然这是一款2001年的软件,但这是我们破解的第一款真正的软件!所以今晚好好庆祝一下吧,我们在下一篇教程里再见!!