[ACTF新生赛2020]Universe_final_answer
题目重述
熟练地打开main函数
程序的意思很明显:就是做一个判断,如果通过了就给你flag,但是可以看到,输出里面有两个%s而后面只有一个对应参量,这么说另一个隐藏起来的就不能单纯靠静态分析解决了。
关键函数
这里很显然sub_860是关键函数,只要它判断成功了,问题就得到解决了
这个乍一看挺吓人的,但是分析问题要先总体分析,这么一些v1-v10的参数,乘上参数线性组合得到一个值,这不就是矩阵吗?跟着这个思路,我们可以分析到,要想返回值为True,那么两个if的条件一定要满足,return中的等式一定要为True。现在为证实思路正确性,数一数方程个数和未知数个数,确认可解性,发现正好是10个未知数,10个方程,无疑是可解的。
数据处理
但是10*10的矩阵手算是会死的!这里推荐用Excel做,毕竟这个人人都有,只要会用两个函数就行。
先把v11到v1的数据导入进去(这里我是按照v11的系数在前,v1的在后的顺序)
然后选中一个10*10的区域,对前面10个系数列使用MINVERSE函数
注意按确定的时候要同时按住ctrl和shift再按确定!
之后再选中一个10*1的列,使用MMULT函数
上面一组数据选择获得的逆矩阵(10*10),下面一组数据选择原矩阵的数据列
得到的结果
64 |
119 |
55 |
121 |
95 |
84 |
82 |
117 |
70 |
48 |
用python把ascii码转字符得到F0uRTy_7w@(其实直接解出来是0FuRT_y7w@),但是ida里面定义v1-v11有打乱顺序
V1和V2,V6和V7都交换了位置,所以最后也要相应调整。
得到flag
但是开始分析的时候也说了,不可能通过静态调试得到完整的答案
因为第二部分的%s是没有给出来的,但是我们都知道正确的key了,直接运行这个程序不就知道了?
放到虚拟机里运行
flag为actf{F0uRTy_7w@_42}