APK 反编译
Android APK反编译得到Java源代码和资源文件

Android APK反编译得到Java源代码和资源文件2011年3月9日iStar发表评论阅读评论这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。
在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。
一.反编译Apk得到Java源代码首先要下载两个工具:dex2jar和JD-GUI,前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。
以下是下载地址:dex2jar:/files/dex2jar-0.0.7-SNAPSHOT.zip JD-GUI:/files/jdgui.zip具体步骤:1.首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;2.解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。
在命令行下定位到dex2jar.bat所在目录,运行dex2jar.bat classes.dex生成classes.dex.dex2jar.jar3.运行JD-GUI,打开上面生成的jar包,即可看到源代码了。
二.反编译apk生成程序的源代码和图片、XML配置、语言资源等文件如果是只是汉化软件,这将特别有用。
首先还是下载工具,这次用到的是apktool,下载地址:/p/android-apktool/,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。
具体步骤:1.将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar;2.在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:\***.apk C:\***文件夹命令行解释:apktool d [要反编译的apk文件 ] [输出文件夹],特别注意:你要反编译的文件一定要放在C盘的根目录里;3.将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可。
Android APK反编译得到Java源代码和资源文件

Android APK反编译得到Java源代码和资源文件一、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件工具下载:地址:/p/android-apktool/downloads/list如下图,途中红圈的两个都要下载。
将上面2个文件解压到同一个文件夹下面,将有3个文件被解压出来,如下图所示打开cmd命令行窗口定位到刚才解压的文件夹下,即apktool.bat所在的文件夹,如下图所示1. 将APK反编译将待反编译的apk文件放到c盘根目录下,特别注意,一定要放到根目录下。
输入反编译命令apktool d c:\xxxxx.apk c:\***文件夹命令行解释:apktool d [要反编译的apk文件] [输出文件夹]如:注意:demo文件夹不能是已存在的文件夹,否则会报错2. 将反编译完的文件重新打包成APK很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可。
二、反编译apk得到Java源代码工具下载:dex2jar:/p/dex2jar/downloads/listJD-GUI:/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zi p&can=2&q=如下图的两个文件:具体步骤:1. 解压上面两个压缩文件。
2. 从apk文件中解压出classes.dex,将它复制到dex2jar.bat所在的文件夹下3. 命令行下定位到dex2jar.bat所在的目录,然后运行dex2jar.bat classes.dex如图:注:classes.dex不一定要复制到这个文件夹下,在其前面加上路径也是一样的,这里只是为了输命令方便。
如上图所示,看到Done表示成功,将得到下图中红圈内所示的jar文件4. 然后双击jd-gui.exe,打开刚才生成的jar文件,即可看到下图如此,便可看到代码了。
附上上文中所有用到的工具:apk2android.rar在此郑重声明:分享此文,不是为了破解别人的软件,完全是一种学习态度,代码要自己手敲出来才会有感情的。
apktool反编译详细使用教程

