好友
阅读权限 10
听众
最后登录 1970-1-1
本帖最后由 lxiaobei 于 2026-3-4 21:42 编辑
参考了这个师傅的文章https://www.52pojie.cn/thread-2094341-1-1.html
我使用trac+mcp直接无脑让ai调用工具进行分析,确实很简单,并且结果也很准确,生成的报告如下:
CrackMe Challenge v2.5 - Flag分析报告 程序信息 程序名称 : CrackMe Challenge v2.5 - 2026分析日期 : 2026-03-04分析工具 : IDA Pro + MCP
找到的Flag
✅ 正确的Flag 52pojie!!!_2026_Happy_new_year!
分析过程
1. 字符串发现
通过IDA Pro的字符串搜索,发现了以下关键字符串:"Keywords: 52pojie, 2026, Happy new year" - 提示信息 "Hint: Fake flag; length is key" - 提示假flag和长度是关键 "[?] Enter the password: " - 密码输入提示 "[+] Correct flag: " - 正确flag提示 "[X] Wrong password. Keep trying!" - 错误提示
2. 验证函数分析 (sub_4CD130)
假Flag陷阱
程序首先检查输入是否为 "52pojie2026Happy" (16个字符):
n53 = 53; // '5' 的ASCII码v5 = v3; // 输入长度
v6 = 0;
if ( !v5 ) // 如果长度不为0
{
while ( Str[v6] == n53 ) // 逐个字符比较
{
if ( ++v6 == 16 ) // 如果匹配了16个字符
{
// 显示假flag提示
sub_4C7E50("\n[!] You're getting closer...");
}
n53 = byte_4D3032[v6]; // 下一个期望字符
}
}
byte_4D3032的值 : "52pojie2026Happy"这是一个假flag,用来迷惑破解 者!
真正的验证逻辑
第一步:长度检查
if ( strlen(Str) != 31 ){
sub_4C7E50("\n[!] Hint: The length is your first real challenge.");
}
第二步:sub_4016D0验证
if ( (unsigned __int8)sub_4016D0(Str, 31) ){
// 验证通过
}
第三步:加权和验证
Str = 0;v8 = *Str_1;
if ( !*Str_1 )
goto LABEL_16;
v9 = 0;
do
{
Str += ++v9 * v8; // 加权和计算
v8 = Str_1[v9];
}
while ( v8 );
if ( Str != (char *)44709 ) // 期望的加权和
{
// 校验失败
}
3. 关键验证数据生成 (sub_401620)
这个函数生成31字节的验证数据:
*(_DWORD *)a1 = 758280311; // 0x2D3A1C77*(_DWORD *)(a1 + 4) = 1663511336; // 0x631A7D68
*(_DWORD *)(a1 + 8) = 1880974179; // 0x701B7B63
*(_DWORD *)(a1 + 12) = 494170226; // 0x1D6D1D72
*(_DWORD *)(a1 + 16) = 842146570; // 0x3234564A
*(_DWORD *)(a1 + 20) = 657202491; // 0x272B1A7B
*(_DWORD *)(a1 + 24) = 658185525; // 0x273A1A75
*(_WORD *)(a1 + 28) = 12323; // 0x3023
*(_BYTE *)(a1 + 30) = 99; // 0x63
​
// 每个字节与0x42异或解码
result = (_BYTE *)a1;
do
*result++ ^= 0x42u;
while ( result != (_BYTE *)(a1 + 31) );
4. Flag解码
原始数据(小端序):
77 70 32 2D 28 2B 27 63 63 63 1D 70 72 70 74 1D
0A 23 32 32 3B 1D 2C 27 35 1D 3B 27 23 30 63
与0x42异或后:
35 32 70 6F 6A 69 65 21 21 21 5F 32 30 32 36 5F
48 61 70 70 79 5F 6E 65 77 5F 79 65 61 72 21
转换为ASCII:52pojie!!!_2026_Happy_new_year!
5. 验证
长度验证 : 31个字符 ✓
加权和验证 :
s = "52pojie!!!_2026_Happy_new_year!"weighted_sum = sum((i + 1) * ord(c) for i, c in enumerate(s))
# weighted_sum = 44709 ✓
字符匹配验证 :
# 与Block数据逐个字符比较
# 全部31个字符都匹配 ✓
总结 破解关键点 识别假flag : "52pojie2026Happy" 是陷阱长度分析 : 真正的flag长度是31个字符数据解码 : 通过异或0x42解码验证数据多重验证 : 长度 + 字符匹配 + 加权和
正确的Flag 52pojie!!!_2026_Happy_new_year!程序安全性评估 难度 : 中等技术点 : 字符串混淆、假flag陷阱、多重验证破解方法 : 静态分析 + 数据解码
报告生成时间 : 2026-03-04分析工具 : IDA Pro MCP
免费评分
参与人数 1 威望 +1
吾爱币 +20
热心值 +1
收起
理由
Hmily
+ 1
+ 20
+ 1
感谢发布原创作品,吾爱破解论坛因你更精彩!
查看全部评分
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。