buuctf做题记录
查壳
无壳32位
IDA反编译
试图直接对main函数反编译会弹出提示:
所以查看401095
处的汇编:
点进sub_401020
,F5反编译:
返回main
函数处,再次F5,反编译成功:
方法指导
分析
简单分析,函数有printf,scanf,system
等,进行一个重命名和隐藏不需要的显示,逻辑就很清晰了:
首先判断是否输入33个字符
然后对每个字符按从0到32的索引号对该字符进行异或
最后将异或后的字符与byte_41EA08
比较,相同就输出Right
查看byte_41EA08
内容:
注意不要漏掉4D
(‘M’)
写个简单的C++脚本吧:
#include<iostream>
using namespace std;
int main()
{
int c[] = {0X4D,0X53,0X41,0X57,0X42,0X7E,0X46,0X58,0X5A,0X3A,0X4A,0X3A,0X60,0X74,0X51,0X4A,0X22,0X4E,0X40,0X20,0X62,0X70,0X64,0X64,0X7D,0X38,0X67};
for(int i=0;i<33;i++)cout << (char)(c[i]^i);
}
得到flag:
buuctf的要求是包上flag{}
所以提交falg:
flag{@_R3@1ly_E2_R3verse!}
小记
摸鱼后的复建,慢慢来吧()