就这个爽,只有一道逆向🥺🥺🥺
AmaZing_BruteForce
首先查壳,发现有壳
有壳,用upx工具解壳,在upx文件夹目录打开终端,输入
upx -d [完整文件路径]
显示解壳成功,再次查壳
无壳,且为64可执行文件,用ida64打开,找到main函数
分析可知v4是由四个小写字母组成的数组,v5数组这里采用小端存储,可按shift+e提取数据
且v5进入了一个加密函数,双击跟进函数
可知v5数组跟前面的v4异或可得结果,根据文件名提示force和分析代码猜测前面四个字母为flag,且采用爆破,直接上脚本
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int main(){
unsigned char v5[] = {
0x08, 0x05, 0x0A, 0x02, 0x15, 0x23, 0x3E, 0x36,
0x3A, 0x36, 0x2F, 0x55, 0x31, 0x58, 0x3F, 0x18
};
char v4[11];
for(int i=0;i<4;i++){
for(char j='a';j<='z';j++){
if(i==0&&(char)(j^v5[i])=='f'){
v4[i]=j;
break;
}
if(i==1&&(char)(j^v5[i])=='l'){
v4[i]=j;
break;
}
if(i==2&&(char)(j^v5[i])=='a'){
v4[i]=j;
break;
}
if(i==3&&(char)(j^v5[i])=='g'){
v4[i]=j;
break;
}
}
}
int c4 = 4, c5 = 16;
for (int i = 0; i < 16; ++i ) {
v5[i]^=v4[i%c4];
printf("%c",v5[i]);
}
}
//flag{JUST_D0_1T}