2024.3.21日报(简单的逆向)

学习内容:简单的逆向

目录

介绍

实训


介绍

CTF(Capture The Flag)比赛中的逆向工程是指对给定的二进制文件(如可执行文件、固件、加密算法等)进行分析和破解的过程。逆向工程可以帮助我们理解程序的工作原理、发现漏洞或隐藏功能,以及获取隐藏的关键信息。

在CTF中,简单逆向通常包括以下几个方面:

1. 静态分析:通过使用反汇编器或逆向工具(如IDA Pro、Ghidra等),对二进制文件进行静态分析,了解程序的结构和逻辑。

2. 动态调试:使用调试器(如GDB、OllyDbg、x64dbg等)来动态执行二进制文件,并在运行过程中观察和修改程序的状态。调试器可以帮助我们跟踪程序执行的路径,查看寄存器、内存和堆栈的内容,以及进行动态修改和调试。

3. 反编译:将二进制文件转换为高级语言(如C、C++等)的伪代码,以便更容易地阅读和理解程序的逻辑。反编译工具(如IDA Pro、Ghidra等)可以将二进制文件转换为伪代码,并帮助我们更好地理解程序的功能和算法。

4. 寻找漏洞:逆向工程可以帮助我们发现程序中的漏洞,如缓冲区溢出、格式化字符串漏洞、逻辑漏洞等。通过分析和理解程序的逻辑,我们可以尝试找到漏洞并开发利用代码。

5. 密码破解:逆向工程可以用于破解加密算法或密码保护的程序。通过分析程序的算法和密钥管理方式,我们可以尝试还原加密过程、猜测密码或生成有效的密钥。

在进行逆向工程时,需要一定的计算机编程和底层知识,以及对二进制文件和汇编语言的理解。同时,逆向工程是一项复杂的任务,需要耐心和坚持不懈的精神,以及不断学习和探索新的技术和工具。

实训

就以这次云曦考核的逆向签到题为例:

这里用到的反汇编工具是IDA Pro。

F5查看伪代码

我们先看看这个_main函数都干了些啥:

这个`_main`函数似乎是用于初始化一些全局构造函数的。`initialized`变量用来检查是否已经进行了初始化,防止重复初始化。如果`initialized`为`0`(即未初始化),则设置`initialized`为`1`并调用`_do_global_ctors()`函数进行某些初始化操作。这部分对理解主要逻辑不是必须的,我们可以把它当成背景信息。

现在,让我们重新分析主函数`main`的逻辑:

1. 打印提示信息`"This is a sign-in question, the flag is here."`。

2. 将字符串`"Yunxi{Hhhackeer_hello_w0rld}"`拷贝到变量`Str`中。

3. 通过`printf`函数提示用户输入flag。

4. 读取用户的输入到`Buffer`变量中,`fgets`函数从标准输入(`stdin`)读取最多49个字符(保留一个位置给字符串结束符`'\0'`),然后用`strcspn`函数找到并去除字符串中的换行符。

5. 接下来,程序对`Str`中的某些字符进行替换:
   - 将所有的`e`(ASCII码为101)替换为`3`。
   - 将所有的`o`(ASCII码为111)替换为`0`。

6. 最后,如果修改后的`Str`字符串与用户输入的`Buffer`字符串相同,打印`"Welcome"`;否则,打印`"No way"`。

综上所述,用户需要输入一个正确的flag才能通过验证。这个flag就是`"Yunxi{Hhhackeer_hello_w0rld}"`字符串,但是其中的`e`替换为`3`,`o`替换为`0`,即正确的flag应该是`"Yunxi{Hhhack33r_h3ll0_w0rld}"`。

  • 13
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值