0x00前言 {#0x00%E5%89%8D%E8%A8%801625}
最近学弟们刚比完第四届长城杯信息安全铁人三项赛。向他们要了题逆向题练练手。
这是一道比较简单的base64变异题。
0x01正文 {#0x01%E6%AD%A3%E6%96%872370}
先去查壳一下,发现是64位无壳ELF文件
可以发现,该程序是通过
for ( i = 0; i <= 4; ++i )
{
v3 = gtable();
s1 = encode(s1, (__int64)v3);
}
后,然后用strcmp与一大串加密字符进行比较,若相同则返回Congratulations!。
先点进encode()函数,来看一下逻辑。
可以发现这里是base64加密的逻辑。
传入的V3自然就是base64变表了。进入gtable()来看看变表生成逻辑
从上图可知。他会先生成v2值(rand()%64说明值应该是在0-63之间),然后从aAbcdefghijklmn表中的第v2位开始一共取64位字符形成base64变表。
最后这种变异加密一共会进行五次。理清楚了逻辑,就可以之间用python写exp了。
最后结果如下图