CTF-REVERSE练习之逆向初探

这篇具有很好参考价值的文章主要介绍了CTF-REVERSE练习之逆向初探。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

逆向是指通过反汇编和调试等一些手段及工具,分析计算机程序的二进制可执行代码,从而获得程序的算法细节和实现原理的技术。不仅如此,逆向技能在信息安全面向的具体工作,如恶意代码分析、软件漏洞挖掘、移动安全以及对软件的破解方面发挥着巨大的作用。

前面介绍过CTF的web真题,那今天我们从CTF中选择一个REVERSE题型来讲解。

先介绍一下,REVERSE是CTF竞赛中的一种常见题目类型,主要考察参赛选手逆向工程相关的知识,考查形式为通过对一个二进制程序(exe、dll或者是elf等)进行逆向分析,了解程序内部的实现机制,最终目的可能是得到一个密码,或者是编写一个注册机用于计算指定用户名对应的注册码等。

那我们要怎么才能对一个程序进行逆向,一个完整的程序怎么看到它的代码呢?

当然别人也想到过这种问题,所以就出现了几种帮助逆向的工具。

1.PEiD是一款著名的查壳工具,其功能十分强大,几乎可以侦测出绝大部分的壳以及程序编译信息。PEiD支持各种外部插件,同时支持用户自定义的加壳程序签名信息。

2.Ollydbg简称OD,是一款具有图形用户界面的用户模式调试器,可以运行于各种主流Windows操作系统下。Ollydbg具有动态调试和静态分析功能,非常容易上手,对异常的跟踪处理相当灵活,并且许多爱好者为这款调试器编写了许多非常棒的插件,这些特性使得其成为Windows操作系统上用户模式下动态调试器的首选。Ollydbg的反汇编引擎十分强大,可以识别数千个被C和Windows频繁使用的函数,并可以自动对参数进行注释。底下是OD一些常用的快捷键。

F2 设置一个断点(如果断点已经存在,那么断点将被删除)

F4 运行到光标所在行(运行到光标所在行时自动断下)

F7 单步跟踪(如果遇到一个call,则跟踪进入)

F8 单步跟踪(如果遇到一个call,则执行完整个call)

F9 继续执行(运行程序,直到进程退出或遇到下一个断点)

3.IDA是一款交互式反汇编工具,其功能十分强大,支持多操作系统、多处理器下的二进制程序的反汇编分析,并且可以和使用者进行交互来提升处理效率。IDA支持插件,支持IDC脚本,Hex-
Rays
Decompiler是IDA一个十分强大的插件,支持将反汇编代码直接转换为C语言伪代码,极大的提高了反汇编分析人员的工作效率。这底下是ida的快捷键可以帮助我们更加高效的进行分析。

空格 在图形模式和列表视图模式之间切换反汇编视图

F5 将反汇编指令还原为伪代码

x 查看交叉引用

n 对变量名或者函数名进行重命名操作

d 将二进制数据解释为字节/双字/四字

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

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

实验步骤

好我们来开始实验,先进入实验网页:[CTF-
REVERSE练习之逆向初探](https://www.hetianlab.com/expc.do?ec=ECID172.19.104.182014111410002900001&pk_campaign=freebuf-
wemedia)。

题目描述:

主机C:\Reverse\1目录下有一个CrackMe1.exe程序,运行这个程序的时候会提示输入一个密码,当输入正确的密码时,会弹出过关提示消息框,请对CrackMe1.exe程序进行逆向分析和调试,找到正确的过关密码。

我们开始第一步进行外部行为分析不管在什么场景下,相信你在刚接触一个新事物的时候,都会仔细观察事物的外部特征,CTF做题也是一样的,在拿到题目之后可以运行程序,观察程序都有哪些地方可以输入数据,哪些按钮点击了会有什么样的反应,在操作过程中出现了哪些提示等。

我们通过对CrackMe1.exe程序的观察,知道程序需要输入一个密码,当不输入任何数据就点击按钮时,提示如下信息:

ctf reverse,大数据,人工智能,安全

当输入一串测试数据时,提示如下信息:

ctf reverse,大数据,人工智能,安全

这里有弹框还有提示,我们是不是直接去查找这个提示就可以了呢。但是我们在对一个程序进行逆向分析之前,除了程序的动态行为之外,查看程序是否加壳(被何种程序加壳?是什么编译器编译的?)也是一个非常关键的步骤。之前提到了PEID,我们就用PEID来查壳我们选中程序后单击右键,在右键菜单中选择“Scan
with PEiD”选项,就可以查看加壳信息了。我们这里看到的是Microsoft Visual C++
6.0,说明CrackMe1.exe没有加壳,且它是使用VC6编译的。

ctf reverse,大数据,人工智能,安全

我们换OD来进行动态调试,

