android反编译apk_apk反编译找不到

2022-10-01 17:17:20 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

反编译代码:

1、解压apk得到class.dex

2、dex2jar.bat class.dex

3、用Java decompiler查看编译出来的*.jar文件就可以看到代码

反编译资源文件:

1、apktool.bat d *.apk <dri>

APKTool是GOOGLE提供的APK编译工具,需要JAVA运行环境,推荐使用JDK1.6或者JDK1.7。

如果你想对APK文件进行修改,那么就不可避免的要使用到APKTool。论坛里有很多关于ROM美化的帖子都需要自己动手修改APK文件,比如修改framework-res.apk、systemUI.apk等等。

相信各位有不少人看了后都想亲自来修改一番,但是结果却是遇到了各式各样的错误却无法进行改正,甚至都不知道自己错在哪里。

一.APKTOOL使用环境配置

1.安装JAVA并设置环境变量。

下载安装都很简单,关键是安装完后还需要亲自设置环境变量以方便其他程序能够条用JAVA。

以WIN7为例,在桌面上右键点击计算机——>属性——>高级系统设置——>环境变量——>在下边的系统变量里新建一个变量,变量名为JAVA_HOME,值为JAVA的安装路径,比如我的是H:ProgramFilesJavajdk1.6.0_26

二.APKTool的安装

1.其实这个谈不上安装,不过如果你愿意的话可以把下载到的APKTOOL中的三个文件(aapt.exe、apktool.bat、apktool.jar)解压缩到你的Windows安装目录下,以方便使用Dos命令.

2.可能有些人下载的APKTOOL里有个安装的bat文件,并且有另外两个方便使用的bat文件,在这里我不推荐大家使用这些bat文件,虽然使用起来很方便(其实我并不觉得方便),但是如果出现错误不方便查看。

三.APKTool的使用

1.decode

该命令用于进行反编译apk文件,一般用法为

apktool d <file.apk> <dir>

<file.apk>代表了要反编译的apk文件的路径,最好写绝对路径,比如C:MusicPlayer.apk

<dir>代表了反编译后的文件的存储位置,比如C:MusicPlayer

如果你给定的<dir>已经存在,那么输入完该命令后会提示你,并且无法执行,需要你重新修改命令加入-f指令

apktool d –f <file.apk> <dir>

这样就会强行覆盖已经存在的文件

2.build

该命令用于编译修改好的文件,一般用法为

apktool b <dir>

这里的<dir>就是刚才你反编译时输入的<dir>(如C:MusicPlayer),输入这行命令后,如果一切正常,你会发现C:MusicPlayer内多了2个文件夹build和dist,其中分别存储着编译过程中逐个编译的文件以及最终打包的apk文件。

3.install-framework

该命令用于为APKTool安装特定的framework-res.apk文件,以方便进行反编译一些与ROM相互依赖的APK文件。具体情况请看常见问题

四.常见问题

1.关于安装和管理framework文件

以下大部分其实是翻译自http://code.google.com/p/android-apktool/wiki/FrameworkFiles

一般来说,你在使用apktool进行反编译前不需要做其他的事情,然而由于有的厂商,如HTC,三星等,他们定制了framework文件并且在他们的系统应用中使用了这些文件,这时,为了能正常的反编译这些apk文件,你就必须从你的设备中拷贝出framework文件并且安装到apktool中。

举一个例子,比如你想反编译HTCHero这款手机中的HtcContacts.apk,当你尝试反编译的时候,你会得到以下错误信息。

$ apktool d HtcContacts.apk

I: Loading resource table…

I: Decoding resources…

I: Loading resource table from file: /home/brutall/apktool/framework/1.apk

W: Could not decode attr value, using undecoded value instead: ns=android, name=drawable, value=0x02020542

W: Could not decode attr value, using undecoded value instead: ns=android, name=icon, value=0x02020520

Can’t find framework resources for package of id: 2. You must install proper framework files, see project website for more info.

复制代码

这就是在通知你必须先安装HTC定制的framework文件,事实上在修改一些三星的系统应用时也是如此。

以三星的设备来举例,你需要复制两个framework文件来进行安装,framework-res.apk和tzframework-res.apk,一般来说,这两个文件在手机中的位置应该是systemframework

使用以下代码进行安装

apktool if C:framework-res.apk

apktool if C:tzframework-res.apk

这里假设2个文件都放在C盘根目录

