将jar文件与dex文件的转换

简介: 引用:http://blog.csdn.net/huigezhang/article/details/6658029 一、dex文件转为jar文件 1.第一篇   Android 反编译资料整理 Made by 李文栋  rayleeya@gmail.

引用:http://blog.csdn.net/huigezhang/article/details/6658029

一、dex文件转为jar文件

1.第一篇

 

Android 反编译资料整理

Made by 李文栋  rayleeya@gmail.com

2010-12-13  Monday 于北京

一、反编译流程图

               

二、工具使用方法(命令)

准备工作

假设我的工作目录为 $AndroidDecompile,首先要将system.img中(或者说从源码中编译好的)几个重要的odex文件拷贝到工作目录中,他们是:core.odex, ext.odex, framework.odex, android.policy.odex, services.odex(也可以放在别的目录,通过设置BOOTCLASSPATH指定,默认就是当前目录,关于BOOTCLASSPATH请参考baksmali的帮助信息)。

 

下载以下工具到 $AndroidDecompile中:

Baksmali :

http://code.google.com/p/smali/downloads/list

 

Smali :

http://code.google.com/p/smali/downloads/list

 

Dex2jar :

http://code.google.com/p/dex2jar/downloads/list

 


 

AutoSign :

http://d.download.csdn.net/down/2768910/fjfdszj

 

Apktool

http://code.google.com/p/android-apktool/downloads/list

 

假设我们有一个应用,它的类文件编译后被单独拿了出来,即有两个文件app.apk和app.odex,把他们放在$AndroidDecompile下。

 

1. 使用 baksmali.jar 将 odex 文件分解为 smali 文件

$ java –jar baksmali-1.2.5.jar –x app.odex

如果成功的话,会在 $AndroidDecompile下生成一个 out目录,里面是一些以“.smali”为后缀名的文件,在此不深究这些文件的作用。

 

2. 使用 smali.jar将 out/目录下的smali文件转换为 classes.dex

$ java -Xmx512M –jar smali-1.2.5.jar out –o classes.dex

classes.dex便是Dalvik VM所使用的编译后的类文件格式,在正常的apk文件里都会有。

 

3. 使用 dex2jar将classes.dex反编译为jar文件

将下载后的dex2jar压缩包解压后,里面会有dex2jar.sh(和dex2jar.bat)文件,假如classes.dex文件与dex2jar.sh在同一目录下,使用以下方式将classes.dex反编译为jar文件:

$dex2jar.sh classes.dex

如果执行成功,则会在当前目录下生成反编译后的文件classes.dex.dex2jar.jar。

dex2jar即可以操作dex文件,也可以直接操作apk文件,它的使用规则为:

dex2jar file1.dexORapk file2.dexORapk ...

 

4. 使用JD-GUI查看反编译后的jar文件

JD-GUI是一个可视化的Java反编译代码查看器,它可以实时的将class文件反编译成java文件进行查看。解压下载的jd-gui文件,执行目录中的jd-gui可执行文件启动,然后加载上一步中反编译好的classes.dex.dex2jar.jar文件即可。

 

5. 将从odex反编译后的classes.dex与其他资源文件重新打包成一个完整的apk

以上我们假设的情况是应用程序编译后的类文件从apk文件中被剥离出来,下面要做的是如何将上述步骤中得到的classes.dex与apk中的其他文件重新打包成一个可用的apk。

首先将反编译后的classes.dex和原先的app.apk(不含classes.dex)重新压缩成一个完整的app.apk(apk文件可用压缩工具打开),也就是说将classes.dex放进app.apk中。

将下载的AutoSign文件解压,可以看到有signapk.jar(还有个Sign.bat)文件,执行以下命令给app.apk文件签名,就可以生成一个可以运行的apk文件了。

$ java -jar signapk.jar testkey.x509.pem testkey.pk8 app.apk app_signed.apk

 

6. apktool的使用