apktool反编译详细使⽤教程安装反编⼯具地址apktool⼯具包下载地址apktool.rar1.⾸先安装需要JAVA环境,先下载JDK/JRE,已经有JAVA环境的可跳过此步java JDK:java JRE:还得设置JAVA环境变量CLASSPATH .;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jarJAVA_HOME C:\Program Files\Java\jdk1.6.0_10 解释JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径Path %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin环境变量配置好了,我们就可以反编译了,(如果有不明⽩的有两种⽅法,1,请教我,2在论坛搜搜怎么设置JAVA环境变量)反编译的使⽤反编译⼯具,⽹上有很多,有APKTOOL,Doapk ,apkmanage..........,你们可以随便下载⼀个,地址我就不提供了,你们⾃⼰搜索⼀下,上百度,上论坛上搜都有的,但apkTOOL⼯具必须包含⼀下⼏个下载完成反编译⼯具后,验证是否安装成功,点击开始菜单,运⾏,输⼊CMD回车按⼀下回车出现,在输⼊APKTOOl,输⼊apktool,要看腻把apkTOOL安装在哪个盘,举例我的,我是安装在D盘APkTOOL⽂件下,先在cmd下输⼊D:回车,在输⼊CD apktool,转⼊apktool⽂件夹下,输⼊apktool 出现如下反应,,说明你安装成功了,可以进⾏APK反编译了,下⾯我已反编译SystemUI.apk为例。
⾸先的知道⼀下⼏条指令的意思1,apktool d SysteUI.apk 12意思是将SystemUI.apk解包到12⽂件下,12⽂件夹不⽤创建,会⾃动⽣成2,apktool b 12打包12⽂件夹(将会⾃动把12⽂件夹⾥的修改过得APK解包后修改完后⾃动打包,⽣成resources.arsc,⽂件,这就是我们反编译的主要⽬的,当然还有其他⽬的,后⾯将会说明怎么apktool需要反编译的⽬的,⽣成的⽂件。
Android逆向工具篇—反编译工具的选择与使用

Android逆向⼯具篇—反编译⼯具的选择与使⽤作者 | 天天记⼩本⼦上的lilac 来源 | CSDN今天给⼤家介绍⼀下Android App 在Java层的逆向⼯具。
逆向⼯具的介绍在过去,当我们想要了解⼀个 app 内部运作细节时,往往先通过 ApkTool 反编译 APK,⽣成 smali 格式的反汇编代码[1],然后⼤佬和⽼⼿直接阅读 smali 代码,适当的进⾏修改、插桩、调试,经过⼀定的经验和猜想,理解程序的运⾏逻辑和加解密细节,⽐如如下的 smali 代码。
smail我们只要先这样,再那样,最后再这样,对对对,就这样,⼀个程序的加密就被破解出来了。
是不是迫不及待想来⼀次App的逆向之旅了?事实上,这种⽅式对⼩⽩实在不友好,有没有更加友好的⽅式呢?当然是有的,如果你百度或者 google 搜索逆向相关的教程和分享,很容易就会发现下⾯这三个⼯具。
在介绍⼯具之前,我们先补充⼀下APK结构的知识,我们以伊对这个社交 Apk 为例。
APK ⽂件其实是⼀种特殊的 zip 格式,我们可以直接⽤ 360 压缩或者别的压缩⼯具打开。
为了满⾜⾃⾝的功能和设计,⼏乎每⼀个都会在基础的⽂件结构上添加不少东西,但有六个部分是不变的,我们罗列和称述⼀下。
⽂件或⽬录作⽤META-INF/描述apk包信息的⽬录,主要存放了签名信息,配置信息,service注册信息res/存放apk资源⽂件的⽬录,⽐如图⽚、图标、字符串、样式、颜⾊assets/同样是存放apk资源⽂件的⽬录,但和res有差异,和我们关系不⼤resources.arsc资源索引,包含不同语⾔环境中res⽬录下所有资源的类型、名称与ID所对应的信息lib/存放so⽂件,越来越多的应⽤由C/C++编写核⼼代码,以SO⽂件的形式供上层JAVA代码调⽤,以保证安全性,这个⽬录是逆向解密关注的重点classes.dex(⼀个或数个)Android程序运⾏在Dalvik虚拟机上,⽽dex就是Dalvik虚拟机的可执⾏⽂件, 相当于Windows平台中的exe⽂件,通过反编译dex,可以获得apk源码(这个说法不很准确,但⽅便理解)AndroidManifest.xml清单⽂件,包含了App⼤量的的配置信息,⽐如包名、应⽤需要拥有的权限(打电话/录⾳/⽹络通信等等)、以及所有的界⾯和程序组件的信息,⽆法解压apk时直接打开,因为清单⽂件在apk打包过程中被编译成了⼆进制格式⽂件接下来我们介绍以下反编译⼯具,看⼀下反编译⼯具的作⽤⼯具作⽤ApkTool解析resources.arsc,AndroidManifest.xml等⽂件,反编译dex⽂件为smali源码Dex2jar将dex⽂件转化为jar⽂件Jd-gui反编译jar,查看java源码⽐如使⽤ Dex2jar+Jd-gui, 最终得到这样的结果。
反编译APK文件的三种方法(转)

反编译APK⽂件的三种⽅法(转)因为学习Android编程的需要,有时我们需要对⽹络上发布的应⽤项⽬进⾏学习,可是Android项⽬⼀般是通过APK⽂件进⾏发布的,我们看不到源代码,嘿嘿,办法总会有的,⽽且不⽌⼀个...ps:对于软件开发⼈员来说,保护代码安全也是⽐较重要的因素之⼀,不过⽬前来说Google Android平台选择了Java Dalvik VM的⽅式使其程序很容易破解和被修改,⾸先APK⽂件其实就是⼀个MIME为ZIP的压缩包,我们修改ZIP后缀名⽅式可以看到内部的⽂件结构,类似Sun JavaMe的Jar压缩格式⼀样,不过⽐较去别的是Android上的⼆进制代码被编译成为Dex的字节码,所有的Java⽂件最终会编译进该⽂件中去,作为托管代码既然虚拟机可以识别,那么我们就可以很轻松的反编译。
所有的类调⽤、涉及到的⽅法都在⾥⾯体现到,⾄于逻辑的执⾏可以通过实时调试的⽅法来查看,当然这需要借助⼀些我们⾃⼰编写的跟踪程序。
Google最然在Android Market上设置了权限保护app-private⽂件夹的安全,但是最终我们使⽤修改定值的系统仍然可以获取到需要的⽂件。
⼀、dexdump⽅法dexdump是emulator⾃带提供的查看dex⽂件的⼯具,可使⽤类似这样的命令将dex⽂件dump到txt⽂件中:D:\Program Files\android-sdk-windows-1.6_r1\platforms\android-1.6\tools>dexdump.exe -d classes.dex > spk.dump.txt 得到的⽂件内容,描述了类的信息,但实在是不好读啊~~~~⼆、dex2jar + XJad ⽅法该⽅法是使⽤dex2jar.jar包,将classes.dex⽂件解包成jar,在通过XJad(或者其他class反编译⼯具)进⾏java反编译。
如:1、dex2jar.bat d:\play\classes.dex默认的输出路径同classes.dex,⽣成的⽂件名为classes.dex.dex2jar.jar2、使⽤XJad反编译该jar包之后的使⽤⽅法,⼤家都懂的:)该⽅法的好处在于,通过XJad反编译后,⼤家可直接开到java源⽂件,缺点在于只能反编译出开发时的java⽂件,⽽开发时使⽤的lib包不能反编译出来。
Android apk反编译之android APK有效加密方法

