polarCTF RE刷题记录
Gobang
查壳并脱壳

放入ida


主要验证逻辑在judge函数,,循环i=2到6检查(2,2)(3,3)等位置是否有棋子,全部都有就成功(flag=1)

等待五秒就会关闭
点击+++
打开附件有四个文件
其中点击+++有upx壳,脱壳后ida打开可得到flag1 xoisnkcizo
transform无壳,打开后是加密字符串逻辑,加密的什么呢,就是看那个1和密钥文件。把1在veracrypt中挂载,然后选择密钥文件,会有提示是aes加密,然后打开挂载磁盘,会出现flag2和transform.exe,(这里没图片是因为vera不让截图),flag2里是一串加密的十六进制数据0x9B 0x4B 0x7B 0xC3 0xD3 0x73 0x0B 0x9B,就可按照transform逻辑进行解密,
加密逻辑是把原始值的二进制同时左移三位和右移五位然后合并结果(八位循环左移三位),解密就是反过来,代码如下
def solve():
# 加密字节序列
cipher_bytes = [0x9B, 0x4B, 0x7B, 0xC3, 0xD3, 0x73, 0x0B, 0x9B]
decrypted_chars = []
print("开始解密...\n")
print(f"{'加密值':<10} {'二进制':<12} -> {'解密值':<10} {'字符'}")
print("-" * 50)
for b in cipher_bytes:
# 解密逻辑:循环右移 3 位 (Rotate Right 3)
# 1. b >> 3: 将高 5 位移回原来的低位
# 2. b << 5: 将低 3 位移回原来的高位
# 3. & 0xFF: 确保结果保留在 8 位以内
original_byte = ((b >> 3) | (b << 5)) & 0xFF
char = chr(original_byte)
decrypted_chars.append(char)
# 打印详细过程
print(f"0x{b:02X} {b:08b} -> 0x{original_byte:02X} '{char}'")
result = "".join(decrypted_chars)
print("\n" + "-" * 50)
print(f"最终解密字符串: {result}")
if __name__ == "__main__":
solve()
得到flag2为sioxznas,拼接就是最终flag
老八小冒险
运行niceman.exe得到niceman文件夹,真正的游戏在文件夹中,
第一关的史莱姆很好欺负,不用作弊就能拿到flag第一部分

这个魅魔表示不吃压力,HP达到了惊人的114514,并且还能躲过攻击,二次攻击,极肉无比。
用CE打开发现搜不出来游戏的数值,于是可推出这个游戏的血量什么的是被加密了,那么我们就新建扫描
然后攻击什么的,再选择变动的值进行下一次扫描
一直死一直试,最终可得出,游戏的值×2+1=内存里的值,然后就可以修改魅魔的生命值
得到flag第二段
然后是第三关魔神
同样的操作更改魔神生命值,得到第三段

o_O、UU加速、往哪走
都是只用ida就能做的,简单带一下
o_O就是输入一个整数,将其转为十进制存入vector内存,然后反转(就是交换第一个和最后一个,第二个和倒数第二个,第三个和倒数第三个),接着每个数字乘十与arr数组比较。
_arr DCD 0x5A, 0x14, 0xA, 0x32, 0, 0, 0x14
arr = [90,20,10,50,0,0,20],所以这个数为2005129.然后md5即可 flag{7e4e85033d36b28767243dcb3d9c7049}
uu加速程序打开是叫我们加微信购买什么的,用ida打开发现有两种方式能做,一种是在当前目录创立一个request.txt文件,里面的内容符合要求就能通过检测,一种是直接解出flag,
这是加密的字符串,解密逻辑是首先用初始值54与key80异或,然后密文依次赋值给n54与key异或
解密代码
# 密钥
key = 80
# 密文
ciphertext = b'6<17+4?v>?$v5>7175v9>v9>6"9>79>7v3"13;9>7v2581&9?"-'
# 解密逻辑
plaintext = []
# 初始 n54 值
n54 = 54
for i in range(len(ciphertext)):
# 异或
plaintext.append(chr(n54 ^ key))
# 更新 n54 为密文的下一个字节
n54 = ciphertext[i]
# 输出结果
print(''.join(plaintext))
往哪走迷宫,1是墙 flag就是222441144222
*1111
01000
01010
00010
1111#

0 条评论