动态调试可以帮助我们了解程序内部执行逻辑的许多详细信息,很多信息只有在程序运行起来之后才会看到,这也是静态分析所无法简单获取到的。OD是我们在Windows操作系统下动态调试器的首选。

操作选择CrackMe1.exe程序后单击右键,在右键菜单中选择“用OllyICE”打开,就会进行OD调试器的主界面,我们在反汇编指令列表窗口中单击右键,依次选择“Ultra
String Reference”、“Find ASCII”菜单项,如图所示:

ctf reverse,大数据,人工智能,安全

之后会弹出字符串列表窗口,这个窗口列出了当前进程内存空间中存在的各种字符串,我们可以查看是否存在有我们感兴趣的字符串。比如前面曾经提示“密码错误”的提示,那么我们就可以按下Ctrl+F,在弹出的窗口中输入“密码错误”,然后单击确定按钮查找:

ctf reverse,大数据,人工智能,安全

上面还有一个密码正确,恭喜过关,这是不是关键呢?我们试一试双击这个看看。

双击找到字符串的那一行,来到OD的反汇编窗口,就能看到代码指令中引用这个字符串的地方了。如下图所示:

ctf reverse,大数据,人工智能,安全

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

00401456. 55 push ebp

下好断点之后,按下F9运行程序,随便输入一个密码(比如test)后单击按钮,程序就自动在我们的断点断下了,接下来按F8开始进行单步跟踪,当跟踪到00401490的时候,我们发现了我们输入的密码test,同时发现字符串HeeTianLab,如图所示:

ctf reverse,大数据,人工智能,安全

仔细分析上面的代码,发现是在从这两个字符串里面取出字符一个一个进行对比,只要有一个字符不一样,最终都会跳转到提示失败的地方去。那么可以猜测HeeTianLab就是正确的密码了,我们运行另一个CrackMe1进程,输入HeeTianLab,弹出成功提示:

ctf reverse,大数据,人工智能,安全

这就通关了,接下来我用另外一个神器IDA再来做一遍,有动态的神器,肯定还有一个静态的神器。

除了动态调试之外,静态分析也是一种很重要的技能。静态分析可以帮助我们快速了解程序的代码执行逻辑,尤其是使用IDA的Hex-
Rays插件将汇编代码生成伪代码的功能,可以极大地提高我们的分析效率。

使用IDA打开CrackMe1.exe程序,IDA会提示选择文件类型、处理器类型等,通常我们不需要修改这些设置,直接单击“OK”按钮即可。之后IDA会对程序进行分析,等待一段时间,待分析结束之后,在下方的“Output
Window”中会提示“The initial autoanalysis has been finished.”,如图:

ctf reverse,大数据,人工智能,安全

在IDA的菜单中选择“View”——“Open subviews”——“Strings”菜单项,就可以弹出字符串列表界面了,如图所示:

ctf reverse,大数据,人工智能,安全

IDA的字符串列表界面没有提供Ctrl+F快捷进行查找的功能,所以我们需要手工翻页来查找我们感兴趣的字符串,拖到某一个地方的时候我们看到了提示相关的字符串:

ctf reverse,大数据,人工智能,安全

双击“密码错误”这个字符串,来定定义该字符串的地方,然后鼠标点击字符串的名字,然后按下x键,进行交叉引用查找,弹出的对话框如下图所示:

ctf reverse,大数据,人工智能,安全

单击OK按钮来到引用这个字符串的地方,我们看到了一堆反汇编指令列表,这时候就可以对这里的汇编指令进行分析了,如果不想看汇编指令也不要紧,按下F5键就可以生成函数的伪代码了,我们看到伪代码中将输入的密码和HeeTianLab进行了比较:

ctf reverse,大数据,人工智能,安全

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

逆向的学习是一个需要对计算机相关及编程知识系统有较深了解的过程,它是一个不断渐进的阶段性技能。想学好逆向,你必须具备众多的编程语言储备、安全相关知识、对计算机原理有良好的认识和常识。而这些只是逆向的基础!

HeeTianLab就是我们想要的密码。

逆向的学习是一个需要对计算机相关及编程知识系统有较深了解的过程,它是一个不断渐进的阶段性技能。想学好逆向,你必须具备众多的编程语言储备、安全相关知识、对计算机原理有良好的认识和常识。而这些只是逆向的基础!

网络安全工程师企业级学习路线

这时候你当然需要一份系统性的学习路线

如图片过大被平台压缩导致看不清的话,可以在文末下载(无偿的),大家也可以一起学习交流一下。

ctf reverse,大数据,人工智能,安全

一些我收集的网络安全自学入门书籍

ctf reverse,大数据,人工智能,安全

一些我白嫖到的不错的视频教程:

ctf reverse,大数据,人工智能,安全

