栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

reverse ez

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

reverse ez

拿到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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353045.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号