Android apk反编译之有效防止破解和反编译加密方法对于Android开发者来说,自己开发的Android APP被破解是个让人头疼的事。
那有什么办法能防止Android apk反编译和破解呢?一般的混淆代码和防二次打包还有效么?我们通过下面的内容来验证一下!首先我们找一个经过混淆代码和防二次打包的Android APK,这样的Android APK包不难找!只要到爱加密APK源代码安全检测平台,检测一下就可以知道做过什么保护。
通过图片我们可以看到这款Android APK做了混淆代码和防二次打包保护,对于其他的Android APK中的DEX、RES、SO库等文件未做任何保护。
下面我就通过对APK源代码的安全分析,看看这Android APK的安全怎么样!首先我先将APK反编译,看看能不能拿到代码!经过简单的反编译我们就可以轻松的拿到APK里面的源代码,下面我们就修改一下里面的东西,看看之前的APK保护是否有效!1、配置用户权限(重要)2、添加必须组件(重要)完成这2个步骤我们的sdk就已经植入成功了,如图:那么我们怎么解决这款APK做的保护呢?不用着急,我们慢慢来!首先我们发现当登录的时候会提示签名信息不一致,导致不能登录!经过分析发现他是给apk做了签名信息认证,这时我们需要找到他获取签名信息的地方,如下图:到这一步就可以绕过这款APK的二次打包防护了,这样我们就可以登录了!登陆后我们可以看到这款Android APK已被植入广告!这里我要简单介绍一下APK的混淆代码、防二次打包的加密技术是怎么回事!混淆代码:Android APP的源码进行混淆后混淆器将代码中的所有变量、函数、类的名称加密为简短的英文字母代号,在APP被破解后增加破解者对代码的阅读难度。
但是混淆的功效只能运作在APP已经被破解后,而且只是增加破解者的难度时间,对其防止破解的作用意义不是很大。
防二次打包:二次打包是指将APK拆包后重新打包,二次打包必将丢失原有的签名。
JDK1.6安装详解、环境变量设置、APK应用程序的反编译与编译

