2020年「羊城杯」网络安全大赛 Re部分 WriteUp
Re
login
使用 PyInstaller Extractor v2.0把exe进行解包, 在解包指令中发现 Python version: 36, 切换到python3.6环境中
可以看见入口文件为 login.pyc, 使用 uncompyle6 login.pyc解析pyc文件 看到一堆数字, 嗯, 又是方程组, 上z3
看到一堆数字, 嗯, 又是方程组, 上z3
| 1 |  | 
按照 ord(input1[i]) ^ ord(input1[i + 1])进行异或, 反推回input [85, 95, 71, 48, 55, 95, 116, 104, 51, 95, 107, 51, 121, 33], 转换为字符串
| 1 |  | 
easyre
IDA查看整体逻辑, 发现是flag经过 encode_one encode_two encode_three三次编码后变成 EmBmP5Pmn7QcPU4gLYKv5QcMmB3PWHcP5YkPq3=cT6QckkPckoRG, 首先怀疑有base64
 查看 `encode_one`, 看到一个变量 `alphabet`, 对应的 `ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`, 不用怀疑就是 `base64`,
查看 `encode_one`, 看到一个变量 `alphabet`, 对应的 `ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`, 不用怀疑就是 `base64`, 
 
查看 encode_two, 看到4个 strncpy用法, 分析后可画出此图


查看 encode_three, 貌似很复杂的样子, 画出数轴, 分析后画出此图
 
 
先还原 encode_three, 我突然想到这是一一对应的关系, 把这个关系写出来然后生成一张map就行了
| 1 |  | 
还原 encode_two, 参照画的图对原来的字符串进行还原, 最后base64解码
| 1 |  | 
Bytecode
第一次遇到这种题目, Bytecode为python的字节码转换成人类可读的形式, 当smail来读就行, 还原成python脚本
| 1 |  | 
| 1 |  | 
首先分析第一段, 其实根据常识即可知道应该是 GWHT{, 带入后正确
| 1 |  | 
第二段分析, 可知为从第5位开始, 每两位进行某种异或运算, 而且其取值仅和output有关, 和前面和后面无关, 只有两位进行爆破即可
| 1 |  | 
第三段, 又双叒叕是方程组, 这次怎么这么喜欢出方程组, z3直接解
| 1 |  | 
最后拼接一下cfa2b87b3f746a8f0ac5c5963faeff73