2.直接用build编译后在dist中找到的apk文件无法使用

其实这个问题我也不是特别理解,目前知道的就是,APK文件虽然本质是个zip文件,但是事实上zip包中的文件是按照两种方式压缩的,即XML文件进行deflate压缩,其他文件不进行压缩(使用store存储),而直接编译得到的APK文件对任何的文件都进行了deflate压缩,因此你会发现编译得到的文件比原文件小好多。

同样的,当你使用build文件夹中的文件替换原apk文件中的资源时,请务必确认是使用store存储还是deflate压缩

3.其他错误

其实在编译过程中会遇到很多其他的问题,大多数是由于删除、修改、添加了资源后,没有对应的修改resvaluespublic.xml文件而造成的,这里我给大家说下修改的原则:

第一,public.xml文件中的资源不能重复定义。

第二,public.xml文件中的任意两个资源的ID不能一样

第三,public.xml文件中定义的资源必须能找到该文件(如果你删除了一些文件,必须要对应的删除public.xml中的该行)

第四,public.xml文件中尽可能全面(如果你添加了某资源,最好确保在public.xml中也添加)

第五,public.xml文件中的资源的ID尽可能连续(当你为添加的文件添加声明时,赋予的ID尽可能是连续的)

Android dex ,xml 文件反编译方法