上述资料【扫下方二维码】就可以领取了,无偿分享
ctf reverse,大数据,人工智能,安全文章来源地址https://www.toymoban.com/news/detail-714476.html

到了这里,关于CTF-REVERSE练习之逆向初探的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PWN学习之格式化字符串及CTF常见利用手法

    格式化字符串漏洞是一种常见的安全漏洞类型。它利用了程序中对格式化字符串的处理不当,导致可以读取和修改内存中的任意数据。 格式化字符串漏洞通常发生在使用 C 或类似语言编写的程序中,其中  printf 、 sprintf 、 fprintf  等函数用于将数据格式化为字符串并进行输出

    2024年02月19日
    浏览(38)
  • BUUCTF-reverse-reverse1(面向新手超详细)

    拿到题目先查下壳(这里用的DIE,网上可以搜到下载)  64位,没有壳(壳是对代码的加密,起混淆保护的作用,一般用来阻止逆向) 然后拖进IDA(64位)进行反汇编 一般来说,先查看一下字符串,简单的题目会有flag或者敏感数据字符等信息,方便我们定位函数查看字符串的方

    2023年04月08日
    浏览(30)
  • 《算法还原 - CTF》逆向exe程序 + ida Pro 反汇编分析伪C代码 + python算法复现

    二进制安全,能干什么 逆向分析: 负责成品软件的技术原理. 比如分析竞品软件,吸取技术上的优点,进行技术难点公关 病毒分析: 负责分析病毒样本.研究恶意代码的技术手段等工作.主要是在安全公司,尤其是在杀毒软件公司需求较多.如360 、腾讯电脑管家等. 漏洞挖掘分析: 负责

    2024年01月22日
    浏览(49)
  • BUUCTF reverse题解汇总

    本文是BUUCTF平台reverse题解的汇总 题解均来自本人博客 目录 Page1 Page2 Page3 Page4 easyre reverse1 reverse2 内涵的软件 新年快乐 xor helloworld reverse3 不一样的flag SimpleRev Java逆向解密 [GXYCTF2019]luck_guy [BJDCTF2020]JustRE 刮开有奖 简单注册器 pyre [ACTF新生赛2020]easyre findit rsa [ACTF新生赛2020]rome

    2024年02月03日
    浏览(31)
  • 「Codeforces」A. Reverse

    2022年2月15日15:29:19 题目描述 给一个长度为 n 序列, p 1 , p 2 , … , p n p_1, p_2, dots, p_n p 1 ​ , p 2 ​ , … , p n ​ 。选择两个整数,即一个区间 [ L , R ] [L, R] [ L , R ] ,对其区间进行反转操作。 要求你找到恰好执行一次反转操作获得的字典最小序列。 序列是一个数组,由 1 到

    2024年02月02日
    浏览(58)
  • Reverse入门[不断记录]

    心血来潮,想接触点Reverse,感受下Reverse,于是从CTF的简单题目中慢慢入门 提示:以下是本篇文章正文内容,下面案例可供参考 1、工具:IDA 直接使用IDA将exe反编译,得到一堆代码。 使用Ctrl+X,查看编译流程,然后使用F5,查看代码。 将输入的字符,ascii为101的变成51,97的变

    2023年04月08日
    浏览(30)
  • [SHCTF 2023 校外赛道] reverse

    想不到第1题是个汇编,咱也不知道拿啥能弄成c,不过这题也不难,直接能看懂,关键部分。 取出异或0x1e然后保存,再取出-0xa再保存。 IDA打开,逻辑很简单,高低位互换 10字节随机数的key异或 用flag{头可以出来5个,后边的就只能一个个试,看着合适再试下一个 这才是签到

    2024年02月06日
    浏览(38)
  • Python 列表 reverse()函数使用详解

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 小白零基础《Python入门到精通》 reverse() 可以 「反转」 列表中的函数 语法 返回值 None ,没有返回值,会修改列表,反转元素顺序。 实例:反

    2024年02月13日
    浏览(32)
  • LeetCode //C - 206. Reverse Linked List

    Given the head of a singly linked list, reverse the list, and return the reversed list.   Example 1: Input head = [1,2,3,4,5] Output [5,4,3,2,1] Example 2: Input head = [1,2] Output [2,1] Example 3: Input head = [] Output [] Constraints: The number of nodes in the list is the range [0, 5000]. -5000 = Node.val = 5000 From: LeetCode Link: 206. Reverse Linked

    2024年02月01日
    浏览(48)
  • LeetCode 2000. Reverse Prefix of Word

    Given a  0-indexed  string  word  and a character  ch ,  reverse  the segment of  word  that starts at index  0  and ends at the index of the  first occurrence  of  ch  ( inclusive ). If the character  ch  does not exist in  word , do nothing. For example, if  word = \\\"abcdefd\\\"  and  ch = \\\"d\\\" , then you should  reverse  the segment that

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包