http://dcrdx.com/

黑客信息网:CTF-REVERSE练习之逆向初探

逆向工程是指利用反汇编和调试等几种手段和工具,分析计算机程序的二进制可执行代码,得到程序算法的详细和实现原理的技术。 不仅如此,在信息安全的具体工作中,如恶意代码分析、软件漏洞挖掘、移动安全和软件破解等,反向技能起着重要的作用。

前面介绍了CTF的网络主题,今天从CTF中选择REVERSE题型进行说明。

介绍一下,REVERSE是CTF竞赛中常见的主题类型,主要考察参赛选手逆向工程的相关知识。 检查形式通过反向分析二进制程序( exe、dll或elf等),了解程序内部的实现机制,最终目的是获取密码,或创建注册码以计算与指定用户名对应的注册码

那么,如何将程序反向,完整的程序如何看它的代码呢?

当然其他人也考虑过这样的问题,所以出现了一些帮助反方向的工具。

1.PEiD是著名的shell检测工具,其功能非常强大,可以检测大多数shell和程序的编译信息。 PEiD支持各种外部插件,还支持用户自定义的shell签名信息。

2.Ollydbg简称OD,是一个具有图形用户界面的用户模式调试器,可以在各种主要Windows操作系统上运行。 Ollydbg具有动态调试和静态分析功能,非常易用,在异常跟踪过程中非常灵活。 此外,许多爱好者为此调试器创建了许多出色的插件,这些功能已成为Windows操作系统上用户模式下动态调试器的首选。 Ollydbg的反汇编引擎非常强大,它可以识别c和Windows中频繁使用的数千个函数,并自动对参数进行注释。 下面是操作系统常用的快捷键。

F2设置断点(如果断点已经存在,断点将被删除)。

运行到F4光标所在的行(运行到光标所在的行时自动断开) ) ) ) )。

F7单步跟踪(如果遇到呼叫,则进行跟踪) ) )。

F8单步跟踪(如果有一个呼叫,则执行整个呼叫( ) ) ) ) ) ) ) ) )。

继续执行F9 (运行程序直到进程结束或遇到下一个断点) )。

3.IDA是一种交互式反汇编工具,功能非常强大,支持多操作系统、多处理器下的二进制反汇编分析,能够与用户交互提高处理效率。 IDA支持插件并支持IDC脚本。 Hex-Rays Decompiler是一个非常强大的IDA插件,支持将反汇编代码直接转换为c语言伪代码,大大提高了反汇编分析人员的工作效率。 这是ida的快捷键,可以更高效地分析。

空间在图形视图和列表视图模式之间切换

F5将反汇编指令恢复为伪代码

显示x交叉参考

n执行变量名称或函数名称重命名操作

将d二进制数据解释为字节/2字/4字

c将二进制数据解释为代码

a将二进制数据解释为字符串

实验步骤

好吧。 开始实验吧。 首先进入实验页面。 这是对CTF-REVERSE练习的逆向探索。

主题说明:

主机C:\Reverse\1目录中有一个CrackMe1.exe程序,运行该程序时将提示您输入密码。 输入正确的密码后,将显示清除消息框。 请反向分析和调试CrackMe1.exe程序,找到正确的清除密码。

我们将在第一步开始外部行为分析。 我相信在任何情况下,当你刚接触到新事物时,你都会仔细观察事物的外部特征。 CTF的问题也是如此。 拿到问题后,运行程序,观察可以在程序的哪里输入数据,点击哪个按钮会有什么反应,操作中出现了什么提示等。

通过观察CrackMe1.exe程序,我们发现需要在程序中输入密码。 如果在不输入任何内容的情况下单击按钮,将显示类似于以下内容的消息:

输入一组测试数据时,提供以下信息:

这里有弹框和提示。 我们直接找这个提示不就行了吗? 但是,我们在逆向分析某个程序之前,除了程序的动态动作之外,还会调查程序是否被外壳化。 被外壳化为什么样的程序? 是什么编译器编译的? )也是非常重要的步骤。 因为前面提到了PEID,所以用PEID检查壳。 可以通过选择程序,右键单击,然后从右键单击菜单中选择" Scan with PEiD "选项来查看shell信息。 这是Microsoft Visual C 6.0,表示CrackMe1.exe没有shell,而是用VC6编译的。

