****实验Pre3
程序员文章站
2022-04-26 09:39:15
...
赞赏码 & 联系方式 & 个人闲话
****前言
Pre3
这次的预习是每个组去Reversing.Kr上分配一个题目,我们组拿到的题目是:
Direct3D FPS
Step1:熟悉游戏规则
打开界面就是一个射击游戏:里面有很多大黄蛋,开很多枪能打死蛋,往蛋上撞就game over了。
Step2:反编译可执行文件
把exe文件拖进IDA反编译,首先找到判断成功的函数。主函数vinmain中有判断失败的地方,它的下一行sub_BE39C0()就是判断成功的函数。
具体代码如下:
Flag就放在byte_BE7028中,可里面的值不全是可见字符,说明在其他地方还有解密操作,通过交叉引用可以找到:
可以看出,Flag[result]和byte_BE9184[132*result*4]进行了异或。只要我们知道byte_BE9184[132*result*4]、Flag[result]的值,然后异或一下,就可以解密出Flag了。
Step3:求解byte_BE9184[132*result*4]和Flag[result]的值
在IDA中直接运行游戏,然后IDC脚本打印byte_BE9184[132*result*4]:
可以看出,这个数组里放的就是i*4。
接着打印Flag[result]:
Step4:异或操作求解Flag
将Flag[result]与byte_BE9184[132*result*4]的值进行异或,解密Flag。
代码如下:
words=[67,107,102,107,98,117,108,105,76,69,92,69,95,90,70,28,7,37,37,41,112,23,52,57,1,22,73,76,32,21,11,15,247,235,250,232,176,253,235,188,244,204,218,159,245,240,232,206,240,169];
for i in range(0,len(words)):
print("%c"%(words[i]^ (i*4)),end='');
运行结果:
Flag的值为:Thr3EDPr0m
Step5:提交Flag值
提交到网站:
问题解决:
上一篇: ****实验Lab6
下一篇: ****实验Lab1