逆向工程实验Pre3

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

逆向工程前言

Pre3

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

Direct3D FPS

Step1:熟悉游戏规则

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

逆向工程实验Pre3_第1张图片

Step2:反编译可执行文件

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

具体代码如下:

逆向工程实验Pre3_第2张图片

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

逆向工程实验Pre3_第3张图片

可以看出,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='');

运行结果:

逆向工程实验Pre3_第4张图片

Flag的值为:Thr3EDPr0m

Step5:提交Flag值

提交到网站:

逆向工程实验Pre3_第5张图片

问题解决:

逆向工程实验Pre3_第6张图片

 

 

你可能感兴趣的:(逆向工程)