JDK1.6安装详解、环境变量设置、APK应用程序的反编译与编译JDK1.6安装详解1.下载JAVA JDK SE 6,下为下载地址之一:/download/jdk6/6u10/promoted/b32/binaries/jdk-6u10-rc2-bin-b32-windows-i 586-p-12_sep_2008.exe2. 进入下载的文件夹并双击安装程序开始安装:单击“接受”。
选择程序功能和安装路径,单击“下一步”。
单击“下一步”安装jre。
单击“完成”。
3. 设置环境变量在系统变量中分别设置JAVA_HOME,CLASSPATH,PATH三环境变量。
JAVA_HOME环境变量设置:右击我的电脑——属性——高级——环境变量——系统变量——新建注意事项:(1)变量值根据java安装目录的不同而不同,最好到安装文件中找到相关文件再复制路径。
变量名:JAVA_HOME变量值:D:\Program Files\Java\jdk 1.6.0_10变量名:CLASSPATH变量值:.;D:\Program Files\Java\jdk1.6.0_10\bin;D:\Program Files\Java\jdk1.6.0_10\lib\tools.jar 变量名:Path变量值:D:\Program Files\Java\jdk1.6.0_10\bin;D:\Program Files\Java\jdk1.6.0_10\jre\bin(是在原有的值上添加)(2)classpath变量是以“.;”开始的!单击确定,退出环境变量设置。
4. 测试安装:测试JAVA是否安装成功,编写测试文件为HelloWorld.java。
文件内容为:1.public class HelloWorld{2.public static void main(String[] args){3.System.out.println("Hello world!");4.}5.}运行cmd注意事项:测试时应将HelloWorld.java所在的路径加入path环境变量。
教你如何反编译APK

