IgniteMe debug 寒假逆向生涯(2/100)

博客围绕IgniteMe题目展开,指出这是简单题目。先对关键代码加密过程进行分析,包括大小写转换、函数转换、异或数组等操作。接着给出逆向代码,还分享了dnSpy调试时无程序资源管理器的解决办法,最后得出题目flag。

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

IgniteMe

声明

这是道超级简单的题目,就不重复啰嗦了,找到需要加密的关键代码后,直接一步到位。
在这里插入图片描述


  memset(&v4, 0xCCu, 0xF4u);
  if ( strlen(a1) > 4 )
  {
    j = 4;
    for ( i = 0; ; ++i )
    {
      v2 = strlen(a1);
      if ( j >= v2 - 1 )
        break;
      v11[i] = a1[j++];
    }
    v11[i] = 0;
    v8 = 0;
    v6 = 0;
    memset(v7, 0, 0x20u);
    for ( j = 0; ; ++j )
    {
      v3 = strlen(v11);
      if ( j >= v3 )
        break;
      if ( v11[j] >= 97 && v11[j] <= 122 )
      {
        v11[j] -= 32;
        v6 = 1;
      }
      if ( !v6 && v11[j] >= 65 && v11[j] <= 90 )
        v11[j] += 32;
      v5 = sub_4013C0(v11[j]);
      v7[j] = byte_4420B0[j] ^ v5;
      v6 = 0;
    }
    result = strcmp("GONDPHyGjPEKruv{{pj]X@rF", v7) == 0;
  }
  else
  {
    result = 0;
  }
  return result;
}

分析

  1. v11 经过大小写转换 到达v11
  2. v11 再经过 sub_4013C0函数转换到 v5
  3. v5 再经过异或byte_4420B0数组 到 v7
  4. v7GONDPHyGjPEKruv{{pj]X@rF 比较 是否相同

解释一下上面的一些代码操作,
j=4是因为前面还有四个字符,EIS{所以数组应该从索引4开始,数组索引0,1, 2,3分别对应EIS{
j >= v2 - 1是因为 数组最后一个是 }

中间的主要信息才是我们需要加密的flag,所以j的范围变成这样

分析四条反推回去,数组已知
在这里插入图片描述

接下来上逆向代码

#include <iostream>
using namespace std;
int main()
{
	int a[] = { 0xD,0x13,0x17,0x11,0x2,0x1,0x20,0x1D,0xC,0x2,
		0x19,0x2F,0x17,0x2B,0x24,0x1F,0x1E,0x16,0x9,0xF,0x15,0x27,
		0x13,0x26,0x0A,0x2F,0x1E,0x1A,0x2D,0x0C,0x22,0x4 };
	char b[] = {"GONDPHyGjPEKruv{{pj]X@rF"};
	char c[24];
	int j;

	for (int i = 0; i < 24; i++) {
		j = a[i] ^ b[i];
		c[i] = (j - 72) ^ 0x55;
		if (c[i] >= 65 && c[i] <= 90)
			c[i] += 32;
		else if(c[i] >= 97 && c[i] <= 122)
			c[i] -= 32;
		cout << c[i];
	}
}

在这里插入图片描述

debug

声明

这是一道超级简单的题目,最主要说说我这个脑残历程。。。

如果大家以后dnSpy出现下面这种情况的话,
在这里插入图片描述
没有程序资源管理器,只需要如下操作即可

  1. 打开视图
    在这里插入图片描述

  2. 点击程序资源管理器
    在这里插入图片描述
    然后就出现左边这样的
    在这里插入图片描述

下面进入正文

在这里插入图片描述
这个题的话,直接用来判断输入是否和flag(即b值)相同即可,所以直接一个断点到判断上方,即可查看b值
在这里插入图片描述
flag{967DDDFBCD32C1F53527C221D9E40A0B}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

寻梦&之璐

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

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

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

打赏作者

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

抵扣说明:

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

余额充值