我们改变操作系统进行动态调试

动态调试有助于了解程序内部执行逻辑的许多细节。 许多信息只在程序运行后显示。 这也不是静态分析容易得到的。 OD非常适合在Windows操作系统上使用动态调试器。

操作选择CrackMe1.exe程序,右键单击,然后从右键单击菜单中选择“在OllyICE中打开”,将显示OD调试器的主界面。 在反汇编命令列表窗口中右键单击,然后选择Ultra String Reference和Find ASCII菜单项,如图所示。

然后,显示字符串列表窗口。 此窗口列出当前进程内存空间中存在的各种字符串,并允许您确定是否存在感兴趣的字符串。 例如,如果显示“密码错误”消息,请按Ctrl F键,在弹出窗口中输入“密码错误”,然后单击“确定”按钮进行搜索。

上面还有一个密码是正确的,恭喜你合格。 这是钥匙吗? 让我们双击这个。

双击字符串行进入OD的反汇编窗口,可以看到代码指令中引用该字符串的地方。 如下图所示。

在这个代码片段中还可以看到jnz跳转指令。 此命令是否跳跃决定了是发出成功提示还是失败提示。 这样的跳跃就是所谓的关键跳跃。 键跳上方的代码往往是重要的密码判断逻辑,因此可以重点分析键跳上方的代码。 将下一个断点放在关键点跳的上方,下面的位置。 用鼠标单击选择此行的代码,然后按F2键。

00401456. 55 push ebp

按下断点,然后按F9运行程序。 自由输入test等密码后单击按钮,程序将自动在断点处断开。 然后按F8开始单步跟踪。 跟踪到00401490时,找到了输入的密码test和字符串HeeTianLab。 如图所示:

仔细分析上面的代码后,我们发现从这两个字符串中取出字符并逐一进行比较。 即使有一个文字不同,最终也会跳到提示失败的地方。 那么,可以推测HeeTianLab是正确的密码。 运行另一个CrackMe1进程,然后输入HeeTianLab以提示成功。

这样就通关了。 接下来用另一个神器IDA再做一次。 有动态神器。 一定还有一个静态神器。

除了动态调试,静态分析也是重要的技能。 静态分析有助于快速了解程序的代码执行逻辑。 特别是,使用IDA的Hex-Rays插件从汇编代码生成伪代码的功能大大提高了分析效率。

使用IDA打开CrackMe1.exe程序时,IDA会提示您选择文件类型、处理器类型等。 通常,不需要更改这些设置,直接单击“确定”按钮。 然后,IDA分析程序并等待一段时间。 分析结束后,下面的“输出窗口”中显示“theinitialautoanalysishasbeenfinished .”。 图:

通过从IDA菜单中选择" view " —— " opensubviews " —— " strings "菜单项,可以弹出字符串列表界面,如图所示。

IDA中的字符串列表界面没有在Ctrl F中快速搜索的功能,因此必须手动翻页才能找到感兴趣的字符串。 拖到某个地方时,显示了与提示相关的字符串:

双击“密码错误”字符串以确定定义该字符串的位置。 然后,用鼠标单击字符串的名称,然后按x键进行交叉引用搜索。 显示的对话框如下图所示。

我点击确定按钮来到引用这个字符串的地方,看到了反汇编指令的列表。 此时,可以分析这里的汇编器命令。 如果不想看汇编程序命令也没关系。 按F5键可以生成函数的伪代码。 将用伪代码输入的密码与HeeTianLab进行了比较:

很明显,HeeTianLab是我们想要的密码。

反向学习是一个需要深入了解计算机相关和编程知识系统的过程,是一种逐步的技能。 掌握逆向需要大量的编程语言储备、安全知识、对计算机原理的良好认识和常识。 这些只是反方向的基础!

标签:黑客信息网: CTF-REVERSE练习逆向探索

文章来源:http://www.dcrdx.com/

上一篇:安全行业“艳照门” :企业如何反思源码保护?

下一篇:黑客信息网:CTF挑战赛-合天网安实验室

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

相关文章阅读