介绍
rctf2019的一道逆向题,上一题的进阶版,但感觉还更简单了。
分析程序
- 输入account,长度为7-16
- 输入password,长度为7-16,每个字符为10-99
- 将account作为key,对一个定值执行转换操作(操作几乎和上一题一样)
- 输入data,长度为0-1024,只允许输入[0-9a-fA-F]
- 对password进行转换操作,数据为data(其中要求date的长度为一个较大的值)
- 将步骤3的结果进行解密,key为步骤5的结果
- 要求解密的结果最后一位小于4
解答方法
由于最后的要求很简单,只要最后一位小于4即可,所以随机一些数,进行爆破即可。
我们的做法是,固定data和password,随机account的值。
脚本
1 | #!/usr/bin/env python2 |
后记
分析基本正确,但是有其他比较优雅的解法。步骤3对定值进行转换的时候,定值的最后一位已经小于4,所以我们只需前后加解密构造一样的密钥即可。也就是构造步骤5的结果和account^0xcc相等即可。