教你如何反编译APKAPK文件是Android应用程序的包装文件,包含了应用的代码、资源文件和其他相关信息。
反编译APK可以帮助开发人员分析应用的代码结构和功能实现,以及学习其他应用的设计思路和技术实现方法。
下面是一种常用的反编译APK的方法。
步骤1:安装反编译工具步骤2:准备APK文件步骤3:打开终端或命令提示符在你的计算机上打开终端或命令提示符窗口。
如果你使用的是Windows系统,可以按下Win+R组合键,输入“cmd”并按下回车键。
步骤4:进入APK文件所在的目录在终端或命令提示符中输入“cd”命令,然后加上APK文件所在的目录路径,回车进入该目录。
步骤5:执行反编译命令在终端或命令提示符中输入以下命令:apktool d 文件名.apk其中,文件名是你准备反编译的APK文件的文件名。
执行该命令后,apktool将自动解压缩APK文件,并将解压后的文件保存在当前目录。
步骤6:查看反编译结果步骤7:反编译APK的其他方法除了使用apktool之外,你还可以尝试其他的反编译APK的工具。
dex2jar可以将APK文件转换为JAR文件,然后你可以使用Java反编译器对JAR文件进行反编译。
JD-GUI是一个流行的Java反编译器,你可以将JAR文件拖放到JD-GUI的界面中,然后查看反编译后的Java代码。
步骤8:分析和学习通过反编译APK文件,你可以深入了解应用的实现细节、功能实现和资源文件。
你可以借鉴其他应用的设计思路和技术实现方法,提升自己的开发能力。
需要注意的是,在使用反编译工具时,你必须遵守相关法律法规,并尊重其他开发者的知识产权。
只有在合理范围内使用反编译才是合法的,不得用于非法用途。
总结:通过上述步骤,你可以轻松地反编译APK文件。
这个过程可以让你更好地了解应用程序的代码和实现细节,同时也可以为你的开发工作提供参考和借鉴。
但请务必遵守相应法律法规,尊重知识产权。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Apk文件的格式
Android application package文件。
每个要安装到android平台的应用都要被编译打包为一个单独的文件,后缀名为.apk,其中包含了应用的二进制代码、资源、配置文件等。
apk文件实际是一个zip压缩包,可以通过解压缩工具解开。
可以用zip解开*.apk文件,下面是一个he lloword的apk示例文件
|–AndroidManifest.xml
|–META-INF
| |–CERT.RSA
| |–CERT.SF
| `–MANIFEST.MF
|–classes.dex
|–res
| |–drawable
| | `–icon.png
| `–layout
| `–main.xml
`–resources.arsc
1.Manifest文件:AndroidManifest.xml是每个应用都必须定义和包含的,它描述了应用的名字、
版本、权限、引用的库文件等等信息[ , ],如要把apk上传到Google Market上,也要对这个xml做一些配置。
注意:在apk中的xml文件是经过压缩的,不可以直接打开。
2.Res文件:res文件夹下为所有的资源文件。
3.resources.arsc文件:为编译后的二进制资源文件,许多做汉化软件的人都是修改该文件内的资源
以实现软件的汉化的。
4.META-INF目录:META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。
在eclipse编译生成一个api包时,会对所有要打包的文件做一个校验计算,并把计算结果放在ME TA-INF目录下。
而在OPhone平台上安装apk包时,应用管理器会按照同样的算法对包里的文件做校验,如果校验结果与META-INF下的内容不一致,系统就不会安装这个apk。
这就保证了apk 包里的文件不能被随意替换。
比如拿到一个apk包后,如果想要替换里面的一幅图片,一段代码,或一段版权信息,想直接解压缩、替换再重新打包,基本是不可能的。
如此一来就给病毒感染和恶意修改增加了难度,有助于保护系统的安全。
5.classes.dex是java源码编译后生成的java字节码文件。
但由于Android使用的dalvik虚拟机
与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。
XML文件的反编译
在apk中的xml文件是经过压缩的,可以通过AXMLPrinter2工具解开,具体命令为:
java -jar AXMLPrinter2.jar AndroidManifest.xml
HelloAndroid程序中Manifest文件的实例:
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="/apk/res/android"
android:versionCode="1"
android:versionName="1.0"
package="name.feisky.android.test"
>
<application
android:label="@7F040001"
android:icon="@7F020000"
>
<activity
android:label="@7F040001"
android:name=".HelloAndroid"
>
<intent-filter
>
<action
android:name="android.intent.action.MAIN"
>
</action>
<category
android:name="UNCHER"
>
</category>
</intent-filter>
</activity>
</application>
<uses-sdk
android:minSdkVersion="6"
>
</uses-sdk>
</manifest>
而原文件为:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="/apk/res/android" package="name.feisky.android.test"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".HelloAndroid"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="UNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="6" />
</manifest>
classes.dex文件反编译
classes.dex是java源码编译后生成的java字节码文件。
但由于Android使用的dalvik虚拟机与标准的java虚拟机是不兼容的,dex文件与class文件相比,不论是文件结构还是opcode都不一样。
目前常见的java反编译工具都不能处理dex文件。
Android模拟器中提供了一个dex文件的反编译工具,dexdump。
用法为首先启动Android模拟器,把要查看的dex文件用adb push上传的模拟器中,然后通过adb shell登录,找到要查看的dex文件,执行dexdump xxx.dex。
但是这样得到的结果,其可读性是极差的。
下面介绍一个可读性比较好的工具。
工具准备:
1、把dex文件反编译为jar文件的工具。
(dex2jar)
2、把jar反编译为java的工具。
(JD-GUI)
反编译的步骤
1、从APK中提取classes.dex文件,对APK文件解压即可得到。
将其放到dex2jar的目录下,打开c md,运行dex2jar.bat classes.dex,生成classes.dex.dex2jar.jar。
2、运行JD-GUI工具,打开上面的jar文件,即可看到源代码。
HelloAndroid实例:
package name.feisky.android.test;
import android.app.Activity;
import android.os.Bundle;
public class HelloAndroid extends Activity
{
public void onCreate(Bundle paramBundle)
{
super.onCreate(paramBundle);
setContentView(2130903040);
}
}
其原程序为:
package name.feisky.android.test;
import android.app.Activity;
import android.os.Bundle;
public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(yout.main);
}
}。