Winter
Solstice
点击蓝字 关注我们
前言
Pyinstaller最常⻅的打包库,打包后可以通过Extractor⼯具或者pyinstaller内置的achieve_viewer.py直接解包,使⽤—key参数可以使其具有⼀定 程度的反逆向能⼒,但由于其本⾝是个开源的库,也能找到其加密的原理,所以不是很难逆向
⽆-key参数的逆向
得到可执⾏⽂件,使⽤Extractor⼯具进⾏解包
python pyinstxtractor.py xx.exe
将会得到⼀个⽂件夹,⾥⾯包含主程序所引⽤的所有库以及代码的pyc⽂件。
有-key参数的逆向
逆向前的源码分析
由于Pyinstaller是个开源的包,这也给我们逆向提供了便利
在官⽅给出的⽤法中,有给出-key这个参数,说是可以将⽂件pyc进⾏⼀定的压缩加密,以防⽌被逆向
Pyinstaller这个库本⾝的打包原理⼤概就是先将py编译成pyc,然后部分压缩成pyz,程序再通过对pyc和pyz的调⽤
这个是pyinstaller的打包过程语
可以看到对ctypes的调⽤,pyz的⽣成等等
⽣成之后的build⽂件夹如下
那个Base_Library.zip⾥⾯都是库⽂件的pyc
然后我们在pyinstaller库中找到archieve这么⼀个⽂件夹,⾥⾯有⼀个pyz_crypto.py⽂件,是对pyz⽂件的加密代码
可以看出,他是使⽤的tinyAES库对pyc⽂件进⾏块加密,块⼤⼩为16byte
⽅法⼀:利⽤源码的脚本法
⾸先⽤pyinstxtractor⼯具对⽂件进⾏解包(需软件对应相同的python⼤版本,否则⽆法得到pyz⽂件),得到未被加密的部分pyc⽂件和加密的pyz⽂件,其中之⼀就有archive.pyc,我们可以通过archive.pyc⽂件得到加密过程,crypto_key⽂件得到具体key参数
然后根据主函数pyc反编译内容我们⼜找到了需要找的包
这个时候就只需要按照加密的⽅式进⾏解密就可以了,加密部分为Cipher(脚本来源于archive.pyc的反编译)
解密脚本
原文始发于微信公众号(Th0r安全):针对pyinstaller两个情况的逆向
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论