前言
记录一道PwnTheBox逆向题,原题是2018QCTF-re-asong
一、代码分析
题目一共给了3个附件,IDA打开函数后发现函数不多,但是总体逻辑并不那么简单,还是有些很绕的地方:
一开始非常绕的地方是那个词频统计的地方,这里看到v4的生成与输入无关,就想着动态调试看看v4是什么,猜测v4是个列表,因为后面看到了对v4取列表元素的操作,但是又没理解这个怎么样的列表,后面看了WP,明白了词频统计的过程:
这里我们可以看到按字节读取文件中的内容,经过sub_400936,算出一个数v2,然后a2[v2]++,那么这个v2是什么呢:
不同的字符对应a2中不同的索引位置,一旦读取的是某个字符,就在其对应的位置上加1,其中索引0-9对应数字0-9,10-35对应大小写字母,这里统计不区分大小写,后面是些特殊字符,到这里就明白了为什么是词频统计了。
这里是对flag的一个格式验证
这里是加密输出部分,相对来说逻辑还是能看懂的,复杂一点的地方就是打乱顺序的部分:
这里是按照dword_6020a0中的内容,对a1进行重新排列,可以建立一个字典关系,逆起来就清晰了
二、代码示例
看来看去还是官方WP写的最有灵性:
#!/usr/bin/python3
# -*- coding:utf-8 -*-
s = [22, 0, 6, 2, 30, 24, 9, 1, 21, 7, 18, 10,</