解决uncompyle6反编译报错KeyError

文章讲述了如何处理Python中uncompyle6反编译时遇到的KeyError,涉及到修改magics.py和uncompile.py中的版本信息,以及pyc文件的MagicNumber问题。后续会继续探讨更详细的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报错内容: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专栏,欢迎大家来参考!

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

My6n

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值