dex2jar 报错 com.googlecode.d2j.DexException: not support version

这篇具有很好参考价值的文章主要介绍了dex2jar 报错 com.googlecode.d2j.DexException: not support version。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一.问题发现

二.调查原因:

三. 根本原因调查:

四.解决问题


一.问题发现

使用dex2jar工具反编的时候,一输入指令,结果报com.googlecode.d2j.DexException: not support version错误(如下图)

dex2jar 报错,android,反编译,报错,逆向,dex2jar

                                                                 异常情况.png

二.调查原因:

谷歌对dex文件的介绍:常量数组/字符串 DEX_FILE_MAGIC 是字节列表,这类字节必须出现在 .dex 文件的开头,以便系统将其原样识别。该值会特意包含一个换行符("\n"0x0a)和空字节("\0"0x00),以便协助检测某些形式的损坏问题。该值还可以将格式版本号编码为 3 个十进制数字;随着格式的演变,预计该值会单调递增。

注意:Android 9.0 版本中新增了对 039 版格式的支持,其中引入了两个新字节码 const-method-handleconst-method-type。(字节码集合的总结表中介绍了这些字节码。)在 Android 10 中,版本 039 扩展了 DEX 文件格式,以包含仅适用于启动类路径上的 DEX 文件的隐藏 API 信息。

注意:Android 8.0 版本中新增了对 038 版格式的支持。038 版本中添加了新字节码(invoke-polymorphicinvoke-custom)和用于方法句柄的数据。

注意:Android 7.0 版本中新增了对 037 版格式的支持。在 037 版本之前,大多数 Android 版本都使用过 035 版格式。035 版与 037 版之间的唯一区别是,是否添加默认方法以及是否调整 invoke

简单地说:就是Android Studio中配置的minSdkVersion参数对应的系统版本是多少,dex文件头就会是多少

例如:minSdkVersion配置成24(对应7.0的系统),编译出来的dex头为037版本(使用notepad++打开dex文件就可以看到)

android {
    ......
    defaultConfig {
        ......
        minSdkVersion 24
        ......
    }

dex2jar 报错,android,反编译,报错,逆向,dex2jar

 

                                                        编译出来的dex文件.png

三. 根本原因调查:

​ 其实看了调查三就已经有方案了,就是修改dex文件中的版本信息就可以。但是不知道根本原因心里不甘心,继续调查。

​ 根据报错信息看:com.googlecode.d2j.reader.DexFileReader.<init>(DexFileReader.java:151)

​ 猜测是reader.DexFileReader的构造方法中报出来的错误,打开dex2jar-2.0\lib目录,将dex-reader-2.0.jar或者dex-reader-api-2.0.jar丢进jd-gui工具中看看源码如下:

// 构造方法中找到报错点
public DexFileReader(ByteBuffer in){
        ......
        int version = in.getInt() & 0xFFFFFF;
        if ((version != 3486512) && (version != 3552048)) {
          throw new DexException("not support version.");
        }
        skip(in, 32);
        ......
    }
    .....
}

// 支持的版本定义
private static final int MAGIC_035 = 3486512;
private static final int MAGIC_036 = 3552048;

dex2jar 报错,android,反编译,报错,逆向,dex2jar

 

意味着dex2jar-2.0工具只支持035和036版本协议!!!

四.解决问题

​ 使用notepad++文件浏览工具(任何能打开文件的工具都可以,例如记事本...)打开dex文件,修改版本信息037为036或者035,然后保存文件即可,再使用反编指令:d2j-dex2jar.bat classes.dex 反编即可成功。

                                                        修改dex版本信息后.png

dex2jar 报错,android,反编译,报错,逆向,dex2jar

 

                                                正常获得jar包.png


 文章来源地址https://www.toymoban.com/news/detail-640553.html

