FireShell CTF的第一道逆向题
做的时候还卡了一下,丢人233333~
用IDA打开,找一找main函数
因为没有符号表,而且有很多无关的代码,所以尝试着判断一下各个函数的功能,改一下名
现在可以比较清楚的看到程序的逻辑了,打开input_file,将字符串加密以后写入output_file
具体的加密方法就在while循环里,我们写一个逆向算法把加密后的flag解出来即可
int main()
{
char flag[140] = { 0 };
FILE* fflag = fopen("flag.enc", "rb");
fgets(flag, 140, fflag);
for (size_t i = 0; flag[i]; i++)
{
unsigned char tmp = ~flag[i];
for (short j = 0; j < 65536; j++)
{
if ((unsigned char)j >> 7 | 2 * j == tmp)
{
cout << (char)j;
break;
}
}
}
}
比赛地址:FireShell