【CTF Reverse】XCTF GFSJ0487 game Writeup(反编译+逆向工程)

game

菜鸡最近迷上了玩游戏,但它总是赢不了,你可以帮他获胜吗


解法

放进 exeinfope 中分析。

拖入 IDA 中。shift + f12 查看字符串。ctrl + f 搜索 flag。

DATA XREF: sub_45E940+28↑o

Function 中搜索 sub_45E940。

flag 应该是在这里算出来的:

将这段 c 伪代码魔改为 c++ 程序:

#include <cstring>
#include <iostream>
#define AUTHOR "HEX9CF"
using namespace std;

int main() {
	int v0;		  // eax
	int v1;		  // edx
	int v3;		  // [esp-4h] [ebp-168h]
	int i;		  // [esp+D0h] [ebp-94h]
	char v5[58];  // [esp+DCh] [ebp-88h] BYREF
	// char v5[3];		// [esp+DCh] [ebp-88h] BYREF
	// char v6[19];	// [esp+DFh] [ebp-85h] BYREF
	// char v7[32];	// [esp+F2h] [ebp-72h] BYREF
	// char v8[4];		// [esp+112h] [ebp-52h] BYREF
	char v9[64];	// [esp+120h] [ebp-44h]
	int v10;		// [esp+160h] [ebp-4h]
	int savedregs;	// [esp+164h] [ebp+0h] BYREF

	// printf("done!!! the flag is ");
	v9[0] = 18;
	v9[1] = 64;
	v9[2] = 98;
	v9[3] = 5;
	v9[4] = 2;
	v9[5] = 4;
	v9[6] = 6;
	v9[7] = 3;
	v9[8] = 6;
	v9[9] = 48;
	v9[10] = 49;
	v9[11] = 65;
	v9[12] = 32;
	v9[13] = 12;
	v9[14] = 48;
	v9[15] = 65;
	v9[16] = 31;
	v9[17] = 78;
	v9[18] = 62;
	v9[19] = 32;
	v9[20] = 49;
	v9[21] = 32;
	v9[22] = 1;
	v9[23] = 57;
	v9[24] = 96;
	v9[25] = 3;
	v9[26] = 21;
	v9[27] = 9;
	v9[28] = 4;
	v9[29] = 62;
	v9[30] = 3;
	v9[31] = 5;
	v9[32] = 4;
	v9[33] = 1;
	v9[34] = 2;
	v9[35] = 3;
	v9[36] = 44;
	v9[37] = 65;
	v9[38] = 78;
	v9[39] = 32;
	v9[40] = 16;
	v9[41] = 97;
	v9[42] = 54;
	v9[43] = 16;
	v9[44] = 44;
	v9[45] = 52;
	v9[46] = 32;
	v9[47] = 64;
	v9[48] = 89;
	v9[49] = 45;
	v9[50] = 32;
	v9[51] = 65;
	v9[52] = 15;
	v9[53] = 34;
	v9[54] = 18;
	v9[55] = 16;
	v9[56] = 0;
	memcpy(v5, "{ ", 2);
	v5[2] = 18;
	memcpy(v5 + 3, "bwlA)|P}&|oJ1Sl^lT", 18);
	// qmemcpy(v6, "bwlA)|P}&|oJ1Sl^lT", 18);
	v5[3 + 18] = 6;
	// v6[18] = 6;
	memcpy(v5 + 3 + 19, "`S,yhn _uec{", 12);
	// qmemcpy(v7, "`S,yhn _uec{", 12);
	v5[3 + 19 + 12] = 127;
	v5[3 + 19 + 13] = 119;
	v5[3 + 19 + 14] = 96;
	v5[3 + 19 + 15] = 48;
	v5[3 + 19 + 16] = 107;
	v5[3 + 19 + 17] = 71;
	v5[3 + 19 + 18] = 92;
	v5[3 + 19 + 19] = 29;
	v5[3 + 19 + 20] = 81;
	v5[3 + 19 + 21] = 107;
	v5[3 + 19 + 22] = 90;
	v5[3 + 19 + 23] = 85;
	v5[3 + 19 + 24] = 64;
	v5[3 + 19 + 25] = 12;
	v5[3 + 19 + 26] = 43;
	v5[3 + 19 + 27] = 76;
	v5[3 + 19 + 28] = 86;
	v5[3 + 19 + 29] = 13;
	v5[3 + 19 + 30] = 114;
	v5[3 + 19 + 31] = 1;
	strcpy(v5 + 3 + 19 + 32, "u~");
	// strcpy(v8, "u~");

	string flag = "";
	for (i = 0; i < 56; ++i) {
		v5[i] ^= v9[i];
		v5[i] ^= 0x13u;
		flag += v5[i];
	}
	cout << flag << endl;

	//   v0 = sub_45A7BE("%s\n");
	// v3 = v1;
	//   sub_459AE9(&savedregs, &dword_45EC04, v0);
	//   return sub_458801((unsigned int)&savedregs ^ v10, v3);
	return 0;
}

输出:

zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}

Flag

zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}

声明

本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶机上进行,并且严格遵守了相关法律法规

博主坚决反对任何形式的非法黑客行为,包括但不限于未经授权的访问、攻击或破坏他人的计算机系统。博主强烈建议每位读者在学习网络攻防技术时,必须遵守法律法规不得用于任何非法目的。对于因使用这些技术而导致的任何后果,博主不承担任何责任

  • 16
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值