• 解决uncompyle6反编译报错KeyError


    报错内容:KeyError:'3.11.0' (这个是我自己的Python版本号)

    主要原因就是你的Python版本没在它库文件支持的版本里,我们需要进行手动添加即可。

    首先找到文件:magics.py

    我的是在这个路径下:D:\Python\Lib\site-packages\xdis

    (每个人Python安装位置不一样,不过后面子文件夹应该是一样的)

    打开之后使用快捷键 Ctrl+F 进行关键字搜索:add_canonic_versions

    结果有很多,我们定位到最后一个结果的位置,如下图:

    将自己的Python版本号添加进去,中间使用空格隔开,修改后如下图:

    注意:

    修改好之后Ctrl+S保存

    尝试使用命令 uncompyle6

    依旧报错:

    Error: uncompyle6 requires Python 2.6-3.8

    我们还需要修改另一个文件:uncompile.py

    它的路径大概在:D:\Python\Lib\site-packages\uncompyle6\bin

    打开之后,同样检索关键字:main_bin

    进行添加,我的Python版本是3.11(同样需要注意空格的使用,格式与它一致

    添加后如下图:

    接下来再次尝试使用命令 uncompyle6

    可以看到没有出现报错,而是提示我们需要输入用于反编译的文件

    这里随便用一个正确的pyc文件进行测试:

    (注意 > 的前后都需要有空格隔开)

    可以看到反编译成功,pyc文件被成功反编译为py源码。

    至此,我们解决了uncompyle6反编译报错KeyError的问题。

    这篇文章可以帮助你解决 KeyError:'你的Python版本号' 的报错,解决报错之后你可以正常的进行正确的pyc文件的反编译。

    但是我在反编译自己生成的pyc文件中遇到了另一个报错:

    ImportError: Unknown magic number 3495 in test.pyc

    这是因为pyc文件生成时,头部的magic number被清理,需要我们另外补上。

    但是这个搞起来似乎有点麻烦,我们首先需要找到或者计算自己版本号对应的Magic Number,再对自己的pyc文件进行修复,Python3.3 - Python3.7(包含3.3)版本中,只需要Magic Number和八位时间戳+大小信息,Python3.3 以下的版本中,只有Magic Number和四位时间戳,在Python3.7及以上版本的编译后二进制文件中,头部除了四字节Magic Number,还有四个字节的空位和八个字节的时间戳+大小信息,不过对文件反编译没有影响,但是也需要全部填充为0。

     

    关于这个问题的相关解决方法我将放在下一篇博客,也是在Python专栏,欢迎大家来参考!

  • 相关阅读:
    【Linux】shell命令运行原理---认识Linux基本指令
    仿网易云音乐小程序-uniapp
    移动端项目创建,脚手架,vant3移动开发的UI组件
    【JavaEE网络】TCP套接字编程详解:从概念到实现
    Net6 Configuration & Options 源码分析 Part2 Options 模型使用与源码分析
    成立十周年,亚马逊云科技合作伙伴网络是如何吸引12万家伙伴的?
    CompletableFuture 异步调用,获取返回值
    vite项目运行后只显示主机地址
    【力扣刷题】神奇字符串
    【网络编程】UDP Socket编程
  • 原文地址:https://blog.csdn.net/Myon5/article/details/134536956