输入的地方很奇怪,作为一个逆向题没有验证长度,导致 bof。前面是个假的验证,解方程解了一下午,后来才发现是无解的。尝试利用 bof 更改返回地址。发现在0x413131处有个明显的抬栈操作,怀疑是入口,0x00413131正好是 11A\x00,输入12*'a'+'11A'即可覆盖返回地址调到0x00413131。
于是从0x00413131开始往下分析,发现大量重复条件跳转。主要逻辑夹杂在跳转之中,判断是否相等主要依赖 sub 之后判断 zf。
trace 化简后得到了以下代码:
照着汇编抄了一份z3
将 abc 转换回字符串 再补上11A 得到 flag:Just0for0fun11A
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)