攻防世界 逆向 EasyRE

本文详细解析了攻防世界逆向EasyRE题目,通过分析exe文件的脱壳信息和IDA工具的使用,深入探讨了如何从字符串窗口中发现flag线索,并通过对特定函数源代码的解读,成功提取了正确flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

攻防世界 逆向 EasyRE

(原创)
原题如下:
在这里插入图片描述
下载文件:
在这里插入图片描述
查看exe文件的脱壳信息并用IDA打开。
在这里插入图片描述
Shift+F12查看字符串窗口,发现flag,但是并不对。
注意到下面的right\n,查看其伪代码。
此函数源代码如下:

int sub_401080()
{
  unsigned int v0; // kr00_4
  signed int v1; // edx
  char *v2; // esi
  char v3; // al
  unsigned int v4; // edx
  int v5; // eax
  __int128 v7; // [esp+2h] [ebp-24h]
  __int64 v8; // [esp+12h] [ebp-14h]
  int v9; // [esp+1Ah] [ebp-Ch]
  __int16 v10; // [esp+1Eh] [ebp-8h]

  sub_401020(&unk_402150, v7);
  v9 = 0;
  v10 = 0;
  v7 = 0i64;
  v8 = 0i64;
  sub_401050((const char *)&unk_402158, (unsigned int)&v7);
  v0 = strlen((const char *)&v7);
  if ( v0 >= 0x10 && v0 == 24 )
  {
    v1 = 0;
    v2 = (char *)&v8 + 7;
    do
    {
      v3 = *v2--;
      byte_40336C[v1++] = v3;
    }
    while ( v1 < 24 );
    v4 = 0;
    do
    {
      byte_40336C[v4] = (byte_40336C[v4] + 1) ^ 6;
      ++v4;
    }
    while ( v4 < 0x18 );
    v5 = strcmp(byte_40336C, "xIrCj~<r|2tWsv3PtI\x7Fzndka");
    if ( v5 )
      v5 = -(v5 < 0) | 1;
    if ( !v5 )
    {
      sub_401020("right\n", v7);
      system("pause");
    }
  }
  return 0;
}

主要部分为下图中的代码。
在这里插入图片描述
主要的变量为v5、byte_40336C和其他几个表示位序的变量。
编写C语言的代码,如下。
在这里插入图片描述
运行得到flag。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值