逆向工程(3):实例破解

Loading

文中软件及原视频下载地址:http://pan.baidu.com/s/1slh4nbn 密码:u3ab

目标:破解软件功能限制
工具:OD

安装好这款软件打开如图

1

这款软件有诸多功能限制,如

图片1

当我们选择Add Group,提示没有注册只能创建3个Group

图片2

选择Add,提示没有注册只能添加4个联系人

图片3
图片4

我们打开About PixtopianBook,弹出未注册版本信息

我们将其载入OD(建议下载一个原版OD#www.ollydbg.de#,我们尝试手动配置忽略异常)如图

图片5

点击运行后,并没有出现程序界面,而是抛出了异常

图片6

我们手动开启忽略异常

图片7

打开后选择 exception

图片8

勾选如上,再点击Add lase exception

图片9

配置完成后点击OK

图片10

配置完成后重新载入程序,点击运行,成功打开了程序

图片11

下面我们正式开始破解这款软件!

1.Group

将软件载入OD,点击Add Group

图片12

我们在其弹出消息框后暂停OD

此时状态栏显示:暂停,我们此时需要返回到程序领空,快捷键Alt+F9

图片13
然后点击消息框 确定 此时状态栏显示:返回到用户
图片14

我们成功返回到程序领空,向上翻

图片15

看到了一个MessageBox,这就是我们刚才确定的那个消息框

向下我们将

图片22

这个命令将带我们返回到调用CALL处。所以我们继续向下执行。

图片16

进行retn

图片17

我们跳出了call,返回到了调用处
我们看到
1.这个Call就是我们刚才进入的Call,加入我们能跳过这个call,就能避免跳出消息框。
2.查看这个ascii码,正是消息框的标题和内容,在这里被压入栈,等待调用。
3.这里有一个cmp,比较eax与3大小(即Group是否等于3),如果小于就跳转到(JL)00408B34,如果已经有3个Group了,就执行call弹出未注册消息框

图片18

你一定已经知道我们将要干什么了!

图片19

将JL(小于则跳转)改为jmp(强制跳转)
这样我们就成功跳过了GROUP验证
我们将其保存

图片20

测试一下

图片21

哈哈,已经可以自由添加Group了!!是不是很有成就感啊!学习逆向成就感很重要哦!

2.联系人

图片23

默认未注册用户只能添加四个联系人,我们采取同样方法

1.弹出消息框后暂停
2.Alt+F9执行到用户代码
3.点击确定

图片24

跳转到这个位置,我们向上翻,看到同样的MessageBox,如下

图片25

通过retn跳出call,回到调用处,向上翻

图片26

1.这个call调用了MessageBox,弹出了消息框
2.这句话同我们看到的一样,确定程序在这里将其压入栈
3.比较eax与4的大小(联系人是否已经有4个),如果小于等于(JL)4个,那就跳过消息框,否则弹出未注册消息框

我们同样修改jl为jmp,强制其跳转

图片27
图片28

保存后测试一下

图片29

我们又成功搞定了一个功能!这个阉割版已经成了注册版,不过还有一些美中不足的地方。

比如

图片30
图片31

那我们就开始让它从里到外都是注册版!

3.更改版本信息

图片32

标题,版本文字在代码区是找不到的,我们直接在内存中找图片68
图片33

输入查找关键字UNREGISTERED

图片34

如果ASCII没有搜索到就用UNICODE
(这里ASCII也可以搜索到,不过不是版本信息,UNICODE下搜索到版本信息,点击确定)

图片35

记录下004D4830,在dump面板跳转

图片36

跳转之后成功找到需要修改的内容

图片37

我们选择要修改的内容,右键编辑

图片38

编辑为自己想写的字符,如下

图片39

4.DIY标题

图片40

同样是在内存中查找,在弹出的搜索框里输入关键字:(UNREGISTERED VER
(一般情况下是不知道要搜索的文字是ascii还是unicode,我们会都尝试搜索一次。

图片41

图片42

记下004E4BE6,在dump窗口跟随

图片43

找到需要修改的字符然后编辑

图片44

确定后如下图所示

图片45

5.更改提示注册文字

图片46

同理,我们在内存中搜索

图片47

首先尝试UNICODE,没有搜索到结果

再尝试ASCII搜索

图片48

成功搜到了字符串

图片49

记录下位置48F974,并跳转到该处

图片50

用同样的方法编辑ASCII码

图片51

编辑完成后如下

图片52

在所有工作做完之后,不要忘记保存

图片53
图片54

保存后我们查看效果

图片55

图片56

6.结尾
我们仍发现了一些美中不足的地方。
在进入程序时,首先是欢迎信息

图片57

几秒后变为

图片58

我们想让它更加简洁,一直显示welcome信息,该怎么操作呢?

那我们开始进行最后一步!!
通过上面的操作我们已经知道了注册文字在48F974处,在dump(数据窗口)窗口右键跳转到48F974

图片59

我们需要知道程序哪一段调用了这段字符串
我们右键选择查找参考(Ctrl+R)(个人觉得做汉化翻译得有点问题,这个命令的英文是Find references,意思应该是查找引用,参考这个词不太合适)

图片60

找到一处引用,我们双击进入

图片61

我们来到如图所示的代码位置

图片62

发现上面有一处cmp和jnz(cmp与jnz组合代表:如果不相等,则跳转),如果ebp等于907,则将这串字符压入栈(可以猜测,907代表未注册),我们根据跳转向上翻

图片63

向上翻到这里

图片64

又有一处cmp和jnz,意思是如果ebp不等于906,就要跳转回0040C22F处。
(我们可以猜测,906代表注册过)
这个程序我们已经完全弄清楚了,我们直接在0040C235的jnz处进行强制跳转,让其不会将这串字符压入栈

图片65

修改后,我们最后一次保存

图片66

打开

图片67

整款软件已经被我们完全破解了!!

虽然这是一款2001年的软件,但这是我们破解的第一款真正的软件!所以今晚好好庆祝一下吧,我们在下一篇教程里再见!!

Share your thoughts

This site uses Akismet to reduce spam. Learn how your comment data is processed.