https://buuoj.cn/challenges#[GXYCTF2019]simple%20CPP
64 c 艹
程序比较复杂,需要使用动调看程序的逻辑(终于来了,结构分析)
GXY{114514}
动态调试进去看不出来具体内容的时候要进入汇编层面看看才行,在反编译界面看准是哪个寄存器,在汇编界面进入寄存器指的值,Ctrl+E
导出
整个程序的逻辑是先把输入和一个数组循环异或,再把异或后的数据存在 i64 数组里面(大小为 4,大端的方式去存),通过 5 个方程验证数组里的数字是否符合要求
这种一般能 angr 就秒了,奈何实在 Win 下,只能用 z3 一点点往回推了
得到开始的 dump 为:
0x3e3a460533286f0d 0xc00020130082c0c 0x8020717153e3013 0x32310600
循环异或回去就行了
发现 dump1 部分是有很多个解的,在比赛的时候放出来是 e!P0or_a
We1l_D0ne!P0or_algebra_am_i