Dex 文件是Android上运行于delvik的java二进制文件,如果你对其中的内容感兴趣而开发人员没有公布源代码,你可以用如下方法反编译dex文件: 1 解压system.img 用xyaffs2解压system.img 等你所需要解压的img文件: xyaffs2 img_file output_dir xyaffs2可以从如下地址下载: http://limodev.cn/download/xyaffs.tar.gz 2 从输出目录找到你感兴趣的apk包,用unzip解压apk文件包: unzip ContactsProvider.apk 3 用dex2jar工具将解压后的文件夹中的classes.dex转换成jar文件: dex2jar.sh classes.dex 或者 dex2jar.bat classes.dex dex2jar的下载地址如下: http://code.google.com/p/dex2jar/ 4 用unzip解压jar文件: unzip classes.dex.dex2jar.jar 5 用DJ java decompiler 反编译jar包中的class文件 DJ一般有图形化界面,操作很简单,可以单个文件反编译,也可以批量反编译。DJ的下载地址如下: http://members.fortunecity.com/neshkov/dj.html 安装好之后,安装目录下有一个jad.exe文件,执行:jad -o -r -dF:/src -sjava F:/classes/**/*.class -o – overwrite output files without confirmation (default: no) 无需确定覆写文件 -r – restore package directory structrure 恢复包目录结构 -s – output file extension (by default ‘.jad’) 如果不设置为-sjava,则默认扩展名为.jad 其他的,F:/classes/**/*.class 中的两颗接连的星,表示任意层次的子目录。 6 用AXMLPrinter反编译xml文件: java -jar AXMLPrinter2.jar AndroidManifest.xml AndroidManifest2.xml AXMLPrinter的下载地址如下: http://android4me.googlecode.com/files/AXMLPrinter2.jar 1、smali-1.2.6.jar 用途:.smali文件 转成 classes.dex文件 说明:.smali文件,类似于.class文件,可以用普通文本编辑器查看和修改。 用法举例:命令行:java -jar smali.jar classout/ -o classes.dex 下载:http://code.google.com/p/smali/downloads/list 2、baksmali-1.2.6.jar 用途:classes.dex文件 转成 .smali文件 说明:classes.dex不便于查看和理解,使用此工具转成的.smali文件易于阅读和修改。 用法:命令行:java -jar baksmali.jar -o classout/ classes.dex 下载:http://code.google.com/p/smali/downloads/list 3、AXMLPrinter2.jar 用途:xml文件 转成 普通文本文件(txt) 说明:apk中的xml文件被搞成二进制了,无法阅读,使用此工具转换后,可以查看正常的xml文件。 用法举例:命令行:java -jar AXMLPrinter2.jar main.xml > main.txt 下载:http://code.google.com/p/android4me/downloads/list http://dohkoos.name/decompile-android-apk-file.html classes.dex是Java源码编译后生成的字节码文件。由于Android使用的dalvik虚拟机与标准的Java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。 目前有下面这几种反编译的工具: dexdump Dedexer AXMLPrinter2 apktool dex2jar JD-GUI smali Android开发包提供了一个dex的反编译工具dexdump。用法为首先启动Android模拟器,把要反编译的dex文件用adb push上传到模拟器中,然后通过adb shell登录,找到该dex文件,执行dexdump xxx.dex。总的来说dexdump功能比较弱,且用起来麻烦,另外反编译的结果可读性也很差。 另一个dex文件的反编译工具是Dedexer,且反编译的效果比较好。它可以读取dex格式的文件,生成一种类似于汇编语言的输出。这种输出与Jasmin的输出相似,但包含的是Dalvik的字节码。Dedexer与dexdump相比至少有3个优点: 1. 不需要在Android模拟器中运行; 2. 反编译后的文件目录结构和源代码结构相近,每个class文件对应一个ddx文件。不像dexdump那样把所有的结果都放在一起; 3. 可以作为反编译引擎。目前好多强大的反编译工具都是以Jasmin作为反编译引擎的。 可以下载已经编译好的jar文件ddx1.11.jar,对应Java 1.6版本。用法: java -jar ddx1.11.jar -o -D -r -d src classes.dex //在src目录下生成ddx文件 在apk中的资源是经过压缩的,用文本工具看都是乱码,可以通过AXMLPrinter2将其转换为可读的xml文件。具体命令为: java -jar AXMLPrinter2.jar xxx.xml output.xml 目前最好的dex反编译工具是apktool。可以帮助我们把apk文件反编译,输出smali格式的代码和图片和资源等文件,还可以在修改后重新打包。将下载下来的apktool和apktool-install-windows解压到同一目录下,有三个文件:aapt.exe,apktool.bat和apktool.jar。使用方法: apktool d xxx.apk zzz //反编译xxx.apk到zzz目录,得到apk的图片和配置资源文件等 apktool b zzz //从文件夹zzz重建apk,输出到zzz/dist/out.apk dex2jar是一个将Dalvik虚拟机的dex文件转换回标准Java的class文件的工具: dex2jar xxx.apk //生成jar文件,可以用JD GUI工具直接打开查看 smali可以反编译dex文件,也可以把你修改过的代码重新编译成dex: java -jar baksmali.jar classes.dex -o classes java -jar smali.jar classes -o classes.dex 一.反编译Apk得到Java源代码 转载自:http://hi.baidu.com/˿Ե����/blog/item/2284e2debafc541e495403ec.html 工具下载:需用到dex2jar和JD-GUI这2个工具 dex2jar下载地址:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip JD-GUI下载地址: windows版JD-GUI:http://laichao.googlecode.com/files/jdgui.zip Linux版JD-GUI:http://laichao.googlecode.com/files/jd-gui-0.3.2.linux.i686.tar.gz 步骤: 1.首先找到Android软件安装包中的classes.dex 把.apk文件改名为.zip,然后解压缩,得到其中的classes.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件 2.把classes.dex拷贝到dex2jar.bat所在目录。 在命令行模式下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex ,生成classes.dex.dex2jar.jar 3.运行JD-GUI工具(它是绿色无须安装的) 打开上面的jar文件,即可看到源代码 ——————————————————————————— ——————————————————————————— 二.反编译apk生成程序的源代码和图片、XML配置、语言资源等文件。 转载自:http://blog.sina.com.cn/s/blog_5752764e0100kv34.html 工具下载: 在http://code.google.com/p/android-apktool/下 载获得,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。 步骤: 1.解压缩下载的两个文件包,apktool-install-windows-2.1_r01-1.zip解压缩后得到的包里有aapt.exe 和apktool.bat.(注意要把apktool-1.0.0.tar.bz2解压后的一个.jar 文件copy进来) 2.打开命令窗口 (开始 > 运行,输入cmd,回车。)进入到apktool.bat的文件夹里。 输入: apktool d C:***.apk C:***文件夹 (命令行解释:apktool d 要反编译的文件 输出文件夹) 特别注意:你要反编译的文件一定要放在C盘的根目录里, 3.打开 C:***文件夹 就可以得到我们学院的各种资源了。 三.将反编译完的文件重新打包成apk 很简单,只要输入: apktood b c:***文件夹(你编译出来文件夹) http://www.cnblogs.com/wanqieddy/archive/2012/03/01/2375424.html http://code.google.com/p/dex2jar/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/192354.html原文链接:https://javaforall.cn

0 人点赞