OD调试6—使未注册版软件的功能得以实现
继续开始我OD调试教程的学习笔记。
本次试验对真正的程序进行逆向。(之前的都是为破解而专门设计的小程序)
这次试图对一个“太监版”的程序进行完整化,也就是把限制的功能恢复,把阉割的功能添加等等。用到的知识也是之前提到的,但是会有不同的地方。
试验软件:PixtopianBook.exe(一个通讯录软件)
打开原始程序运行,观察界面:
这是一个通讯录软件,老外写的,很显然,当前是未注册版,试验后发现有功能限制,限制是只能有三个分组,每组不能超过4个人。也就是说,你用未注册版,联系人只能有12个人啊有木有!!太坑爹了!
有一位伟人说过,当你在死去的时候,如果你的坟前没有200个人为你哀悼,那么你的人生就失败了。所以,为了我们的人生更加的辉煌灿烂,就一定要把这个通讯录给破解掉,多联系几个人来给自己上香啊有木有!
废话不多说,上OD开始干活。
一 异常处理
打开PixtopianBook.exe后F9直接运行,发现有异常提醒,用shift+F9忽略异常。或者如下图进行设置:
在调试选项里添加异常范围,因为是32位操作系统,所以00000000-FFFFFFFF就是整个内存段了。此时再打开程序,就没有异常出现了。
二 突破【限制人数】功能
在OD运行弹出的软件界面试图添加第5个人,出现错误提示box,如下图:
不建议大家看到有messagebox就直接去搜索API,通过API和字符串入手,观察上下,尝试爆破。因为现在的程序设计的聪明了,使用间接地调用:先调用一个自己的进程,在进程里再调用messagebox来混淆视听,避免破解。
正确方法:此时在od中按下暂停(暂停后od中的地址跳至动态链接库,即系统领空处),然后按ALT+F9返回到用户,在用户界面点击确定后,od中就返回到程序接管,地址跳转到下图的位置:
图中的MessageBoxA就应该是刚才的错误提示框了,F8到retn,返回到函数(函数调用之后碰到ret返回),如下图:
(相应修改在图中已标识)
注意:ret返回后,在上方又有一个call,说明在此处是间接地调用messagebox。
修改后保存。载入后已经可以突破人数添加的限制了。
二 突破【分组限制】功能
道理和突破人数限制一样,修改后如下图,可以添加无限制的分组了:
三 标题修改
接下来将几处”unregistered version”字符查找并修改
方法1:查找所有参考文本字串—查找文本”unregistered version”—跟随到代码处,找到在内存中的地址—在数据窗口中修改保存。
方法2:直接点击memory—ctrl+B查找—修改后记住字符在内存中的地址,到cpu的数据窗口保存。【建议用这种方法】
注意:修改时记得【保持大小】,不然会出错。
修改之后的图片如下:
到此完成了试验,主要的两个功能模块(人数添加和分组添加)得到了实现。
四 关于SEH
SEH(Structured Exception Handling),即结构化异常处理。
SEH是Windows操作系统提供的功能,跟开发工具无关。
Windows程序设计中最重要的理念就是消息传递,事件驱动。当GUI应用程序触发一个消息时,系统将把该消息放入消息队列,然后去查找并调用窗体的消息处理函数(CALLBACK),传递的参数当然就是这个消息。
我们同样可以把异常也当作是一种消息,应用程序发生异常时就触发了该消息并告知系统。系统接收后同样会找它的“回调函数”,也就是我们的异常处理例程。
当然,如果我们在程序中没有做异常处理的话,系统也不会置之不理,它将弹出我们常见的应用程序错误框,然后结束该程序。所以,当我们改变思维方式,以CALLBACK 的思想来看待 SEH,SEH 将不再神秘。