Pointer Overflow CTF - 2024 RE全WP
题目都非常简单,有几个题要些脑洞。
Well Said but Poorly Heard
flag: poctf{uwsp_1n_w1n3_7h3r3_15_7ru7h}
用ida打开可以直接看到flag,程序会打印出加密后的flag
obfuscate加密函数,只是对每个字符按位取反。
Understanding Nonsense
flag: poctf{uwsp_br3v17y_15_7h3_50u1}
先简单重命名一下函数和变量。
运行会提示没有调用解密函数。
在函数列表里找到reverse_modify_flag。
0x54DA579 = 88974713
就是每个字符减去3,1,7,4,7,9,8,8然后八个一循环。注意到被加密的flag第一个字符是0x8e = 142,而我们之前flag第一个字符'p'的ascii码是112,说明这个解密需要解10次。
enc = [0x8E, 0x79, 0xA9, 0x9C, 0xAC, 0xD5, 0xC5, 0xC7, 0x91, 0x7A, 0xA5, 0x8A, 0xB8, 0x8D, 0xC6, 0x81, 0x55, 0x83, 0xA5, 0x59, 0x7B, 0xB9, 0x87, 0xB8, 0x51, 0x69, 0x7B, 0x58, 0xBB, 0x8B, 0xCD]
# key = b"88974713"
key = b"31747988"
for k in range(10):
for i in range(31):
enc[i] -= key[i % 8] - 0x30
print(bytes(enc))
Planned Obsequence
Flag: poctf{uwsp_4_7h1n6_0f_b34u7y}
首先进入主函数,这里对s进行了加密,但显然不是flag。
查看这个加密函数。
可以先写出解密脚本。再去找数据。
这个函数看着很奇怪:
查看他的汇编代码,发现有对数据赋值。
这里直接动调提取出数据。
enc = [0x2d,0x38,0x3c,0x31,0x3f,0x24,0x32,0x30,0x2c,0x2d,0x08,0x71,0x08,0x70,0x35,0x6e,0x37,0x6f,0x08,0x6d,0x3f,0x08,0x3b,0x6c,0x71,0x32,0x70,0x26,0x2a]
print(enc)
flag = ""
for i in range(len(enc)):
flag += chr((enc[i]-3)^0x5a)
print(flag)
We Do It Live
flag: poctf{uwsp_7h3_n16h7_15_d4rk}
就是对输入进行一个加密和密文比较。
对着解密就行。
enc = [ 0x54, 0x55, 0x61, 0x50, 0x5E, 0x49, 0x4F, 0x4D, 0x51, 0x54,
0x65, 0x0D, 0x5C, 0x11, 0x65, 0x56, 0x13, 0x0E, 0x5C, 0x0D,
0x65, 0x13, 0x0F, 0x65, 0x60, 0x10, 0x52, 0x59, 0x47]
flag = ""
for i in range(len(enc)):
flag += chr((enc[i]-5)^0x3f)
print(flag)
这里密文长度实际上是29。
Separating the Firmament
flag: poctf{uwsp_7h3_w0rld_15_4_57463}
将输入与产生的key比较,相等就解密输入,打印flag。
直接动调拿到key:dchfwREaguPJ8!pV*^U&Ms,再输入给它就行。
解密过程就是简单异或。
产生key的函数也是通过xor一个秘钥获得。
1 条评论
可输入 255 字