• 如何反编译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,反编译就讲到这里。

  • 相关阅读:
    在X++中使用IoC/DI模式应对不断变化的客户需求
    Predicate<T>与Func<T, bool>泛型委托
    Windows Live Writer插件:在WLW中插入语法高亮代码
    学习C#和.NET的资源
    C#中事件的动态调用
    2008年全国软件工程大会论文集
    C#基础:接口(二)
    【转载】"变化"、"复用"、"抽象"、"稳定" 影响着软件设计模式,架构,开发方法
    【领域驱动设计】.NET实践:实体、值对象和数据传输对象
    RSS订阅之基本使用
  • 原文地址:https://www.cnblogs.com/smart-zihan/p/14434498.html
Copyright © 2020-2023  润新知