网上还有个工具是apktool,可以对apk进行解析,反编译资源文件,并将类文件解析成smali文件;同时还可以将解析后的文件重新打包成apk。功能和以上介绍的几个工具类似,它的使用方法如下:

apktool d app.apk and    反编译 app.apk到文件夹and

apktool b app                从文件夹app重建APK,输出到ABC\dist\out.apk

具体的使用方法在此不再赘述,请参考官方网站

 

7. 我的 $AndroidDecompile目录下的文件的截图

 

 

三、一些工具的帮助信息

1. baksmali 的帮助信息

usage: java -jar baksmali.jar [options]

disassembles and/or dumps a dex file

-?,--help                                 Prints the help message then exits.

-b,--no-debug-info                         Specify twice for debug options

                          don't write out debug info (.local,

                                          .param, .line, etc.)

-c,--bootclasspath       The bootclasspath jars to use, for

                                          analysis. Defaults to

                                          core.jar:ext.jar:framework.jar:andro

                                          id.policy.jar:services.jar. If the

                                          value begins with a :, it will be

                                          appended to the default

                                          bootclasspath instead of replacing it

-d,--bootclasspath-dir                 The base folder to look for the

                                          bootclasspath files in. Defaults to

                                          the current directory

-f,--code-offsets                           Add comments to the disassembly

                                          containing the code offset for each address

-l,--use-locals                             Output the .locals directive with

                                          the number of non-parameter

                                          registers, rather than the .register

-o,--output                          Directive with the total number of  register

                                          the directory where the disassembled

                                          files will be placed. The default is out

-p,--no-parameter-registers                  Use the v syntax instead of the

                                          p syntax for registers mapped to

                                          method parameters

-r,--register-info   Print the specificed type(s) of

                                          register information for each

                                          instruction. "ARGS,DEST" is the

                                          default if no types are specified.

                                          Valid values are:

                                          ALL: all pre- and post-instruction registers.

                                          ALLPRE: all pre-instruction registers

                                          ALLPOST: all post-instruction registers

                                          ARGS: any pre-instruction registers

                                              used as arguments to the instruction

                                          DEST: the post-instruction

                                              destination register, if any

                                          MERGE: Any pre-instruction register

                                              has been merged from more than 1

                                              different post-instruction register

                                              from its predecessors

                                          FULLMERGE: For each register that

                                            would be printed by MERGE, also show

                                            the incoming register types that

                                            were merged

-s,--sequential-labels                       Create label names using a

                                          sequential numbering scheme per

                                          label type, rather than using the

                                          bytecode address

-v,--version                               Prints the version then exits

-x,--deodex                               Deodex the given odex file. This

                                          option is ignored if the input file

                                          is not an odex file

 

2. smali 的帮助信息

usage: java -jar smali.jar [options] [--] [|folder]*

assembles a set of smali files into a dex file

-?,--help            prints the help message then exits. Specify twice for

                     debug options

-o,--output    the name of the dex file that will be written. The default

                     is out.dex

-v,--version         prints the version then exits

 

3. auto-sign 的帮助信息

SignApk.jar is a tool included with the Android platform source bundle.

testkey.pk8 is the private key that is compatible with the recovery image included in this zip file

testkey.x509.pem is the corresponding certificate/public key

 

Usage:

java -jar signapk.jar testkey.x509.pem testkey.pk8 update.zip update_signed.zip

 

4. apktool 的帮助信息

Apktool v1.3.2 - a tool for reengineering Android apk files

Copyright 2010 Ryszard Wi?niewski

Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0)

 

Usage: apktool [-v|--verbose] COMMAND [...]

 

