第五空间-2021-StrangeLanguage
(py打包+brainfuck语言+bf反编译+异或)
我们拿到这道题,看这个图标我们就可以知道,就是PY打包的。
我们使用 pyinstxtractor.py 将其解包
可以得到如图的文件夹
将其反编译
网上找一个pyc反编译网站
我们可以看到,这里调用了brainfuck.main,这个文件,我们去我们刚刚解包的地方,寻找这个文件分析即可
我们可以发现有一个pyd的文件,什么是pyd文件呢?简单来说就是py的dll文件,动态链接库,也就是说,我们也可以ida进行分析。
这里我需要厘清的概念
[原创]python编译后的pyd爆破-软件逆向-看雪-安全社区|安全招聘|kanxue.com
- py: python 脚本文件(source code)
- pyc: 脚本文件编译得到的字节码, 二进制文件,python文件经过编译器编译之后的文件。可以提高文件加载速度。(py的汇编)
- pyo: 脚本文件开启优化编译选项(-O)编译得到的字节码,二进制文件,优化编译后的文件。可以通过python -O file.py生成。
- pyd: 基本的Windows DLL文件,python的动态链接库。
我们将pyd文件放入ida进行分析
我们查看字符串可以发现了一个一长串的字符串
我们去网上搜索后可以发现,这个就是我们的bf语言。
然后我们可以到github上拉取一个项目
https://github.com/eterevsky/bfc
去把这个下载进入ubuntu中,cd 进文件夹,然后执行make命令即可将其编译成elf文件
编译成elf文件之后,将前面的bf,代码保存在一个.bf文件中,我的是1.bf.
同文件夹下我们执行以下命令
1 | ./bfc 1.bf 1.c //将我们的bf文件转换为c语言 |
然后分析我们的文件
我们可以发现输出字符串,有两个no,第一个不难猜出为判断长度。
放入ida,我们可以发现我们的密文,动调将其调试出来
通过调试,我们可以知道,flag的总长度为38位,去除flag{},就为32位,确实能和我们上面提出的来的数据长度吻合,然后我们对其进行黑盒分析,输入数据,输出来观察,我们可以发现是进行了异或运算。而且是前一位异或了后一位。我们由此写出脚本即可
1 |
|
可以得出 flag{d78b6f30225cdc811adfe8d4e7c9fd34}
评论