开启靶场,下载附件,解压后得到:
双击exe文件,出现弹窗:
问的是异或,写个python文件来计算结果:
# 获取用户输入的两个整数
num1 = int(input("Enter the first number: "))
num2 = int(input("Enter the second number: "))# 计算异或结果
xor_result = num1 ^ num2# 打印结果
print(f"The result of {num1} XOR {num2} is: {xor_result}")
得到结果970
输入970后继续问问题:
继续写个python文件来计算结果:
# 已知的数
known_xor_result = 369
known_number = 258# 计算未知数 x
unknown_number = known_xor_result ^ known_number# 打印结果
print(f"The unknown number x that satisfies 258 XOR x = 369 is: {unknown_number}")
得到结果115
输入115,继续问问题:
第三问问的是字符a和字符z的ascii码值的异或结果
还是继续编写python脚本
# 字符'a'和'z'
char_a = 'a'
char_z = 'z'# 将字符转换为其ASCII码值
ascii_a = ord(char_a)
ascii_z = ord(char_z)# 计算ASCII码值的XOR结果
xor_result_ascii = ascii_a ^ ascii_z# 将XOR结果转换回字符
xor_result_char = chr(xor_result_ascii)# 输出结果
print(f"The result of '{char_a}' XOR '{char_z}' is: {xor_result_char} (ASCII value: {xor_result_ascii})")
得到结果27
输入27,得到flag:
NSSCTF{k0nw_of_r3}
但这题是逆向类别的,可以用逆向的思路来做
python主流的打包方式是使用pyinstaller,针对这种情况可以使用pyinstaller Extractor进行解包
先去安装uncompyle6
pip install uncompyle6
去github上下载https://github.com/one066/Exe-decompiling
新建bucket文件夹,将exe文件丢进bucket文件夹中
运行main.py:
发现bucket目录下多了一个文件夹和一个文件:
找到re1文件:
修改文件后缀为pyc,再用记事本打开,成功找到flag:
正常来说的思路是需要反编译成py文件的:
在Python3.7及以上版本的编译后二进制文件中,头部除了四字节Magic Number,还有四个字节的空位和八个字节的时间戳+大小信息,后者对文件反编译没有影响,全部填充0即可
Python3.3 - Python3.7(包含3.3)版本中,只需要Magic Number和八位时间戳+大小信息
Python3.3 以下的版本中,只有Magic Number和四位时间戳
添加33 0D 0D 0A 00 00 00 00 00 00 00 00 ,保存一下:
去github上下载:
https://github.com/zrax/pycdc
去下载CMake:
https://cmake.org/download/
将解压的pycdc-master文件夹拖到VScode中打开:
ctrl shift p执行CMake:Build,要是找不到就直接输入CMake:Build
生成两个exe文件:
将re1.pyc文件复制粘贴到这两个exe文件的同级目录下:
运行以下命令:
pycdc.exe re1.pyc > re1.py
这样才是成功反编译出py文件,并且找到flag