android反编译apk_apk反编译找不到

android反编译apk_apk反编译找不到反编译代码:1、解压apk得到class.dex2、dex2jar.bat class.dex3、用Javadecompiler查看编译出来的*.jar文件就可以看到代码反编译资源文件:1、apktool.bat d *.apk  APKTool是GOOGLE提供的APK编译工具,需要JAVA运行环境,推荐使用JDK

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

反编译代码:

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:\ProgramFiles\Java\jdk1.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,一般来说,这两个文件在手机中的位置应该是system\framework\

使用以下代码进行安装

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.其他错误

其实在编译过程中会遇到很多其他的问题,大多数是由于删除、修改、添加了资源后,没有对应的修改res\values\public.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/%CB%BF%D4%B5%CC%EC%CF%C2/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/

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 大道之简

    大道之简

  • java前端好学还是后端好学,一篇文章帮你解答

    java前端好学还是后端好学,一篇文章帮你解答蚂蚁金服一面:下午杭州的电话,问有没有空,果断有空,虽然感觉略显紧张,有点懵逼。面试的题目:HashMap和Hashtable的区别实现一个保证迭代顺序的HashMap说一说排序算法,稳定性,复杂度说一说GC可以保证的实习时长职业规划整体来说,一面的基础性问题比较多,所以博主基本都答出来了,准备过还是有些用处的。所以一面完了感觉还不错,接着第二天下午就二面了。蚂蚁金服二面二面是我最慌的面试,因为二面是最关键的,是最大的主管面试,所以非常关键,整体来说,二面的节奏非常快,和一面完全

  • 开源网管软件_网关开发

    开源网管软件_网关开发让你不差钱的9款开源网管工具(组图)http://network.51cto.com/art/200906/129490.htm 转载于:https://blog.51cto.com/zgxworks/167764

  • java异或运算_异或校验

    java异或运算_异或校验异或运算常用来做数据的简单校验。Java的实现:(将字节数组两两异或,返回最后异或值)publicstaticbytegetXor(byte[]datas){ bytetemp=datas[0]; for(inti=1;i

  • 三角形面积的计算公式小学_正三角形面积公式

    三角形面积的计算公式小学_正三角形面积公式1、三角形面积=1/2*底*高(三边都可做底)2、三角形面积=1/2absinC=1/2acsinB=1/2bcsinA3、三角形面积=abc/4R(其中R是三角形外接圆半径)你看看理解一下,其中1是比较常用的。4、三角形面积S=√x*(x-a)*(x-b)*(x-c)其中"√"是大根号,”x”为三角形周长的一半,a,b,c为边长三角形的面积的平方=p(p-a)(p-b)(p-

  • N70/N72常见问题汇总

    N70/N72常见问题汇总引自:http://bbs.imobile.com.cn/viewthread.php?tid=1092547这里是一些常见的问题,求助前请看里面有没有你需要的答案,或者善用论坛的搜索功能已更新至第四楼为什么我看不到手机或内存卡上的system文件夹?在手机上看这个文件夹需要安装第三方文件管理软件fileman、SeleQ、Fexplorer等文件管理软件如果要在电脑上看到这个文件夹需要将卡…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号