「dex文件转java文件」dex文件转jar

博主:adminadmin 2022-11-28 01:10:08 88

今天给各位分享dex文件转java文件的知识,其中也会对dex文件转jar进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

classes.dex文件怎样才能转换成java源码求大神赐教

首先将classes.dex文件转成

jar文件,

这里可以使用dex2jar

这个工具

然后用jd-gui这个工具将jar包中的class反编译成

java文件

由于现在答题不能直接上传文件了

我已经把dex用变成jar,再用gui把jar给导出成java文件,也改完java文件了,请问如何

这是我个人的想法:

360浏览器是基于IE以及Chrome核心做的浏览器

就是所谓的双核浏览器

但是双核浏览器有这个必要么?根本就没有!

下面给你的解决方案:

1、清除所有的360历史缓存神马的(Flash Crash的导致原因很有可能是Flash下载文件不完全的缘故,所以要做下这个)

2、直接安装Chrome浏览器(在网上搜吧,国产浏览器除了手机的U9以外,核心都是用IE的或者Chrome的,技术上来说双核无必要,甚至说双核会拖慢速度!)Chrome核心本身自带AdobeFlashPlayer,无需安装;

3、直接 采用IE浏览器,把IE更新到最佳状态:现在的IE11我个人感觉 的确很快0.0

4、采用Opera浏览器:核心 为Opera自己的核心,不过现在好像也用的是Chrome的webkit?大概就是这样

PS:

现在浏览器的内核引擎,基本上是四分天下:

Trident: IE 以Trident 作为内核引擎;

Gecko: Firefox 是基于 Gecko 开发;

WebKit: Safari, Google Chrome,傲游3 基于 Webkit 开发。

Presto: Opera的内核,但由于市场选择问题,主要应用在手机平台--Opera mini

注:2013年2月Opera宣布转向WebKit引擎

注:2013年4月Opera宣布放弃WEBKIT,跟随GOOGLE的新开发的blink引擎

当然是完全的可以

安卓反编译dex生成samil文件夹,怎么转换成src文件夹的java格式

Android_complier这种反编译工具直接可以把apk包反编译(产生的文件夹里会有classes.dex.dex2jar.jar这个文件,用jd-gui这个工具查看代码即可),如果没有的话用dex2jar工具的命令在命令行里把编译后的文件夹里的classes.dex文件编成classes.dex.dex2jar.jar,注意写正确classes.dex的路径

【理论知识】Dex文件结构分析

Dex文件就是Dalvik可执行文件,实际上它就是一个优化后的java字节码文件,因此构造这类文件需要先写个java文件

Pino.java

然后编译

之后得到了Pino.class文件,之后我们用dx工具,该工具需要安装Android SDK才能有的工具

这样就得到了一个dex文件了,之后我们利用010editor工具来进行分析。

那我们从头开始分析

首先,我们来看一下Dex文件头的结构体

这里stringIdSize的值为0E,10进制就是14,也就是说这个dex文件的字符串的个数为14个,文件偏移是70,我们到70的位置看一下

蓝色部分就是DexStringId的内容了,每个字符串4字节,总共14个,我们先看一下第一组“76 01 00 00”,这个值并不是字符串的具体内容,而是字符串所在位置的文件偏移,我们去看一下176h这个位置

蓝色部分我一共选中了8个字节,其中第一个字节06代表的是之后多少个字节属于字符串,也就是“3C 69 6E 69 74 3E”,而最后一个字节的00其实是字符串结尾的空字节,但是计数的时候并没有算上而已,总结一下这个dex文件中所有的字符串如下:

先看一下第一个4字节的值“02 00 00 00 ”,对照之前我们整理的字符串的表格,就是LPino;即Pino类型的,整理一下所有的类型,如下

这里数量就是3,位置偏移为C4,跟过去看下

蓝色选中的部分就是所有的方法原型的结构了,这里又涉及到了一个新的数据结构

这三个属性分别是第一个是方法声明的字符串,第二个是方法的返回类型,第三个是方法的参数列表,其中DexTypeList是新的数据结构

回过头来看一下蓝色部分,12个字节,第一个4字节为8,说明DexStringId列表的索引是8,也就是V,第二个4字节是5,也就是V,最后一个是0,也就是没有参数,第一个方法就是void (),整理一下其他的如下:

也就是一个DexFieldId是8个字节

classIdx的值是4,也就是Ljava/lang/System;,typeIdx的值是1,也就是Ljava/io/PrintStream;,nameIdx的值是C,也就是out,总结一下字段如下:

也就是说每个DexMethodId占8个字节,第一个8字节中的classIdx的值是0,也就是LPino;,protoIdx的值也是0,也就是void(),第三nameIdx也是0,也就是init,综合起来就是void Pino.init(),整理一下所有的方法如下:

上面的数据结构28个字节,内容的话看注释也能看懂,我们直接上实例,在这里,classIdx是1,也就是LPino;,第二个accessFlags是1,也就是public,第三个superclassIdx是2,也就是父类是java.lang.Object,第四个interfacesOff是0,就是没有,第五个是sourceFileIdx是7,也就是Pino.java,第六个是annotationOff,是0,没有,第七个classData是22D,也就是DexClassData的偏移是22D,我们先来看看DexClassData的结构体

这里面又涉及到了其他三种结构体

这里需要注意的一点的就是这里的u4并不是值4字节,而是值uleb128的类型,具体是什么可以自行百度。

现在我们再去22D的位置看看

从这里可以判断姿态字段0个,实例字段0个,直接方法2个,虚方法0个。因为staticFields和instanceFields都是0个,所以直接从directMethods来看了,methodIdx为0,也就是void Pino.init(),accessFlags的值为“81 80 04”,这个是uleb128编码的,转换为16进制的话就是10001h,对照一下DexFile.h文件,知道方法是ACC_PUBLIC和ACC_CONSTRUCTOR

dex文件转java文件的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于dex文件转jar、dex文件转java文件的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-28,除非注明,否则均为首码项目网原创文章,转载请注明出处。