拿到ez_xor.exe附件直接丢进PE
可以看到是64位exe文件,丢进ida64
Shift+F12查看字符串(如果是笔记本电脑的话,F12自带热键,先按Fn,即Fn+Shift+F12)
一般在这里找有没有和flag相关的字符串,可以看到这里是有的,双击进入
找到该字符串,点击上图所示,进入main方法
会进入流程图界面,按空格进入文本界面
可以看到汇编代码了,按F5(同理如果是笔记本记得按Fn+F5)反汇编,转换成C语言
现在就可以分析代码了,这里的C语言可能数据类型之类的会和我们平时的有点不一样
比如说这里的v3=0i64,0i64表示int64_t类型的0,其实就基本上可以理解为0
这里代码可以看到关键异或代码while ( (char)(v3 ^ v5[v3]) == dword_403020[v3] )
可以看到该字符串每个字符对应的ASCII码(这里按R键即可看到对应的字符)
现在已知dword_403020和v3(v3就是0~31),逐个进行异或即可得到flag
写一个Python脚本
s=[0x35, 0x62, 0x37, 0x30, 0x33, 0x3D, 0x60, 0x63, 0x3F, 0x3D, 0x6C,0x69, 0x6D, 0x6F, 0x68, 0x6D, 0x72, 0x77, 0x20, 0x70, 0x76, 0x73,0x72, 0x2F, 0x2E, 0x21, 0x7E, 0x2B, 0x28, 0x25, 0x2C, 0x29]
flag=[0 for i in range(32)] #从给出的代码很容易看到flag是32位的
for i in range(32):
flag[i]=i^s[i]
print(flag)
即可得出flag