1.查壳。
无壳,64位。
2.IDA反编译。
分析代码共有四个未知函:sub_4006D6,sub_400807,sub_400881,sub_400917。
查看sub_4006D6可知flag是由0,1,2,3,4组成的,且长度为10.
再看第二个if中的函数:由循环可知要把unk_601060中的数据写成5 *5的方阵,两个if判断分别是要使方阵的每行,每列中的元素都不同(也就是数独。)
解数独。
得到这十个数为:0421421430
提交发现不对,应该是在中间进行了变换。
3.看sub_400807函数。
递归函数。(没看懂,看了看大佬的wp,发现他们是动调出的结果。)
开始动调因为是liunx系统文件,所以要借助ubuntu远程调试。
在if处设置断点,输入0123456789这十个数(v5也是十位。),
然后f8单步调试到jz处,改ZF的值为0(这样才能进入if结构)。
继续f8调试。知道栈中v7所对的地址中有值
(如下图AE00-AE08:v5输入的0123456789,AE10-AE18:变换后的值。)
4.脚本解密
5.get flag
flag{1134240024}