危险漫步博客
新鲜的“黑客思维”就是从全新的角度看待黑客技术,从更高的层面去思考;专注于黑客精神及技术交流分享的独立博客。
文章2289 浏览18790239

破解从零起步

运行OD,点“开始”一一“打开”来加载我们的CrackMe,然后再点击菜单栏的“插件”一“UltraString Reference‘一“1.Find ASCII”,接着OD就会弹出字符串窗口。A:诶?怎么没有“串错误.破解败字符串呢?B:应该是在Unicode里边吧!危险漫步:那我们就看看到底是不是在Unicode里边!

我们继续点击菜单栏的“插件”一“Ultra String Reference"一“1.Find Unicode”,B:为什么还是没有呢?危险漫步:朋友们不要急,这种情况是经常会发生的,程序员们在设计程序的时候,为了防止他们设计的程序被破解,就刻意地把一些字符串做了加密,每当这个字符串要被使用到的时候,在程序运行阶段随时调用解密函数对它进行解密。B:危险漫步,那我们要怎么办呢?rejector:道高一尺,魔高一丈,虽然字符串被加密了,那我们还有更高级的方法来对付他们!

现在就进入我们今天的主题。

动态调试技术在软件逆向工程领域是一个很热门的概念,它是与静态分析技术相对而言的。静态分析技术是指破解者利用反汇编工具将二进制的可执行文件翻译成汇编代码,通过对代码的-r来破解软件;而动态调试则是指破解者利用调试器跟踪软件的运行,寻求破解的途径。

好的,我们回到刚开始,用OD加载我们的CrackMe,接下来,注意喽,我们按F9让程序在OD中运行起来,我们可以看到,OD左上角的状态已经变成“运行”了,我们刚才试过,当我们输入一个错误的User和Serial时程序会弹出一个对话框来提示我们“串错误,破解失败”,其实这个时候,程序是调用了一个API函数来弹出一个窗口,完成这个过程的,那么它到底会用到哪些API函数呢?

在这里我们列举一下可能用到的API函数

MessageBox    显示一信息对话框

MessageBoxEx    显示一信息对话框

MessageBoxlndirect  显示一定制信息对话框

其实在我们的系统内部,每个跟字符的处理有关的API函数都有A和W两个版本的,像MessageBox函数一样,真正被调用到的函数其实是MessageBoxA或者MessageBoxW。A:那他们有什么区别昵?rejector:A版的API函数使用多字节字符,W版API使用宽字节字符,宽字节字符和多字节字符的区别就在于宽字节字符所占用的字节数目是一样的,它不管是中文字符还是英文字符都使用两个字节来储存,而多字节字符占用的字节数目不同,它使用两个字节来储存一个中文字符,使用一个字节来储存一个英文字符,这就是为什么我们上节课在查找字符串时有两个选项的原因了。

B:那知道了这些我们要怎么来利用它们呢?rej ector:我们可以看到OD的左下方有command的输入框,这是OD的命令插件,我们在这里输入命令“BP MessageBoxA”命令后按回车。A:老师,那这个命令是什么意思呢?rej ector:这个命令呢,它会在MessageBoxA函数的人口点处设下一个断点,当程序运行到断点处的时候,就会被中断,OD就会停在这里,我们就可以来具体分析调用这个函数位置处的代码了。

下好断点以后,继续翻开我们的CrackMe,随便输入User和Serial后,再按“OK”,我们会看到OD的状态又变成了暂停。

我们看0D右下角的堆栈窗口,可以看到OD的确是被中断在了MessageBox_A函数的入口点处。

我们接着来看看OD的标题栏,OD正处于User32模块,这是系统领空,我们需要让它返回程序自己的领空后才可以继续进行调试,我们按Alt+F9就可以让OD返回到用户代码了,这时,我们看见那个“串错误,破解失败”对话框又弹出了。

我们点确定后OD再次被中断。但这次的模块已经是程序自己的模块了。

我们看到004010D3的地方调用了MessageBoxA函数,刚才讲过,这个函数是用来弹出一个对话框的,那根据我们上节课所学习的内容,在这句上边应该会有一个关键跳转,也就是我们常说的暴点。我们来看看这里的完整代码:

B:老师,004010C9,004010BB,004010AB都调用了00401110处的同一个函数,这个函数是什么呀?危险漫步:我们可以看到这三句的上一句都是一句push,压入的是我们不认识的一些字符所以我们大胆的猜测他就是给字符串解密的函数!A:哦,那在往上看的话,发现004010A9处是一句je,那这里是不是我们的关键跳转呢?危险漫步:是不是关键跳转,我们试试就知道了,按照以前学的,我们双击它,把这一句改为jne。

然后点击右键“复制到可执行文件” -- “所有修改”,在弹出的对话中再点击右键“保存文件”,就可以把我们修改过的程序保存下来,我们运行破解后的程序看看,随便输入User和Serial后点击“OK”,它就已经提示我们“破解成功了”。

相关推荐