我们先进行查壳和查位数,发现是32位无壳。
之后我们进行ida解析,进行字符串的查询
我们可以看到有ABCDEFG..........的字符串,这是很明显的base64的编码。这很重要!
然后我们看主函数
我们发现他是先对我们的输入进行base64加密,然后我们可以看他又对base64的加密做了一个for循环进行了二次加密最后destination与str2做比较,从中我们可以得知,str2即为最终的机密结果。
我们可是逆向,先对str2进行处理将他还原成base64加密后的状态。
int main()
{
char c[] = { 101, 51, 110, 105, 102, 73, 72, 57, 98, 95,67, 64, 110, 64, 100, 72 };
for (int i = 0; i < 16; i++)
{
c[i] -= i;
}
for (int i = 0; i < 16; i++)
{
printf("%c", c[i]);
}
return 0;
}
解码之后我们得到了e2lfbDB2ZV95b3V9
在进行base64解码我们就得到了flag{i_l0ve_you}