欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

****实验Pre3

程序员文章站 2022-04-26 09:39:15
...

赞赏码 & 联系方式 & 个人闲话

****前言

Pre3

这次的预习是每个组去Reversing.Kr上分配一个题目,我们组拿到的题目是:

Direct3D FPS

Step1:熟悉游戏规则

打开界面就是一个射击游戏:里面有很多大黄蛋,开很多枪能打死蛋,往蛋上撞就game over了。

****实验Pre3

Step2:反编译可执行文件

把exe文件拖进IDA反编译,首先找到判断成功的函数。主函数vinmain中有判断失败的地方,它的下一行sub_BE39C0()就是判断成功的函数。

具体代码如下:

****实验Pre3

Flag就放在byte_BE7028中,可里面的值不全是可见字符,说明在其他地方还有解密操作,通过交叉引用可以找到:

****实验Pre3

可以看出,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]:

****实验Pre3

可以看出,这个数组里放的就是i*4。

接着打印Flag[result]:

****实验Pre3

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='');

运行结果:

****实验Pre3

Flag的值为:Thr3EDPr0m

Step5:提交Flag值

提交到网站:

****实验Pre3

问题解决:

****实验Pre3

 

 

相关标签: ****

上一篇: ****实验Lab6

下一篇: ****实验Lab1