zoukankan      html  css  js  c++  java
  • 反编译python打包的exe文件

    目录

    1.前言

    2.使用环境

    3.还原过程

    4.号外

    5.exe文件和所用到的反编译工具 

    6.参考

    7.去签名(补漏)

    前言

    拿到了利用驱动人生进行传播的病毒样本,发现是python打包成的exe文件,经过点波折才搞定。

    使用环境

    Python 3.6.1(网上说python2.7也可)

    还原过程

    首先用IDA进行分析,发现PyInstaller等关键信息,可以确认是利用PyInstaller打包的python文件,所以我们要想办法把python文件dump出来

    根据网上资料资料,我们可以使用pyinstxtractor.py进行反编译,下载回来操作了一波,很开心的发现解不了。。。

    听说去掉签名信息后再使用pyinstxtractor.py可以解开,然后尝试了一下又不行。。。(这里的图没保存)

     

    最后千辛万苦终于找到工具来提取python文件。我们看到前面利用pyinstxtractor.py反编译的错误里有个提示“not a pyinstaller archive”,而用来提取的py脚本叫archive_viewer.py(使用archive_viewer.py要安装PyInstaller,通过pip install pyinstaller即可安装)。

    通过上面那张图可以看到除了一些库文件外,就可以看到“ii”这个文件,我们可以使用archive_viewer.py把它提取出来。这里输入命令“x ii”,然后再输入文件名“ii.pyc”。这里要清楚,即使提取出文件,也首先是pyc格式的文件

    1 #这里是archive_viewer.py可以使用的命令,这里我们用“X”提取文件
    2 U: go Up one level
    3 O <name>: open embedded archive name
    4 X <name>: extract name
    5 Q: quit

    由于用PyInstaller打包后,pyc文件的前8个字节会被抹掉,所以最后要自己添加回去。前四个字节为python编译的版本,后四个字节为时间戳。想要获得编译版本可以查看打包文件里struct的信息,我这里还是提取出struct这个文件

    用编辑工具查看struct文件的前8个字节,把它复制并添加到pyc文件中就可以了

    最后可以搜索pyc在线反编译或者使用工具“Easy Python Decompiler v1.3.2”对pyc文件进行反编译

     

    这里反编译后文件后缀是dis,直接用notepad++打开即可看到源代码(代码里还有base64没弄,这里不是重点就不多说了)

    号外

    这里看了一下别人的文章,pyc的格式简略为,时间戳哪里填零也可以反编译出来

    1 最开始4个字节是一个Maigc int, 标识此pyc的版本信息, 不同的版本的 Magic 都在 Python/import.c 内定义
    2 接下来四个字节还是个int,是pyc产生的时间(TIMESTAMP, 1970.01.01到产生pyc时候的秒数)
    3 接下来是个序列化了的 PyCodeObject(此结构在 Include/code.h 内定义),序列化方法在 Python/marshal.c 内定义

    关于为什么这个exe用pyinstxtractor.py解不开,看到了别人用来对抗反编译的方法,原来被骚到了。。。。。。这里的内容可以看的下面参考“PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译”

    exe文件和所用到的反编译工具 

    反编译工具是在下面参考文章python程序反编译里给的,这里十分感谢和说明一下

    反编译工具:https://pan.baidu.com/s/1IjavH7F0l-jDCcnYIIEWtA

    exe文件:

    链接:https://pan.baidu.com/s/1brGnrfPFU-0sKUw2qMxG9w
    提取码:ftht

    参考

    python程序反编译:https://blog.csdn.net/x947955250/article/details/82777640

    反编译 pyinstaller 产生的可执行文件:http://howiedlut.top/pyinstaller-reverse-engineer/

    PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译:http://www.lizenghai.com/archives/898.html

     pyc文件格式分析:https://kdr2.com/tech/python/pyc-format.html

    去签名(补漏)

    昨天写的时候还不知道是自己操作不行,原来去签名这个方法是可以的(这里感谢同事的帮助)。之前去签名一直用stud_PE这个工具直接把签名抹掉,后来发现这个操作是不对的。首先看一下PyInstaller中的代码,PyInstaller首先会通过读取程序最后的数据进行识别,如果是符合格式的才会进行解析

    用数据编辑软件打开文件,然后搜索关键标志“MEI”,一般在最下面才会找到这个字符,这里我们还要根据是否匹配MAGIC整个结构才可以确定

     

    最后就删除格式之外的数据就可以,这里如何判断格式是pyinstaller2.0(24字节)还是pyinstaller2.1(88字节)?其实我不是很清楚。。。不过我这里主要是24个字节后还没有到python27.dll哪里,所以就用88个字节的。这里有个粗暴的方法就是两种方式都用一下,看那个可以正确反编译出来

    用pyinstaller反编译成功后就可以在目录下找到解压出来的文件夹,打开就会发现关键文件“ii”。这里也需要和之前一样修复头部数据,方法和上面一样。

  • 相关阅读:
    git命令使用方法
    git与svn对比
    浏览器缓存原理
    网络性能优化常用方法
    sass/scss 和 less的区别
    AngularJS和ReactJS对比
    让IE6,7,8支持HTML5新标签的方法
    Retina 屏移动设备 1px解决方案
    HttpClient学习
    国家二字码对照表
  • 原文地址:https://www.cnblogs.com/QKSword/p/10540431.html
Copyright © 2011-2022 走看看