攻防世界EasyRe WP

本文通过分析攻防世界EasyRe挑战,详细展示了如何使用IDA32进行脱壳并找到FLAG的过程。通过对关键代码段的逆向工程,揭示了FLAG的生成算法。

攻防世界EasyRe

查看脱壳信息后丢入ida32,按下shift+F12发现第一行有flag,但是不是正确的,又看到有一个right\n

在这里插入图片描述

所以可以判断真正的flag在这段指令附近,于是查看伪代码

在这里插入图片描述
看到这个后,很容易逆出flag,代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int  main()
{
    const char* tar = "xIrCj~<r|2tWsv3PtIzndka";
    char flag[25] = {0};
    for (int i = 0; i < 24; i++)
    {
        flag[i] = tar[23 - i] ^ 0x6;
        flag[i]--;
    }
    printf("%s",flag);

} 
由于没有具体的“攻防世界1000click题目”相关详细代码或更多信息,以下是一个通用的使用GDB调试此类题目的解题思路和方法示例。 ### 解题思路 - **程序初步分析**:首先要对程序的功能有一个大致的了解,查看程序是32位还是64位,是否有保护机制(如NX、PIE、Canary等)。可以使用`file`命令查看程序类型,使用`checksec`命令查看保护机制。 - **确定关键函数**:在程序中找到与题目关键逻辑相关的函数,例如可能存在与点击次数判断、权限验证等相关的函数。可以通过查看反汇编代码,使用`disassemble`命令,结合程序的业务逻辑来确定。 - **设置断点**:在关键函数的入口、关键条件判断语句处设置断点,以便逐步调试程序,观察程序的执行流程和变量的值。 - **动态调试**:运行程序,在断点处暂停,查看寄存器的值、内存中的数据,分析程序的运行状态。可以使用`print`命令打印变量的值,使用`x`命令查看内存中的数据。 - **分析漏洞点**:在调试过程中,观察程序是否存在缓冲区溢出、整数溢出、逻辑漏洞等问题。如果发现异常的程序行为,进一步分析其原因。 - **构造利用脚本**:根据分析出的漏洞点,构造相应的利用脚本,例如构造恶意输入来触发漏洞,获取程序的控制权。 ### 解题方法 以下是使用GDB调试的具体步骤示例: ```bash # 启动GDB调试程序 gdb ./1000click # 查看程序信息 (gdb) file (gdb) checksec # 反汇编main函数,找到关键函数 (gdb) disassemble main # 在关键函数处设置断点 (gdb) break <function_name> # 运行程序 (gdb) run # 程序在断点处暂停,查看寄存器和变量的值 (gdb) info registers (gdb) print <variable_name> # 查看内存中的数据 (gdb) x/10x <address> # 单步执行程序 (gdb) next (gdb) step # 继续执行程序到下一个断点 (gdb) continue ``` ### 示例代码分析 假设程序中有一个函数`check_click`用于检查点击次数,我们可以在该函数处设置断点进行调试: ```bash # 在check_click函数处设置断点 (gdb) break check_click # 运行程序 (gdb) run # 程序在check_click函数处暂停,查看函数参数和局部变量 (gdb) info args (gdb) info locals ```
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SNiFe_Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值