如何利用dex2jarclasses.dex 反编译译APK

下次自动登录
现在的位置:
& 综合 & 正文
[android反编译小结]apktool/ AXMLPrinter2.jar/ dex2jar.bat/ jd-gui/ Jodeclipse/ JadClipse
“对于软件开发人员来说,保护安全也是比较重要的因素之一,不过目前来说Google Android平台选择了Java Dalvik VM的方式使其很容易破解和被修改,首先APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,类似Sun JavaMe的Jar压缩格式一样,不过比较去别的是Android上的二进制代码被编译成为Dex的字节码,所有的Java文件最终会编译进该文件中去,作为托管代码既然虚拟机可以识别,那么我们就可以很轻松的反编译。所有的类调用、涉及到的方法都在里面体现到,至于逻辑的执行可以通过实时调试的方法来查看,当然这需要借助一些我们自己编写的跟踪程序。Google最然在Android Market上设置了权限保护app-private文件夹的安全,但是最终我们使用修改定值的系统仍然可以获取到需要的文件。"
搞过几天android的朋友都知道,将apk文件解压后有两部分文件需要处理,一种是xml文件,另一种一个dex文件(.dex),我们可以从.dex文件中得到.class,利用后者再得到大家垂涎已久的java文件。下面分别针对这三种格式的文件进行反编译处理;1.对xml文件进行包的解析,一般有两种方式:apktool(推荐)和AXMLPrinter2.
2.从dex到class公认dex2jar.bat,实现反编译;公认的强者;
3.而class到java的方式要更多样化一些,因为只是查看反编译后的代码:jd-gui(推荐),Jodeclipse(Jode的Eclipse插件),JadClipse(Jad的Eclipse插件)。
还是先对此过程作个大致介绍吧:1.首先把apk文件改名为.zip,然后解压缩其中的class.dex文件,它就是java文件编译再通过dx工具打包成的。
2.把class.dex拷贝到dex2jar.bat所在目录。运行dex2jar.bat class.dex,生成classes.dex.dex2jar.jar。
3.运行JD-GUI工具(绿色软件,好用的软件!),打开上面的jar文件,即可看到java。
如果上面的步骤都可以自我完成了,那么,下面对这几个软件的详细介绍就可忽略不看!
这几个软件,细分开来介绍(用步骤A(分A1,A2), B, C(分C1,C2,C3), ABC分别代表三个不同的步骤):A1. apktool:通常用于生成程序的源代码和图片、XML配置、语言资源等文件。我们对图片和语言资源等文件修改后,可以再把它们编译打包成APK,签名后就是手机可以安装的本地化/修正版APK了。支持Linux 、Windows下工作安装步骤:1.安装JAVA环境(官方推荐jdk 1.6);2.下载apktool.jar:点击下载apktool1.3.2.tar.bz2
和apktool-install-windows-2.2_r01-3.tar.bz2 (不一定是这个,但最好选最新版本的吧!)3.解压apktool1.3.2.tar.bz2得到apktool.jar;解压apktool-install-windows.zip到任意文件夹,将apktool.jar拷入此文件夹中(也有人说是直接全部拷入C:/Windows,一样的);(目前此文件夹中有三个文件:apktool.jar/apktool.bat/aapt.exe)4.cmd命令行进入到解压apktool-install-windows-2.2_r01-3.tar.bz2所得的文件夹,输入apktool测试是否安装成功;
安装成功后,下面开始反编译过程:1.apktool d (要反编译的文件) (输出文件夹)
如:apktool d XXX.apk (目标文件夹)
反编译 my.apk到文件夹myapk
2.apktool b (目标文件夹)
从目标文件夹中重建APK,生成的APK在"目标文件夹"/dist文件夹里,叫out.apk。
这个out.apk是没有签名的,所以不能直接装到手机里。签名工具和方法见,这里就不说了。签名后得到的APK,就是可以装到手机里的了。
A2. AXMLPrinter2.jar将它放到android-sdk-windows-1.5_r3/tools文件夹中运行cmd,进入tools目录,运行java -jar AXMLPrinter2.jar main.xml & main.txt;于是我们就得到了反编译后的XML文件;
经历了这么多,我们得到的只是部分布局文件和资源文件,但java文件还是"犹抱琵琶半遮面"。
下面,让我们掀起她的红盖头来:
B. dex2jar下载: 方法:1.首先找到Android软件安装包中的classes.dex (解压得到);它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件2.把classes.dex拷贝到dex2jar.bat所在目录;在命令行模式下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex,生成classes.dex.dex2jar.jar,成功了一半!
C1. JD-GUI下载:方便好用,直接解压得到JD-GUI,用它打开上面的jar文件,File--&Save JAR Source,即可看到梦寐以求的java源代码;
我们也可以解压B步骤得到的jar文件得到class文件,到这里,我们就要用到Jodeclipse和JadClipse了;C2. Jodeclipse---Jode的Eclipse插件
C3. JadClipse---Jad的Eclipse插件关于这两个Eclipse插件的安装可见下面链接:(C4. 还有朋友提到DJ Java Decompiler,没用过,可以一试!)
但也有人提出此问题:自从eclipse升级到3.3以后jad插件就一直没有成功的安装上去,网上看了好多也是以前版本的安装方法,3.3目前通过eclipse的software update的插件安装方式已经不行了。 解决方法如下: 1.从地址下载最新的jad,我目前下载的是jadnt158.zip; 2.从 ... jadclipse_3.3.0.jar地址下载jadclipse_3.3.0.jar,拷贝到eclipse的plugins目录下;3.启动或重起eclipse,修改window -& Preferences -& Java -& JadClipse 下的 Path to decompiler 如:D:/eric/jadnt158/jad.exe(jadnt158.zip解压后的目录); 4.Windows -& Perference -& General -& Editors -& File Associations中修改“*.class”默认关联的编辑器为“JadClipse Class File Viewer” 大功告成,之后在java类里按住ctrl点击类就可以看到它jad反编译后的源带码了;如果发现安装了没有效果,可以删除eclipse主目录下的/configuration/org.eclipse.update后,再执行eclipse -clean试试
最后,将得到的java文件和得到的xml文件组合可得一个android工程,即可得到相对比较完整的apk源码;但也有些额外加的包没被编译出来。
但做到这一步已经足够用于学习,我们的目的也就达到了!
有人会说程序可以用混淆器扰乱代码,但刚从网上看到的一种关于混淆器的说法:“用混扰器的代码一般就是去掉所有注释和把变量名、方法名和类名变成一些没意义的名字。反编译后一般都变成a, b , c,...这样的名字,只能一点点的看懂,再利用Eclipse的改名方法,一次性的吧相关的名字改成有意义的名称。”
所以,大家的关键代码最好还是打成.so库吧!要不会被一些人搞得内裤都没得穿!
特此感谢:
大家也可关注以上两篇文章,用的不同方法(dexdump, baksmali.jar, smali.jar),效果也都还不错!
如果大家有什么关于防止反编译比较好的的技巧,可以留言告知,所有程序员都会感谢你的!
&&&&推荐文章:
【上篇】【下篇】ubuntu下使用反编译apk,
1:通过apk-tool反编译出资源文件:
/p/android-apktool/
2.首先使用dex2jar反编译
下载地址(建议下载最新版本,防止出现bug):
跟windows下一个版本,既能用在windows下,又能在linux下运行,只是指令上的差距
到dex2jar目录下,xiao@xiao-System-Product-Name:~/下载/dex2jar-0.0.9.7$
输入windows下用的命令:dex2jar.bat classes.dex报错。dex2jar.bat:找不到命令,这就是不同之处了
ubuntu下使用命令:xiao@xiao-System-Product-Name:~/下载/dex2jar-0.0.9.7$ sh dex2jar.sh classes.dex
输出:dex2jar version: translator-0.0.9.7
dex2jar classes.dex -& classes_dex2jar.jar
ok,解决了!!classes_dex2jar.jar就是我们需要查看的。
3.然后是使用jd-gui查看
下载地址(下载linux版本):http://jd.benow.ca/
点击直接运行。打开文件classes_dex2jar.jar即可查看
阅读(...) 评论()&&&&&&&&&&&
& & &自己布局的模式或方式很固定,看见一个炫酷的界面,总想看看是怎么布局的,今天小蜗牛就带大家学习怎么使用这三个工具。。
一 去各个软件的官网下载最新的软件
二 分别介绍各个软件的使用
& &1.首先使用apktool&
& & &将要反编译的apk放在已经下载的apktool.bat所在目录,如下图:
& & & & &然后cmd命令行输入apktool d -f xxx.apk tt &注意:xxx.apk 是要反编译的apk, &tt是把apk反编译后文件放入的地方,特别
提醒,起初不要建这个目录,执行前面的命令后自动生成的。&如果编译成功会生成如下的目录结构
res即为我们要查看的资源文件,有图片,布局等。。。
2.dex2jar工具
&将apk后缀改为zip,打开压缩包,即可以看见classes.dex 将其复制到dex2jar.bat所在的目录,然后在cmd命令行输入dex2jar.bat&&&classes.dex
就会生成classes-dex2jar.dex,如下图所示:
最后一个工具就是用来打开这个jar,查看里面代码的结构。
其中a,b,c等就是被混淆的代码只能看代码结构。
注意:有时候代码反编译会出错,有的是apk混淆原因不能正常反编译,这有一个连接介绍解决问题的办法,很不错的
连接:http://blog.csdn.net/jiangwei/article/details/ &
如果普通的apk不能编译成功就要看下载的apktool工具是否存在问题了。。
其实通过把apk后缀改为zip就可以了,也能看到资源文件,不一定非要apktool,apktool应该是为了再把文件编译为apk吧。。
知道的可以在下面喷了,只是个人一点见解!&
阅读(...) 评论()如何利用dex2jar反编译APK及代码混淆
如何利用dex2jar反编译APK及代码混淆
(一)反编译参考文章:/article/ae97a646ce78c2bbfd461df0.html
1,下载dex2jar和JD-GUI(此处提供工具的下载链接,具体方法和指示图看参考链接)
de2jar下载地址:/s/1pLb57SZ
JD-GUI下载地址:/s/1boGVrY3
这里还有增加一个反编译工具:逆向助手,
下载链接:
/s/1c2KEO6W
用法:二个文件下载解压,放到同一个文件夹下,打开exe,执行逆向,找到你的apk就好了
(二)代码混淆参考文章:/article/495bab3
注意:代码混淆配文件写好后,直接在eclipse里面生成apk是不能被混淆的,必须手动导出
(三)如何手动用Eclipse默认的keystore导出安卓应用参考文章:
/article/3a2f7c2e61395d26afd61193.html
2,找到我们准备测试用的apk,并将
后缀.apk改为.zip
例:test.apk改为test.zip
3,将test.zip解压,并查看目录,找到classes.dex
4,并将classes.dex拷至dex2jar工具存放目录下
5,打开控制台,使用cd指令进入到dex2jar工具存放的目录下
6,进入到dex2jar目录下后,输入“dex2jar.bat&&&
classes.dex”指令运行
& & &执行完毕,查看dex2jar目录,会发现生成了classes.dex.dex2jar.jar文件
7,上一步中生成的classes.dex.dex2jar.jar文件,可以通过JD-GUI工具直接打开查看jar文件中的代码
----------------------------------------------------------------------------------------------------------------------------------
上面说了反编译的方法,现在说代码混淆:
1、修改混淆配置文件:找到项目根目录下的proguard-project.txt文件,修改其中代码,在末尾添加proguard.config=./proguard-android.txt
,这表示用当前目录下的配置文件,这部分是最关键;
2,proguard-android.txt文件编写:
注意:我的方法是,
1)找到sdk的路径C:\Program Files (x86)\Android\android-sdk\tools\proguard\proguard-android.txt
2)把proguard-android.txt文件拷贝到项目里面,如这个文件是默认的混淆文件,下图所示
3)我用了第三方jar
只是在末尾添加了这四个jar的混淆(
-dontwarn okio.**
& & -dontwarn okhttputils.**
& & -dontwarn gson.**)
整混淆文件如下:
is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
# Optimization is turned off by default. Dex does not like code run
# through the ProGuard optimize and preverify steps (and performs some
# of these optimizations on its own).
-dontoptimize
-dontpreverify
# Note that if you want to enable optimization, you cannot just
# include optimization flags in your own projec
# instead you will need to point to the
# &proguard-android-optimize.txt& file instead of this one from your
# project.properties file.
-keepattributes *Annotation*
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
& & native &methods&;
# keep setters in Views so that animations can still work.
# see http://proguard.sourceforge.net/manual/examples.html#beans
-keepclassmembers public class * extends android.view.View {
& &void set*(***);
& &*** get*();
# We want to keep methods in Activity that could be used in the XML attribute onClick
-keepclassmembers class * extends android.app.Activity {
& &public void *(android.view.View);
# For enumeration classes, see http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
& & public static **[] values();
& & public static ** valueOf(java.lang.String);
-keep class * implements android.os.Parcelable {
& public static final android.os.Parcelable$Creator *;
-keepclassmembers class **.R$* {
& & public static &fields&;
# The support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. &We know about them, and they are safe.
-dontwarn android.support.**
-dontwarn okio.**
-dontwarn okhttp.**
-dontwarn okhttputils.**
-dontwarn gson.**
4)直接运行的方式是不能应用proguard的。正确的方式是使用Eclipse的导出功能。在工程上右键-&&Export...&-&“Export
Android Application”,导出apk包。可以使用Eclipse默认的keystore,具体的使用方法请参考小编前面一个文档/article/3a2f7c2e61395d26afd61193.html。
5)用dex2jar反编译导出的proguard_demo.apk,然后用jd-jui打开就看到代码呗混淆了
以上只是反编译和混淆的基础,混淆方面,我用的系统默认的混淆文件,然后添加了自己用的混淆的jar
我的热门文章
即使是一小步也想与你分享

我要回帖

更多关于 dex2jar反编译失败 的文章

 

随机推荐