51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

第四届长城杯信息安全铁人三项赛逆向题rand5

0x00前言 {#0x00%E5%89%8D%E8%A8%801625}

最近学弟们刚比完第四届长城杯信息安全铁人三项赛。向他们要了题逆向题练练手。
这是一道比较简单的base64变异题。

0x01正文 {#0x01%E6%AD%A3%E6%96%872370}

先去查壳一下,发现是64位无壳ELF文件
13503-092i2ycq5evm.png

26940-2huhfpm3k4j.png

可以发现,该程序是通过

     for ( i = 0; i <= 4; ++i )
  {
    v3 = gtable();
    s1 = encode(s1, (__int64)v3);
  }

后,然后用strcmp与一大串加密字符进行比较,若相同则返回Congratulations!。
先点进encode()函数,来看一下逻辑。
可以发现这里是base64加密的逻辑。
64770-xy7khr0ysf.png

传入的V3自然就是base64变表了。进入gtable()来看看变表生成逻辑
30999-3e00jfx1i3j.png

85377-dfowzi0ohop.png
从上图可知。他会先生成v2值(rand()%64说明值应该是在0-63之间),然后从aAbcdefghijklmn表中的第v2位开始一共取64位字符形成base64变表。
最后这种变异加密一共会进行五次。理清楚了逻辑,就可以之间用python写exp了。
68789-ip9bn7c1jg.png

最后结果如下图
28386-26sv8p4w7ri.png

赞(1)
未经允许不得转载:工具盒子 » 第四届长城杯信息安全铁人三项赛逆向题rand5