Python可执⾏⽂件反编译教程(exe转py)
python的便利性,使得如今许多软件开发者、⿊客都开始使⽤python打包成exe的⽅式进⾏程序的发布,这类exe有个特点,就是可以使⽤反编译的⽅法得到程序的源码,是不是很神奇?我们接下来就开始学习如何反编译有python打包成的exe程序吧。PS:下⾯介绍的是使⽤⽐较⼴泛的pyinstaller的反编译⽅法。
下⾯是⼀个由pyinstaller打包的病毒,我们通过其图标,就可以知道它是pyinstaller打包的。
输⼊命令:python pyinstxtractor.py [filename] ,即可完成转换。PS:python要使⽤相对应的版本。
解压成功后,同路径下会出现⼀个[filename]_extracted的⽂件夹,这⾥⾯就包含了主程序lockyfud,我们要反编译的就是这个⽂件,其他的都是依赖库,如out00-PYZ-extracted⽂件夹⾥的都是库⽂件,我们不必关⼼。我们这时可能会纳闷,为什么该⽂件不是.pyc⽂件?这可能是pyinstxtractor的⼀点不⾜,
转换出来的主程序格式不对,我们还需要对其进⾏⼿动修复。
我们需要在该⽂件起始位置加上8个字节的pyc头,由4字节的magic和4字节的时间戳组成,其中magic会因为python版本的不同⽽不同,那我们怎么知道是啥呢?有个技巧就是,查看struct⽂件的magic,直接复制过去。
添加完pyc头之后是这样的,新增了magic和时间戳:03 F3 0D 0A 00 00 00 00,然后保存为.pyc⽂件后,就完成修复了。
最后的⼯作就是将pyc反编译成py了,这⾥使⽤uncompyle6,使⽤命令:pip install uncompyle6,即可完成安装。然后输⼊uncompyle6 [filename] > lock.py,将⽂件反编译成py。
python怎么读文件夹下的文件夹
lock.py⾥的就是程序源码了。
这⾥补充⼀点,有些病毒程序,为了避免被反编译,会进⾏⼀些混淆,使得pyinstxtractor转换出错。如下这个⽂件,使⽤pyinstxtractor.py进⾏转换时会报错,“Error : Unsupported pyinstaller version or not a pyinstaller archive”,意思就是说这不是⼀个pyinstaller打包的⽂件。
它就是个py可执⾏⽂件呀,怎么会说不是⼀个pyinstaller打包程序呢?那就从这问题⼊⼿呗,看看为什么会出现这个错误。
来到pyinstxtractor代码的第50⾏,原来代码逻辑是这样的,⼀旦读取不到MAGIC,就会报错,提⽰不是pyinstaller打包程序。
⽹上追溯,可以看到标识MAGIC为 ‘ MEI xxxxx ',2.0版本的MAGIC位于 [end - 24] 处,2.1版本的MAGIC位于 [end - 88] 处。
⽽当我们查看⽂件的⼆进制时,发现⽂件末尾都是些垃圾数据,根本没有 ‘MEI' 标识。