COMMANDs are:

 

   d[ecode] [OPTS]  []

       Decode  to .

 

       OPTS:

 

       -s, --no-src

           Do not decode sources.

       -r, --no-res

           Do not decode resources.

       -d, --debug

           Decode in debug mode. Check project page for more info.

       -f, --force

           Force delete destination directory.

       -t , --frame-tag

           Try to use framework files tagged by .

       --keep-broken-res

           Use if there was an error and some resources were dropped, e.g.:

           "Invalid config flags detected. Dropping resources", but you

           want to decode them anyway, even with errors. You will have to

           fix them manually before building.

   b[uild] [OPTS] [] []

       Build an apk from already decoded application located in .

 

       It will automatically detect, whether files was changed and perform

       needed steps only.

 

       If you omit  then current directory will be used.

       If you omit  then /dist/

       will be used.

 

       OPTS:

 

       -f, --force-all

           Skip changes detection and build all files.

       -d, --debug

           Build in debug mode. Check project page for more info.

 

   if|install-framework  []

       Install framework file to your system.

For additional info, see: http://code.google.com/p/android-apktool/

 

四、参考资料

1. Smali

http://code.google.com/p/smali/


 

2. ApkTool

http://code.google.com/p/android-apktool/


 

 

二、jar文件转为dex文件

1.第一篇

可以通过dx工具将jar包中所有的类打包编译为一个名为classes.dex的文件,然后通过aapt工具将classes.dex文件重新添加到你的jar包中。命令格式为dx --dex --output=classes.dex destination.jar
aapt add destionation.jar classes.dex。这两个工具都在android sdk目录中的platform/tools目录中,可提前将目录加到环境变量中,方便执行。另外这两个命令其实是个脚本文件,在linux下执行的时候别忘了加上路径,如:./dx or ./aapt,否则提示无法找到命令,或者将tools加入环境变量,就可以不用加路径标识了。具体的dx工具使用参数可在linux的命令行终端下输入dx查询。

相关文章
|
7月前
|
Java Shell Docker
Docker启动后怎样运行jar包文件
Docker启动后怎样运行jar包文件
|
7月前
|
存储 Java 开发者
深入理解Jar文件:创建、使用和多版本控制
深入理解Jar文件:创建、使用和多版本控制
129 0
|
1月前
|
Java 开发者
修改JAR文件工具
本文介绍了一款名为JarEditor的IDEA插件,该插件允许用户直接对JAR包内的文件进行增删改查操作,无需先行解压。通过简单的安装与使用步骤,大大简化了传统上需要解压缩、反编译、重新编译及打包的过程。此外,JarEditor还支持对混淆过的JAR文件进行字节码级别的修改,并提供了强大的搜索功能,支持大小写、全词匹配和正则表达式搜索。对于开发者而言,这款插件无疑极大提高了处理JAR文件的效率和便捷性。
69 14
|
6月前
|
Java 数据库 数据安全/隐私保护
Java操作Excel文件导入导出【内含有 jxl.jar 】
Java操作Excel文件导入导出【内含有 jxl.jar 】
95 0
|
2月前
|
Java Windows
如何在windows上运行jar包/JAR文件 如何在cmd上运行 jar包 保姆级教程 超详细
本文提供了一个详细的教程,解释了如何在Windows操作系统的命令提示符(cmd)中运行JAR文件。
1246 1
|
6月前
|
XML 运维 Java
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
Spring运维之boot项目打包jar和插件运行并且设置启动时临时属性和自定义配置文件
59 1
|
7月前
|
SQL Java 流计算
Flink SQL UDF(用户自定义函数)需要打包成JAR文件并上传到Flink集群中
【1月更文挑战第1天】【1月更文挑战第2篇】Flink SQL UDF(用户自定义函数)需要打包成JAR文件并上传到Flink集群中
348 0
|
6月前
|
IDE 数据可视化 Java
Java基础6-Java文件和Java包结构和常用的jar包(二)
Java基础6-Java文件和Java包结构和常用的jar包(二)
85 0
|
6月前
|
Java Unix 编译器
Java基础6-Java文件和Java包结构和常用的jar包(一)
Java基础6-Java文件和Java包结构和常用的jar包(一)
105 0
|
7月前
|
Java
win10下修改jar中的文件
win10下修改jar中的文件
88 1
win10下修改jar中的文件