对于拿到文件,首先第一步进行查壳,我这里用的工具是Exeinfo PE 0.0.6.6,工具就各位自己去下载了,这里就不啰嗦了,开整!
这里是一个64位的无壳ELF文件。
下一步扔进ida查看c伪代码
然后直接一个shift+f12查看函数,看到一个flag标志,点进去
开始分析函数,这里可以直接跳过case 2,3;直接看1,4,5。case1进行的是flag输出,strcat函数的意思是追加,f1+f2就等于flag。接下来我们点进f1看看啥情况,然后看f2显示的是空字符串。
继续返回伪代码看看怎么个回事?
原来是直接将s的值赋给了f2,分析s的值是一个十进制数,而且根据栈的存储属于小端存储(逆序)。分析到这就有一个大概的思路,第一进行十进制转为十六进制,然后在进行逆序输出。根据伪代码的解析就是随机数余200所得到的数进行case循环,然后去判定,case5做的是一个减法操作,j为奇数的时候减2,j为偶数的时候减1,然后f1+f2就等于flag啦!!
因为这里j<=7,进行十六进制转换后发现刚好分为8组,然后进行逆序。
这里将GXY改为flag。
还有一种c语言的解题
今天的解题到此结束!有不对的地方还请各位大佬赐教。