解决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专栏,欢迎大家来参考!

  • 20
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 14
    评论
### 回答1: 反编译报错“cannot find module c”是指在进行反编译操作时,发现无法找到模块c所在的位置或文件。这可能是因为模块c在反编译的目标代码中不存在、路径错误或者文件损坏等原因导致的。 首先,我们需要确认是否确实存在模块c。可以检查一下原始代码或者项目结构,确保模块c的正确性。 其次,需要确认模块c所在的路径是否正确。反编译工具通常会根据编译后的目标代码结构进行反向解析,因此需要确保模块c的路径与编译后代码的路径一致。 另外,如果模块c的文件损坏或者被删除,也会导致无法找到该模块。此时可以尝试重新获取或者修复该模块的文件。 此外,还可以尝试使用其他反编译工具,或者更新当前使用的反编译工具版本,以查看是否能够解决该问题。 总之,反编译报错“cannot find module c”通常是由于模块c不存在、路径错误或者文件损坏等原因导致的。我们可以通过确认模块是否存在、路径是否正确,修复损坏的文件或者尝试其他反编译工具来解决这个问题。 ### 回答2: 反编译器出现"cannot find module c"报错的原因可能是无法找到与模块c相关的文件或代码。这种错误通常发生在以下几种情况下: 1. 编译器可能无法在给定的路径或文件中找到模块c的定义。这可能是由于路径设置或文件结构错误导致的。请检查编译器配置,并确保所有相关文件都可以访问和找到。 2. 在反编译过程中,模块c的依赖关系可能没有被正确地解析或加载。这可能是由于依赖关系文件丢失或错误配置的原因。您可以检查并确保所有的依赖关系文件都能被正确地解析和加载。 3. 可能存在与模块c相关的语法错误或代码问题。在反编译过程中,编译器可能无法正确地解析或识别模块c中的某些语法或代码结构,导致报错。您可以检查模块c的代码,并确保其语法正确,并符合反编译器的要求。 综上所述,当遇到反编译报错"cannot find module c"时,您可以检查路径设置、依赖关系和代码语法等方面,以找到并解决问题。如果问题仍然存在,您可能需要进一步分析错误提示,并可能需要求助于相应的技术支持或开发人员来解决该问题。 ### 回答3: 当出现反编译报错 "cannot find module c" 的错误提示时,通常意味着在反编译的过程中无法找到模块"c"。 要解决这个问题,我们可以尝试以下几个步骤: 1. 首先,检查源代码中是否确实存在模块"c"。可能是因为代码中并没有导入或定义模块"c",导致无法找到该模块。如果确实没有这个模块,您可以尝试修改您的反编译策略或者检查您的反编译工具的设置。 2. 确保在反编译之前,您已经正确地配置了所需的依赖项。这可能包括缺失的库文件、第三方模块或其他被"C"模块所依赖的组件。 如果反编译工具无法访问到这些依赖项,就会出现找不到模块"c"的错误。 3. 如果确定模块"c"是存在且可用的,那么可能是反编译工具出现了问题。您可以尝试使用其他反编译工具进行尝试。如果问题依然存在,可能需要升级反编译工具或在反编译工具的官方论坛或支持渠道上获取进一步的帮助。 综上所述,反编译报错 "cannot find module c" 是由于无法找到模块"c"导致的问题。通过确认源代码是否存在该模块、检查依赖项以及尝试其他反编译工具,可以解决此问题。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Myon⁶

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

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

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

打赏作者

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

抵扣说明:

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

余额充值