python逆向实战:反编译pyinstaller打包生成的exe

python逆向实战:反编译pyinstaller打包生成的exe

  1. 今天要逆向的软件叫you-dl.exe,它是一个pyinstaller生成的exe,它原本的名字和图标因为版权问题不能放出来了
    image

  2. 首先下载pyinstxtractor.py,github可下,然后在运行pyinstxtractor.py you-dl.exe(记得下pyhton)指令.

image

​ 为了避免被反编译,会进行一些混淆,使得pyinstxtractor转换出错。如下这个文件,使用pyinstxtractor.py进行转换时会报错,“Error : Unsupported pyinstaller version or not a pyinstaller archive”,意思就是说这不是一个pyinstaller打包的文件。

  1. 查看pyinstxtractor源码发现它会在文件末尾检测有没有MAGIC字段,没有找到就会报错

image

​ 往上追溯,可以看到标识MAGIC为 MEI\xxxxxx ,2.0版本的MAGIC位于 [end - 24] 处,2.1版本的MAGIC位于 [end - 88] 处。

image

​ 而当我们查看文件的二进制时,发现文件末尾都是些垃圾数据,根本没有 ‘MEI’ 标识

image

我们搜索一下,终于在上面的一个位置找到了MAGIC,这个就是pyinstaller标识。接下来就是要把垃圾数据去除掉,使MAGIC位于24或88的位置,那到底是24还是88呢?(该文件是pyinstaller2.0还是pyinstaller2.1打包的),这就得看下2.0和2.1的区别了。与2.0相比,2.1多了64字节的pylibname,那我们就看看该文件里存不存在pylibname。这里找到了python37.dll明显是2.1
image

  1. 我们就删除从’MEI’+88之后的所有垃圾数据。删除后的结果如下:

    image

image

修复后,可以正常转换了

image

  1. 但是我们打开解析后的文件夹you-dl.exe_extracted,发现PYZ-00.pyz_extracted是空的,PYZ-00.pyz_extracted非常重要,一般一个稍微大一点的项目都会分成多个py文件,甚至会依赖其他模块,这些被依赖的文件解析后都会放入PYZ-00.pyz_extracted中,可以说这里放的是核心代码。image

image

  1. 我们查看pyinstxtractor源码,发现它会检测PYZ-00.pyz的4到8个字节是否为MAGIC_NUMBER,而这个变量的值是由python的版本确定的,由第4步可知这个软件是由python3.7解释的

image

image

  1. 我下载了python3.7,使用它运行了pyinstxtractor.py,然后就可以正常解析了

image

image

哈哈,这个软件使用了youtube-dl框架.然后就是反编译pyc文件了,这个使用uncompyle6即可,这个工具网上有很多资料,我就不画蛇添足了。

posted @ 2021-08-09 15:20  乘舟凉  阅读(10503)  评论(0编辑  收藏  举报