第一个逆向题解:异或

exe文件地址:

 

链接:https://pan.baidu.com/s/1krtjBco_cDtnt9SGeOw0Bg 
提取码:znh9

 step1:先查壳。

 拉到die里面。看到是32位的。

第一个逆向题解:异或_第1张图片

 step2:再拉到IDA PRO里面查看。

一路点击ok,可以看到出现了下面这样的。

第一个逆向题解:异或_第2张图片

然后按F5查看类c代码。

第一个逆向题解:异或_第3张图片 

再点条件判断的函数check可以发现这个flag长度为14。

        注意:有个小经验。不要所有的函数都尝试点开去分析。记住我们只分析人写出来的代码。就像上面代码中的这些函数就是我们编程时候用到的系统的库里面的函数。这些我们没必要去分析,只需要知道他的作用即可。

第一个逆向题解:异或_第4张图片

step3:阅读代码之后发现是一个基本的异或运算。用到了a=a^b^b这个公式。写个python即可解码。

 分析程序:

 ,看到有个enflag的变量特别瞩目,双击查看。

他给我们定位到这条语句。这句话的意思再汇编里面就是将unk_406044处的双字型数据赋给enflag,因此我们只需要查看这个数据是什么即可,再次双击。

我们只取前七个数据, 发现都是二进制数据。

 第一个逆向题解:异或_第5张图片

 

flag = 'moectf{'
str = b"moectf{"   #由于异或运算是二进制层面,所以我们得先将其转换为二进制。
list = [0x28, 0x15, 0x3A, 0x1B, 0x44, 0x14, 0x6]
for i in range(len(list)):
    flag += chr(str[i] ^ list[i])
print(flag)

你可能感兴趣的:(逆向,reverse)