1.对靶机服务器场景桌面上的PE01.exe二进制文件进行静态调试,将main函数的入口地址作为Flag值提交;
使用IDA64 Pro打开PE01.exe,然后点击左边函数列表一栏,按下Ctrl+F搜索main
在第三列可以发现main函数(WinMain)入口地址为0x0000000140001000
flag{0x0000000140001000}
2.对靶机服务器场景桌面上的PE01.exe二进制文件进行静态调试,将该二进制文件中检查许可证的关键函数作为Flag值提交;
右键查看文本试图
搜索报错提示“wrong
”
查看sub_14001250的伪代码,发现名为su_140016A0函数
最终的FLAG为check函数的入口地址,0x00000001400016A0
flag{0x00000001400016A0}
3. 对靶机服务器场景桌面上的PE01.exe二进制文件进行静态调试,找到Flag1值并提交;
查看main伪代码,发现关键函数sub_14001920
发现这么一段话“Maybe the secret is in the background image”
发现这么一段话“Maybe the secret is in the background image”
对文件进行提取
在“.rsrc\2052\BITMAP”下发现图片
使用十六编辑工具,查看尾部发现问题
from binascii import a2b_hex
a2b_hex(b'466c6167317b63404e745f35655f6d457d')
#按照 ASCII 编码表,将每两个十六进制字符视为一个字节(即 8 个比特位),并将多个字节合并在一起,就可以得到明文 'Flag1{c@Nt_5e_mE}
Flag1{c@Nt_53_mE}
4.对靶机服务器场景桌面上的PE01.exe二进制文件进行静态调试,尝试破解该二进制文件,将注册成功后的回显信息作为Flag值提交;
编辑IDA数据库中的字节值
原01改为00
Edit->Patch program->Apply patches to input file… 将修改保存到原二进制文件中
5.对靶机服务器场景桌面上的PE01.exe二进制文件进行静态调试,将该激活所需的许可证码作为Flag值提交;
#include <stdio.h>`
int main() {
int final_code[17] = {-100, 72, -98, -103, 78, -118, 61, -91, 83, -74, -128, 6, 39, -93, 117, -103, -65};
int key = 0x41;
for (int i = 0; i < 17; i++) {
final_code[i] ^= key + i;
final_code[i] = -final_code[i];
final_code[i] = 16 * (final_code[i] & 0xF) | (final_code[i] >> 4) & 0xF;
putchar(final_code[i]);
}
return 0;
}
//*这段C代码包括一个main()函数,其中声明了一个长度为17的整型数组 final_code 和一个整型常量 key。
//代码使用for循环遍历数组中的每个元素,然后对每个元素执行一系列操作,并将最终的flag打印。
flag{2o22_Ch1n@Ski1ls!}
题号 | FLAG值 | |
---|---|---|
题目一 | 0x0000000140001000 | |
题目二 | 0x00000001400016A0 | |
题目三 | Flag1{c@Nt_5e_mE} | |
题目四 | Flag{yes_u_w0n!} | |
题目五 | 2o22_Ch1n@Ski1ls! |