找到主程序
发现无法进行反编译
反正汇编代码已经给你了,而且又不难,所以我们通过读汇编来手动写程序
这个得靠经验了,本菜鸟也是半推半猜弄出来的,叫我详细讲解,我也讲不太懂,可以去看大佬们的,我反编译成C++
int main()
{
char input[] ;
char tmp[];
cout<<"Give Me Your Flag String:"<<endl;
cin >> input;
for(int i=0;i<27;i++)
cin>>input[i];
strcpy(tmp , input);
if(strlen(input) != 27)
{level 1:
cout<<"Wrong!"<<endl;
system(pause);
}
for(int i=0 ; i<27 ;i++)
{
input[i] ^= i;
}
//MSAWB~FXZ:J:`tQJ"N@ bpdd}8g
char tar[] = {"MSAWB~FXZ:J:`tQJ"N@ bpdd}8g"};
if(!strcmp(input,tar))
{
cout<<"Right!"<<endl;
system(pause);
}
go level 1;
return 0;
}
流程就是,输入的字符串进行异或操作,与目标字符串对比,那么脚本就很好写了
#include<iostream>
using namespace std;
int main()
{
int flag[99];
int tar[]={ 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<27;i++)
{flag[i] = tar[i]^i;
}
for(int i=0;i<27;i++)
{
cout<<(char)flag[i];
}
return 0;
}
得到flag{@_R3@1ly_E2_R3verse!}