到了这里,关于dex2jar 报错 com.googlecode.d2j.DexException: not support version的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • pom依赖报错com.mysql:mysql-connector-j:jar:unknown was not found

    springboot项目导入了mysql驱动的依赖时报错:com.mysql:mysql-connector-j:jar:unknown was not found 报错:com.mysql:mysql-connector-j:jar:unknown was not found

    2024年02月12日
    浏览(41)
  • jadx 支持 Windows、Linux、 macOS,能够帮我们打开.apk, .dex, .jar,.zip等格式的文件

    作者:JavaGuide 链接:https://www.zhihu.com/question/20264247/answer/2306405289 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。   jadx 是一款功能强大的反编译工具,使用起来简单方便(拖拽式操作),不光提供了命令行程序,还提供了 GUI 程序。

    2024年02月07日
    浏览(31)
  • pom文件中,mysql依赖报错:mysql:mysql-connector-java:jar:unknown was not found in http://maven.aliyun.com/nex

    spring项目导入sql依赖时报错:mysql:mysql-connector-java:jar:unknown was not found in http://maven.aliyun.com/nexus/content/reposi… 最好添加mysql版本号 报错消失 一定记得刷新

    2024年02月11日
    浏览(70)
  • 关于安装李沐深度学习d2l包报错的解决办法(保姆教程)

    因为换了新电脑,所以环境都是从零开始配置,但是在安装李沐深度学习里常用的d2l包的时候,确实频繁报错。 这里总结一下我的报错原因,希望大家在遇到bug的时候能够从容面对。 在安装深度学习框架之前,请先检查你的计算机上是否有可用的GPU。 例如,你可以查看计算

    2024年02月03日
    浏览(40)
  • 逐步解决Could not find artifact com:ojdbc8:jar:12

    Could not find artifact com:ojdbc8:jar:12 in central (https://repo.maven.apache.org/maven2) 原因: ojdbc8:jar:12 属于Oracle 数据库链接的一个程序集,缺失的话很有可能会影响数据库链接,蝴蝶效应产生不可预测的BUG!但是版权问题,Maven已经不能从自己的云库中加载了。都需要单独手动安装! JD

    2024年02月07日
    浏览(38)
  • C语言-报错集锦-02-munmap_chunk(): invalid pointer: 0x0000000001d2e150 ***

    我在原有正常代码的基础上添加了一段逻辑,再跑,在释放内存时,出现了上述错误。 查看网上的这个错误解释:程序试图释放一个无效的内存地址。会出现此错误。 看完还是一脸懵。 看上图中的报错处,看不出什么问题,因为在加新逻辑之前是正常销毁的,这时想到报错

    2024年02月16日
    浏览(31)
  • 关于com.baomidou:mybatis-plus-boot-starter:jar:unknown was not found解决办法

    原型 修改以后解决了

    2024年02月11日
    浏览(30)
  • 解决启动jar包报错 错误 找不到或无法加载主类 jar

    错误: 找不到或无法加载主类 jar 问题描述: 在使用springboot框架对项目打包后,手动使用命令java -jar 包名启动jar包,报错:错误: 找不到或无法加载主类 jar。 网上找了各办法,都是加maven插件,打成可执行jar包 但是没有用,仍然报错,然后尝试更换jdk执行,从11改成8 执行成

    2024年02月06日
    浏览(40)
  • 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.sun.com/jsp/jstl/core]

    这是我在学习 JSTL 时产生的错误。 没有使用 Maven 。 是手动引入 JSTL 包(jstl.jar 和 standard.jar)。在请求转发到 .jsp 界面,再没有使用 JSTL 语句前是通的,使用 JSTL 后就会报错。 org.apache.jasper.JasperException: 无法在web.xml或使用此应用程序部署的jar文件中解析绝对uri:[http://java.

    2023年04月08日
    浏览(35)
  • Flink UI部署jar包报错

    错误描述: 通过Flink的UI中的Submit New Job菜单添加jar包的时候提示报错。报错信息的是“The LocalStreamEnvironment cannot be used when submitting a program through a client, or running in a TestEnvironment context”,最关键的是“LocalStreamEnvironment”。 我的Flink服务是单机版启动。 问题原因就是以

    2023年04月24日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包