【BUUCTF】REVERSE-刷题记录-reverse1
题目信息

解题步骤

编译器为 MSVC 19.00,对应 Visual Studio 2015 或 2017 版本。
使用ida查看:

1 | for ( j = 0; ; ++j ) |
Str2是一个字符串(全局变量或常量)- 遍历
Str2,把所有字符'o'(ASCII111)替换成'0'(ASCII48) - 条件是
j > j_strlen(Str2)才跳出 → 实际是j <= len时继续 - 所以这是一个 字符串预处理:将
Str2中的o→0
Str2是“正确 flag”的模板,但被混淆了(用o代替0)
1 | sub_1400111D1("input the flag:"); |
sub_1400111D1:puts或printf的封装(输出)sub_14001128F:scanf的封装(输入)%20s:读取最多 20 个字符到Str1- 所以用户输入被限制为 最多 20 字符的字符串
1 | v5 = j_strlen(Str2); |
j_strlen(Str2):获取Str2的长度strncmp(Str1, Str2, v5):比较用户输入Str1和处理后的Str2- 如果相等 → 输出 “right flag”
所以我们要查看str2

根据代码
1 | for ( j = 0; ; ++j ) |
进行变换,得到{hell0_w0rld}
当然,也可以打个断点进行调试,直接看内容:


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 末心的小博客!










