首页
社区
课程
招聘
[原创]Crackme练习-Afkayas详细分析
发表于: 2021-1-13 13:00 3889

[原创]Crackme练习-Afkayas详细分析

2021-1-13 13:00
3889

    该文章主要是分析了Crackme练习题当中第二道题Afkayas的解题做法,采用了暂停法,爆破,分析算法过程中主要是写出了分析过程中的想法。有什么想法出错的话或者是有更好的想法,希望各位大佬点评。谢谢。

    操作系统:Microsoft Windows XP

    使用软件:OllyDBG

    测试软件:如附件

    首先,我们先打开软件初步了解一下功能,尝试点击两下测试一下,发现随意输入"Name","Serial"。弹出一个报错框,那么我们大胆的猜测,如果输入正确的"Name","Serial"是否就是弹出正确的提示框了呢?

    刚刚我们了解到,假设我们输入正确的"Name","Serial"弹出正确的提示框,错误的"Name","Serial"弹出错误的弹框。那么我们站在程序员的角度思考,我们该如何做到这个呢?我们知道在编程语言当中有一种分支语言的概念。例如if。那么我们知道了。想要完成这样一个功能,可以使用分支语句,既然是分支那么一定是有一个判断点来决定它是“正确”还是“错误”。既然是这样,我们尝试将这个“判断点”无论如何都是“正确”。那么这个软件不就破解了嘛?下面我们来整理一下思路。我需要破解该软件,可以找到“跳转点”使其无论如何指向“正确”,即跳转点的调用函数。(判断点是决定判断的方向,跳转点是依据判断点的结果决定调用的函数)

    我们使用OllDBG(注释:文章下面使用缩写OD来表示OllDBG软件)软件打开AfKayAs,运行程序,这个时候,我们发现软件运行,并且在软件运行框当中输入账号密码。这里我们举例使用账号:aaron,密码:123123。来测试。这个时候我们发现弹出错误框。

    接下来,我们在OD当中暂停软件,并且在“调用堆栈”的窗口当中查看调用的弹窗函数。选中弹框函数右击跳转到函数代码位置。

注释:这里为何做出如下操作,请各位思考一下,刚刚程序是暂停在何处?很明显是暂停在弹出错误提示的窗口当中。那么,我们就知道该弹框函数必然是已经调用。我们在堆栈当中自然能发现。

    在跳转到函数位置的时候,我们适当的向上翻看,发现错误弹框的代码,那么我们知道了我们已经在“判断点”的位置附近了。如下图

    在往上看,紧接着我们发现一条je指令。从OD提示的跳转路径我们知道这个je指令就是我们需要找到的“跳转点”。

    既然,我们已经找到“跳转点”我们可以使其失效。通常的办法可以使用nop指令替代jmp指令。详细如下:

    刚刚我们使用了爆破法来处理这个软件。接下来,我们来分析一下它的算法。首先我们重新加载一下软件。我们由刚刚找到的“判断点”位置继续向上进行分析。

    上文的分析,我们知道je 指令是跳转点,我们继续向上,看看它是对应的判断点是在哪里(即跳转点依旧判断点的值来决定跳转方向)。我们发现附近有一个test指令。详细如下代码:我们知道这个指令值依据si寄存器来判断,那么我们的目标变化为向上追踪发现到底哪条指令影响了该si寄存器。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-1-13 15:55 被天象独行编辑 ,原因:
上传的附件:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//