解包,收集文件信息
先解包
反编译chal.pyc
核心逻辑在maze.so,chal.pyc导入了maze里面的run函数执行,maze是用Cython编译的
用strings查看可以看出是cython3.0.5版本编译的
获取符号表信息的两种方式
使用help读取
我们可以使用这个函数来导入maze,查看其中的全局变量,函数原型和类
这些变量名和函数名都像是base64,解密一下
CreateStringTabAndInitStrings函数
_Pyx_CreateStringTabAndInitStrings函数将所有 Python 代码使用到的字符串插入到__pyx_string_tab
找到run函数
直接搜索run,根据对Cython的研究,_pyx_pw_4maze_5run这个名称就是关键函数
分析一下这个函数
此处是input
此处调用了_pyx_mstate_global_static.__pyx_n_s_c29sdmU
这个加密函数
_pyx_pw_4maze_3c29sdmU
分析这个加密函数
采用了置换和异或加密
解密脚本
secret = [7, 47, 60, 28, 39, 11, 23, 5, 49, 49, 26, 11, 63, 4, 9, 2, 25, 61, 36, 112, 25, 15, 62, 25, 3, 16, 102, 38,
14, 7, 37, 4, 40]
pos = [18, 17, 15, 0, 27, 31, 10, 19, 14, 21, 25, 22, 6, 3, 30, 8, 24, 5, 7, 4, 13, 29, 9, 26, 1, 2, 28, 16, 20, 32, 12,
23, 11]
key = "HITPCTF"
for i in range(len(secret)):
temp = secret[i]
secret[i] = secret[pos[i]]
secret[pos[i]] = temp
flag = ""
for i in range(len(secret)):
flag += chr(secret[i] ^ ord(key[i % len(key)]))
print(flag)