zoukankan      html  css  js  c++  java
  • 如何反编译Python写的exe到py

    参考链接:

    https://blog.csdn.net/qq_44198436/article/details/97314626?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

    https://www.cnblogs.com/pcat/p/8990482.html

    https://www.cnblogs.com/pcat/p/11625300.html

    准备工作:

    1. 下载pyinstxtractor.py(百度上搜):https://github.com/extremecoders-re/pyinstxtractor

    2. 安装uncompyle6: pip install uncompyle6

    3. 下载16进制编辑器:https://www.jb51.net/softs/557257.html#downintro2

    为了验证效果,接下来从创建py开始一步步看结果。

    第一步:自己写一个py打包成exe -- target_exe.py(简单的两数相加)

    #!/usr/bin/env python
    # _*_ coding: UTF-8 _*_
    """=================================================
    @Project -> File    : Python-20210127 -> target_exe.py.py
    @IDE     : PyCharm
    @Author  : Aimee
    @Date    : 2021/2/23 8:57
    @Desc    :
    ================================================="""
    import sys
    
    
    def main():
        print("target_exe started")  # main()函数开始了
        argc = len(sys.argv)
        if argc == 3:
            a = int(sys.argv[1])
            b = int(sys.argv[2])
            result = a + b  # 两数相加
            print("a + b =", result)
            if a < 0 or a > 100:  # 对a的作用域进行判断
                print("a is not in [0, 100]")
            if a > 0 and b > 0:
                print("a and b >0")
    
    
    if __name__ == '__main__':
        main()
    View Code

    target_exe.py->target_exe.exe

    pyinstaller -F target_exe.py

    将target_exe.py重命名为target_exe_origin.py

    第二步:解压exe

    将pyinstxtractor.py放在与exe同级目录下,运行

    python pyinstxtractor.py target_exe.exe

    会在当前目录生成一个target_exe.exe_extracted文件夹,里面会有一些没有后缀的文件名,target_exe就是我们需要进行反编译的文件。在正向编译过程中,生成的pyc会把python版本信息和时间戳去掉,但是反编译的时候我们需要将其补齐。

    注意到在target_exe.exe_extracted还存在一个没有后缀名的文件struct,用16进制编辑器打开struct和target_exe文件。

    两个文件都有E3,可以看到struct在E3的前面还有一段,应该就是Python版本和时间戳了,将前面一段复制到target_exe中,直接在16进制编辑器里面复制就好了。

    保存,然后重命名target_exe为target_exe.pyc。 

    第三步:反编译pyc文件,得到target_exe.py

    uncompyle6 -o target_exe.py target_exe.pyc

    得到target_exe.py,那么现在将得到的target_exe.py和原本写的target_exe_origin.py进行对比,看看结果

    可以发现,注释没有了,双引号变单引号,if-and变成两个if,功能没啥变化。

    OK,反编译就讲到这里。

  • 相关阅读:
    Cucumber 入门【转】
    unable to find instrumentation target package
    【转】fiddler 请求配置https后出现“你的连接不是私密连接。。。”,处理过程
    DirBuster工具扫描敏感文件
    pycharm常用快捷键
    读取 ini 配置文件
    TypeError: a bytes-like object is required, not 'str'
    日期控件定位处理
    pywin32模块安装
    python:os.path模块常用方法
  • 原文地址:https://www.cnblogs.com/smart-zihan/p/14434498.html
Copyright © 2011-2022 走看看