小
无壳的实例
目标:去除软件功能限制
工具: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处进行强制跳转,让其不会将这串字符压入栈:
修改后,我们最后一次保存:
打开:
整款软件已经没有限制。。。。。