Android 反编译apk 到java源码的方法
安卓apk反编译
反编译jar包
• jd-gui.exe
– 直接用此工具打开jar包
如何防止代码被反编译
• 由于apk是Android虚拟机加载的,它有一定的 规范,加密apk的Dalvik无法识别apk了。完全 避免是不可能的,总有人能够破解你的代码。 但是有几种方式来提高 被反编译取代码的难 度。
– 关键代码使用jni调用本地代码,用c或者c++编写, 因此相对比较难于反编译。 – 混淆java代码。混淆是不改变代码逻辑的情况下, 增加无用代码,或者重命名,使反编译后的源代码 难于看懂。网上开源的java代码混淆工具较多,一 般是用ant的方式来编译的
反编译
• • • •
程序的打包与安装过程 反编译资源文件 反编译dex文件 反编译jar包
程序的打包与安装过程
Android package(.apk)
Android project
Compliation And packaging
.dex files
Resource s.sources
Androidmanifest .xml
signin g
Device
反编译资源文件
• 工具
– apktool
• 将xml文件反编译出来,读取应用程序的资源信息
反编译dex文件
• dex2jar
– android应用程序中所有的字节码被放到 classes.dex文件中去 – 将classes.dex编译成classes_dex2jar.jar
Android-程序反编译
同样为了比对我们看一下ApkInstaller.java的源代码如下:
view plaincopy to clipboardprint?packagecom.tutor.apkinstaller;importandroid.app.Activity;importandroid.os.Bundle;importandroid.webkit.WebSettings;importandroid.webkit.WebView;publicclassApkInstallerextendsActivity{privateWebViewapkWeb;@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(yout.main);apkWeb=(WebView)findViewById(R.id.apk_web);WebSettingswebSettings=apkWeb.getSettings();webSettings.setJavaScriptEnabled(true);StringapkUrl="/apk/demos/main/index.html#home";apkWeb.loadUrl(apkUrl);}}package com.tutor.apkinstaller;import android.app.Activity;import android.os.Bundle;import android.webkit.WebSettings;import android.webkit.WebView;public class ApkInstaller extends Activity { private WebView apkWeb; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(yout.main); apkWeb = (WebView)findViewById(R.id.apk_web); WebSettings webSettings = apkWeb.getSettings(); webSettings.setJavaScriptEnabled(true); String apkUrl = "/apk/demos/main/index.html#home"; apkWeb.loadUrl(apkUrl); }}
androidapk包反编译成java文件
androidapk包反编译成java⽂件
最近公司做了⼀个app项⽬,安装成功后使⽤了⼀段时间,发现了⼀些问题需要修改,但外包公司没有提供源码,为了快速修改并解决问题,公司决定⾃⼰动⼿反编译apk包,经过查询资料,使⽤以下⽅法可以完成。
⼀、把apk包后缀改为zip
⼆、解压Zip得到classes.dex⽂件
三、
我们需要⽤到dex2jar 把dex⽂件转为jar⽂件
把解压得到的classes.dex⽂件放⼊dex2jar.bat所在⽬录
四、在classes.dex所在⽂件夹下shift+右键--》在此处打开命令窗⼝-->输⼊启动⽂件名(.bat⽂件名)
和classes.dex
成功后会在classes.dex⽂件夹⽣成对应的jar包
五、下载jd-gui(本⼈把它称作:京东-贵)
下载后解压得到
六、双击
得到:
七、点击file--》open找到对应的jar包就可以得到对应的java⽂件了,然后file--》saveallsources保存即可得到java源码。
【推荐下载】apk反编译详解
apk 反编译详解2017/07/03 0 文章背景开发或学习Android 的时候,往往会涉反编译来借鉴别人的java 文件和布局等资源文件。
假如不小心把自己的源码弄丢了,也要经过反编译安卓在自己手机上的apk 来找回源码。
文章目标反编译工具分享反编译经验分享工具下载地址download.csdn/download/xinanheishao/9888288官方最新版本下载地址apktool: (要翻墙)https://code.google/p/android- apktool/downloads/list (不用翻墙)https://bitbucket/iBotPeaches/apktool/downloads/ dex2jar: code.google/p/dex2jar/downloads/listjd-gui: code.google/p/innlab/downloads/list工具介绍apktool 作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看dex2jar 作用:将apk 反编译成Java 源码(classes.dex 转化成jar 文件)jd-gui 作用:查看APK 中classes.dex 转化成出的jar 文件,即源码文件反编译详细步骤(app-debug.apk 为例)1、下载工具,并将其一一解压,的到一下文件,如图所示2、配置apktool 环境变量,注意观察我的apktool 在磁盘上的路径3、配置dex2jar 环境变量,注意观察我的dex2jar 在磁盘上的路径4、使用dex2jar 反编译java 文件a、新建一个文件夹,把要编译的apk 文件放入其中b、将要反编译的APK 后缀名改为.rar 或则.zip,并解压,得到其中的额classes.dex 文件(它就是java 文件编译再通过dx 工具打包而成的)c、将获取到的classes.dex 放到之前解压出来的工具dex2jar-0.0.9.15 文件夹内。
Apk反编译
Apk反编译1.获取xml文件信息要用到apktool工具,利用工具包Androidby下的“Androidby反编译工具.exe”反编译syslog.apk反编译出来的文件夹syslog跟syslog.apk是在同一层:2.反编译dex获取java源代码Apltool只能编译smail,不能编译dex文件,所以要用到dex2jar文件用dex2jar文件下的“dex2jar.bat”操作,直接将syslog文件夹下的“classes.dex”拖到“dex2jar.bat ”文件下编译,得到“classes_dex2jar.jar”文件,该文件与“classes.dex”在同一层;利用dex2jar\jd-gui-0.3.5.windows文件夹下的‘jd-gui.exe’查看得到的‘classes_dex2jar.jar’文件查看结果如下:详细分析:1:注册消息:病毒注册并响应了3个消息,分别是:启动完成、监控拨出电话、接收短信,以便实现对应的功能。
注册服务:实现服务的定时启动2:权限:android.permission.READ_PHONE_STATE读取电话状态android.permission.MODIFY_PHONE_STATE修改电话状态android.permission.BROADCAST_STICKY允许一个程序广播常用intentsandroid.permission.PROCESS_OUTGOING_CALLS允许程序监视、修改有的是关播出电话android.permission.RECEIVE_BOOT_COMPLETED开机自动启动android.permission.UPDATE_DEVICE_STATS更新设备状态android.permission.INTERNAL_SYSTEM_WINDOW允许打开窗口使用系统用户界面android.permission.ADD_SYSTEM_SERVICE允许程序发布系统级服务android.permission.VIBRATE允许访问振动设备android.permission.SEND_SMS允许发送短息android.permission.RECEIVE_SMS允许拦截接收短信android.permission.READ_SMS允许读短信数据库android.permission.WRITE_SMS允许修改短信数据库android.permission.INTERNET允许连接网络android.permission.CHANGE_CONFIGURATION允许一个程序修改当前设置,如本地化android.permission.WAKE_LOCK允许使用PowerManager的WakeLocks保持进程在休眠时从屏幕消失android.permission.STATUS_BAR允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序android.permission.ACCESS_WIFI_STATE允许程序访问Wi-Fi网络状态信息android.permission.DEVICE_POWER允许访问底层电源管理android.permission.DISABLE_KEYGUARD允许程序禁用键盘锁android.permission.WRITE_APN_SETTINGS允许程序写入API设置android.permission.CHANGE_WIFI_STATE允许程序改变Wi-Fi连接状态android.permission.ACCESS_NETWORK_STATE允许程序访问有关GSM网络信息android.permission.CHANGE_NETWORK_STATE允许程序改变网络连接状态android.permission.BROADCAST_SMS允许程序广播一条短信回执android.permission.WRITE_SETTINGS允许程序读取或写入系统设置android.permission.WRITE_EXTERNAL_STORAGE允许写SD卡不法分子就通过这些来获取:1. str2 =localCursor.getString(localCurso r.getColumnIndexOrThrow("address")).toString();//读取电话号码2. Date localDate = newDate(Long.parseLong(localCursor.getString(localCursor.getClumnIndexOrThrow("date")).toString()));//读取时间3.((AlarmManager)paramContext.getSystemService("alarm")).set(2, SystemClock.elapsedRealtime() + paramInt * 1000,pendingIntent); //我们设定一个时间,然后在该时间到来时,AlarmManager为我们广播一个我们设定的Intent,启动后台4.Cursor localCursor =paramContext.getContentResolver().query(localUri, null,null, null, null);//通过游标查询出收件箱的地址5. 每隔1500s发送一次报告public static final int TimerReportInSeconds= 1500;6.如果接收到的短信以”,”开始,则清除控制信息,同时提取短信中的号码并发送报告。
Android开发之反编译与防止反编译
Android开发之反编译与防止反编译Android开发之反编译与防止反编译防止反编译是每个程序员的必修课,因为当你辛辛苦的研发一个应用,被人家三下五除二给反编译了,是一件多么尴尬的事啊。
那么如何防止反编译啊?这里就用Google Android自带的代码混编的方式来防止反编译。
孙子兵法中讲得好:“知彼知己百战不殆”,所以在讲解防止反编译之前,先让我们了解一下如何反编译一个应用。
一、反编译Android应用实验环境:Windows8.1企业版、dex2jar-0.0.9.9反编译工具包:Android反编译工具包(升级版)1.将Apk反编译得到Java源代码具体步骤:1) 首先将apk文件后缀改为zip并解压,得到其中的classe s.dex,它就是java文件编译再通过dx工具打包而成的,将classes.d ex复制到dex2jar.bat所在目录dex2jar-0.0.9.9文件夹。
在命令行下定位到dex2jar.bat所在目录,运行dex2jar.bat classes.dex如图:生成classes_dex2jar.jar如图:2) 进入jdgui文件夹双击jd-gui.exe,打开上面生成的jar包c lasses_dex2jar.jar,即可看到源代码了,如下图:2. 将apk反编译生成程序的源代码和图片、XML配置、语言资源等文件具体步骤:1) 下载上述反编译工具包,打开apk2java目录下的apktool1.4. 1文件夹,内含三个文件:apktool.jar ,aapt.exe,apktool.bat,注:里面的apktool_bk.jar是备份的老版本,最好用最新的apkt ool.jar在命令行下定位到apktool.bat文件夹,输入以下命令:apktoo l.bat d -f abc123.apk abc123如下图:上图中,apktool.bat命令行解释:apktool.bat d -f [apk文件 ] [输出文件夹][html] view plain copy1.<?xml version="1.0"encoding="utf-8"?>2.<manifest android:versionCode="1"android:versionNam e="1.0"package="com.jph.recorder"3.xmlns:android="/apk/res/android">4.<uses-sdk android:minSdkVersion="8"android:targetSdk Version="18"/>5.<uses-permission android:name="android.permission.W RITE_EXTERNAL_STORAGE"/>6.<uses-permission android:name="android.permission.R ECORD_AUDIO"/>7.<uses-permission android:name="android.permission.VI BRATE"/>8.<uses-permission android:name="android.permission.SE ND_SMS"/>9.<application android:theme="@style/AppTheme"androi d:label="@string/app_name"android:icon="@drawable/ic_laun cher"android:allowBackup="true">10.<activity android:label="@string/app_name"android: name="com.jph.recorder.Recorder">11.<intent-filter>12.<action android:name="android.intent.action.MAIN "/>13.<category android:name=" UNCHER"/>14.</intent-filter>15.</activity>16.<activity android:label="@string/show_recordFile"an droid:name="com.jph.recorder.ShowRecordFiles"/>17.<activity android:theme="@android:style/Theme.Dial og"android:name=".AboutActivity"/>18.<activity android:label="@string/feedback_label"and roid:name=".FeedBackActivity"/>19.<service android:name="com.jph.recorder.RecordServ ice"/>20.</application>21.</manifest>将反编译完的文件重新打包成apk,很简单,输入apktool.bat b abc123(你编译出来文件夹)即可,命令如下:打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹:builddist其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok3. 图形化反编译apk上述步骤一、二讲述了命令行反编译apk,现在提供一种图形化反编译工具:Androidfby首先,下载上述反编译工具包,打开Androidfby目录,双击An droid反编译工具.exe,就可以浏览打开要反编译的apk文件。
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在此郑重声明:分享此文,不是为了破解别人的软件,完全是一种学习态度,代码要自己手敲出来才会有感情的。
AndroidStudio反编译APK获取代码资源
AndroidStudio反编译APK获取代码资源
1.要准备的三个⼯具
1. apktool:获取资源⽂件,提取图⽚⽂件,布局⽂件,还有⼀些XML的资源⽂件
2. dex2jar:将APK反编译成Java源码(将classes.dex转化为jar⽂件)
3. jd-gui:查看2中转换后的jar⽂件,即查看Java⽂件
2.使⽤apktool反编译APK获得图⽚与XML资源:
把下载好的apktool解压后,我们可以看到下述⽂件(忽略那两个csdn,⼀个是反编译的apk,⼀个是反编译后⽂件):
接下来,双击cmd.exe,来到命令⾏,键⼊: apktool.bat d csdn.apk 即可,Enter回车:
然后就可以看到⽣成的csdn⽂件夹,⾥⾯就有我们想要资源
好的,就是XML资源到⼿了是吧!图⽚素材也到⼿了!
3.使⽤dex2jar将classes.dex转换成jar⽂件:
把下载好的dex2jar⽂件夹解压,apk解压后中的classes.dex复制到dex2jar.bat所在的⽬录下:
打开cmd,来到这个⽬录下:键⼊:d2j-dex2jar.bat classes.dex
接着我们可以看到,⽣成了⼀个jar包:
好的,转换完成!
4.使⽤jd-gui查看jar包中的Java代码:
好的,打开jd-gui的⽂件夹
打开后,打开我们3中转换后的jar包,我们可以看见⾥⾯的代码:
csdn的客户端竟然不混淆代码...可能是本着开源的精神吧,给我们学习代码吧!⼀般的话,apk发布都会进⾏混淆,然后进⾏⼀些加密,或者使⽤第三⽅的加密平台,⽤的⽐较多的"爱加密",有兴趣的也⾃⾏百度查看更加详细的介绍!。
Android反编译技术流程
Android反编译技术流程为何需要反编译作为⼀名Android开发者,很多的时候需要去学习别⼈优秀的代码,原本在GitHub上就有很多开源的项⽬代码,但有的时候在使⽤软件时候遇到⾃⼰想要的功能时,想要学习实现的代码时,这时候就需要使⽤到反编译这项技术了。
什么是反编译总的来说反编译指两个部分的反编译,⼀个是代码的反编译(src),⼀个是资源的反编译(res)。
反编译的⼯具这⾥同样分成两个部分,⼀个是代码的反编译⼯具,⼀个是资源的反编译⼯具。
代码反编译的⼯具:与:dex2jar将Android APK内的dex转化为jar⽂件,然后使⽤jd-gui可以查看,保存为java⽂件。
:jadx是⼀个⾮常好⽤的反编译⼯具,可以原作者已经没有维护了。
但也不妨成为⼀个经典⼯具。
反编译资源的⼯具::使⽤APKTool将布局图⽚等资源可以提取出来。
反编译的流程在这⾥我⽤⼀个之前编写的⼀个简单软件来作为演⽰。
(Ⅰ). ⾸先需要拿到反编译的软件,拿到的软件⼀般是xxx.apk,但有的时候拿到的软件会是xxx.apk和xxx.odex,后者是平台优化过的产物,关于xxx.apk与xxx.odex的合并会在另⼀篇⽂章中讲到。
拿到完整apk以后,⼿就可以着⼿反编译的⼯作了。
(Ⅱ). 反编译资源⽂件:java -jar apktool_2.3.1.jar d -f KeyValueTest.apk -o KeyValueTest执⾏以上命令以后如下未报错则说明反编译成功:参数说明:-f 如果⽬标⽂件夹已存在,则强制删除现有⽂件夹(默认如果⽬标⽂件夹已存在,则解码失败)。
-o 指定解码⽬标⽂件夹的名称(默认使⽤APK⽂件的名字来命名⽬标⽂件夹)。
-s 不反编译dex⽂件,也就是说classes.dex⽂件会被保留(默认会将dex⽂件解码成smali⽂件)。
-r 不反编译资源⽂件,也就是说resources.arsc⽂件会被保留(默认会将resources.arsc解码成具体的资源⽂件)此时便在当前⽂件夹下⽣成了⼀个KeyValueTest⽂件夹在这个⽂件夹下⾯便是反编译出来的资源⽂件,我们只需要res⽬录和AndroidManifest.xml⽂件。
详解Android的反编译和代码混淆
详解Android的反编译和代码混淆前⾔包括以下内容1. 要反编译apk需要下⾯3个⼯具2. 反编译资源⽂件3. 反编译类⽂件4. 代码混淆要反编译apk需要下⾯3个⼯具1、apktool(资源⽂件获取)作⽤:资源⽂件获取,可以提取图⽚⽂件和布局⽂件进⾏使⽤查看2、dex2jar(源⽂件获取)作⽤:将APK反编译成java源码(classes.dex转化成jar⽂件)3、jd-gui作⽤:查看APK中classes.dex转化成的jar⽂件,即源码⽂件下⾯进⾏反编译资源⽂件和类⽂件:反编译资源⽂件资源⽂件:包括图⽚资源、布局资源、动画、样式等其他资源这样资源⽂件都可以看得到了。
反编译类⽂件⽅式⼀:反编译得到Java类1.下载并解压dex2jar-2.0,得到dex2jar-2.0⽂件夹,⾥⾯包含dex2jar.bat及其⽂件2.将apk⽂件改为xx.zip⽂件,并解压得到classes.dex⽂件,并将其复制到dex2jar-2.0⽂件夹中3⽣成⼀个classes-dex2jar.jar⽂件,使⽤jd-gui.exe打开⽣成的classes-dex2jar.jar⽂件⽅式⼆:直接使⽤smali2java⼯具什么是smali?smali是将Android字节码⽤可阅读的字符串形式表现出来的⼀种语⾔,可以称之为Android字节码的反汇编语⾔。
代码混淆只能混淆java类,不能混淆资源⽂件。
系统定义的组件不能混淆。
必须是导出的apk。
如何实现代码混淆混淆类⽂件修改module:app下的build.gradlebuildTypes {release {//是否需要混淆,默认false代表不混淆,true代表混淆minifyEnabled true//混淆需要⽤到的⼀个⼯具:proguard,对应的⼀个⽂件是:proguard-android.txt(这个⽂件在android-sdk \tools\proguard⽬录下)//proguard是⼀个压缩、优化和混淆Java字节码⽂件的免费⼯具proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}在proguard-rules.pro中添加:把下⾯代码,放⼊proguard-rules.pro⽂末:#指定代码的压缩级别-optimizationpasses 5#包明不混合⼤⼩写-dontusemixedcaseclassnames#不去忽略⾮公共的库类-dontskipnonpubliclibraryclasses#优化不优化输⼊的类⽂件-dontoptimize#预校验-dontpreverify#混淆时是否记录⽇志-verbose# 混淆时所采⽤的算法-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*#保护注解-keepattributes *Annotation*# 保持哪些类不被混淆-keep public class * extends android.app.Fragment-keep public class * extends android.app.Activity-keep public class * extends android.app.Application-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider-keep public class * extends android.app.backup.BackupAgentHelper-keep public class * extends android.preference.Preference-keep public class com.android.vending.licensing.ILicensingService#如果有引⽤v4包可以添加下⾯这⾏-keep public class * extends android.support.v4.app.Fragment#忽略警告-ignorewarning##记录⽣成的⽇志数据,gradle build时在本项⽬根⽬录输出###apk 包内所有 class 的内部结构-dump class_files.txt#未混淆的类和成员-printseeds seeds.txt#列出从 apk 中删除的代码-printusage unused.txt#混淆前后的映射-printmapping mapping.txt########记录⽣成的⽇志数据,gradle build时在本项⽬根⽬录输出-end###### #####混淆保护⾃⼰项⽬的部分代码以及引⽤的第三⽅jar包library########-libraryjars libs/umeng-analytics-v5.2.4.jar#三星应⽤市场需要添加:sdk-v1.0.0.jar,look-v1.0.1.jar#-libraryjars libs/sdk-v1.0.0.jar#-libraryjars libs/look-v1.0.1.jar#如果不想混淆 keep 掉-keep class com.lippi.recorder.iirfilterdesigner.** {*; }#友盟-keep class com.umeng.**{*;}#项⽬特殊处理代码#忽略警告-dontwarn com.lippi.recorder.utils**#保留⼀个完整的包-keep class com.lippi.recorder.utils.** {*;}-keep class com.lippi.recorder.utils.AudioRecorder{*;}#如果引⽤了v4或者v7包-dontwarn android.support.**####混淆保护⾃⼰项⽬的部分代码以及引⽤的第三⽅jar包library-end####-keep public class * extends android.view.View {public <init>(android.content.Context);public <init>(android.content.Context, android.util.AttributeSet);public <init>(android.content.Context, android.util.AttributeSet, int);public void set*(...);}#保持 native ⽅法不被混淆-keepclasseswithmembernames class * {native <methods>;}#保持⾃定义控件类不被混淆-keepclasseswithmembers class * {public <init>(android.content.Context, android.util.AttributeSet);}#保持⾃定义控件类不被混淆-keepclassmembers class * extends android.app.Activity {public void *(android.view.View);}#保持 Parcelable 不被混淆-keep class * implements android.os.Parcelable {public static final android.os.Parcelable$Creator *;}#保持 Serializable 不被混淆-keepnames class * implements java.io.Serializable#保持 Serializable 不被混淆并且enum 类也不被混淆-keepclassmembers class * implements java.io.Serializable {static final long serialVersionUID;private static final java.io.ObjectStreamField[] serialPersistentFields;!static !transient <fields>;!private <fields>;!private <methods>;private void writeObject(java.io.ObjectOutputStream);private void readObject(java.io.ObjectInputStream);ng.Object writeReplace();ng.Object readResolve();}#保持枚举 enum 类不被混淆如果混淆报错,建议直接使⽤上⾯的 -keepclassmembers class * implements java.io.Serializable即可#-keepclassmembers enum * {# public static **[] values();# public static ** valueOf(ng.String);#}-keepclassmembers class * {public void *ButtonClicked(android.view.View);}#不混淆资源类-keepclassmembers class **.R$* {public static <fields>;}#避免混淆泛型如果混淆报错建议关掉#–keepattributes Signature#移除log 测试了下没有⽤还是建议⾃⼰定义⼀个开关控制是否输出⽇志#-assumenosideeffects class android.util.Log {# public static boolean isLoggable(ng.String, int);# public static int v(...);# public static int i(...);# public static int w(...);# public static int d(...);# public static int e(...);#}#如果⽤⽤到Gson解析包的,直接添加下⾯这⼏⾏就能成功混淆,不然会报错。
android 反编译apk文件
android 反编译apk文件一般的apk文件如果后缀改为rar并解压的话,可以得到一些图片资源,和一堆打开乱码的文件。
但我们往往想要的是得到它的xml文件学习下怎么布局的,或者看看它的源码学习下优秀程序的思路。
这时就要借助以下工具对apk进行反编译了。
一、工具准备:apktool , dex2jar , jd-gui工具包也可以在这里下载。
1、dex2jar可以在这里下载,jd-gui可以在这里下载。
2、apktool,可以去Google的官方下载,apktool-1.0.0.tar.bz2(里面有apktool.jar)和apktool-install-windows-2.1_r01-1.zip两个包都要下。
解压apktool.jar到C:\Windows,解压apktool-install-windows.zip到任意文件夹(例如E盘根目录)。
二、使用dex2jar + jd-gui 得到apk的java源码,步骤如下:1、用.rar打开apk文档,将classes.dex文件解压出来,然后使用工具反编译成.jar文件。
在cmd下进入dex2jar.bat所在路径,然后输入“dex2jar.bat XXX”,XXX指的是你要反编译的apk中的classes.dex文件所在路径及名称,比如:我的dex2jar.bat在D:\Android\apk_decode\dex2jar-0.0.7-SNAPSHOT路径下, classes.dex在D:\Android下,所以:你进入dex2jar.bat路径下后,输入dex2jar.bat D:\Android\classes.dex,这样会生成一个jar文件。
2.用jd-gui反编译工具将得到.jar文件反编译成.java文件三、使用apktool得到apk的xml文件1、Win+R 运行CMD,用cd命令转到apktool-install-windows所在文件夹,输入命令:apktool d XXX.apk ABC 反编译XXX.apk到文件夹ABC2、在解压后的文件夹中可以得到apk的xml配置文件四、第二步得到的程序源代码和第三步得到的xml文件组合下,就成一个android工程,即可得到完整的apk源码。
android反编译
Android APK反编译详解(附图)分类:Android 2011-08-28 22:42 29996人阅读评论(31) 收藏举报这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。
在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。
一、反编译Apk得到Java源代码首先要下载两个工具:dex2jar和JD-GUI前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。
以下是下载地址:dex2jar:/files/dex2jar-0.0.7-SNAPSHOT.zipJD-GUI:/files/jdgui.zip具体步骤:首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java 文件编译再通过dx工具打包而成的;解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。
在命令行下定位到dex2jar.bat所在目录运行dex2jar.bat classes.dex生成classes.dex.dex2jar.jar生成jar文件的截图如下:运行JD-GUI(jd-gui.exe),打开上面生成的jar包,即可看到源代码了HelloAndroid源码(编译前的apk源码对照)如下:二、反编译apk生成程序的源代码和图片、XML配置、语言资源等文件如果是只是汉化软件,这将特别有用。
首先还是下载工具,这次用到的是apktool下载地址:/p/android-apktool/downloads/list下载:apktool1.4.1.tar.bz2和apktool-install-windows-r04-brut1.tar.bz2(两个包都下载)具体步骤:将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar在命令行下定位到apktool.bat文件夹,输入以下命令:apktool d C:\*.apk C:\*文件夹,如下图:命令行解释:apktool d [apk文件 ] [输出文件夹]反编译的文件如下(AndroidManifest.xml为例):特别注意:你要反编译的文件一定要放在C盘的根目录里将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可,命令如下:打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹:builddist其中,打包生成的HelloAndroid.apk,在上面的dist文件夹下,Ok注:本android反编译教程,是在Windows 7 Ultimate 64bit ,测试通过上述反编译工具包下载另外,作为应用开发者,肯定不希望自己的代码被反编译的,下一遍博客中讲述如何通过混淆代码放在反编译:Android如何防止apk程序被反编译。
android apk修改方法(反编译、修改、打包)
1、baksmali:classes.dex反编译为smali格式(smali:smali格式编译打包为classes.dex,但由于smali格式类似汇编,比较难阅读,所以用dex2jar进行辅助)2、dex2jar:classes.dex转为jar包3、jdgui:jar反编译并阅读操作顺序:apk用zip解开,里面的classes.dex分别用baksmali处理为smali,用dex2jar 处理成jar,然后用jdgui看代码,找好java文件中要改的位置后,在smali 里找对应的位置修改,改完了用smali再编译为classes.dex,覆盖原来apk里的同名文件,最后重新签名。
注意安装时要先删除原来手机里的版本,因为签名不同。
1、apk用zip解开,得到classes.dex2、用baksmali处理为smali(只是反编译看代码就不需要这一步,修改才用) java -jar baksmali-1.4.1.jar -x classes.dex得到out目录,里面是smali文件3、用dex2jar处理classes.dex为jar包dex2jar.bat classes.dex得到classes.dex.dex2jar.jar4、用jdgui打开classes.dex.dex2jar.jar好了,可以看代码,但还不能直接修改,需要对比着来修改smali文件改好后,用java -jar smali-1.2.6.jar -o classes.dex out得到修改后的classes.dex,用这个文件替换fishing_joy_1.apk中的同名文件但这个apk是不能用的,还没有进行重新签名先用keytool生成keystorekeytool -genkey -keystore mykeystore -alias mykeystore -validity 999 把apk中的META-INF删除,再用jarsigner 签名jarsigner -verbose -keystore mykeystore -signedjar fishing_joy_1_signed.apk fishing_joy_1.apk mykeystore先卸载原来手机中安装的这个游戏,再用fishing_joy_1_signed.apk安装最后工作目录是这个样子。
安卓apk反编译查看源代码
安卓apk反编译查看源代码
相信很多初学者很像看看大公司比如jd,qq,淘宝手机端的商城是如何开发的,对于java开发的系统来说,大家都知道,反编译是容易的事情,如果换成android的,安装文件变成apk,那么又是什么情况了
带着好奇,我googl e了一下,分享一下:
反编译apk文件,得到其源代码的方法!!
dex2jar和JD-GUI这2个工具配合学习android太靠谱了,所以放上来给大家共享,开源的好处就是好东西大家一起分享。
dex2jar下载地址:http://laichao.googl /fil es/dex2jar-0.0.7-SNAPSHOT.zip
JD-GUI下载地址:http://cod e.googl /p/dex2jar/ 请下载最新版的,旧版本有bug
1.首先找到Android软件安装包中的classes.dex
方法是把apk文件改名为.zip,然后解压缩其中的classes.dex文件,它就是java文件编译再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java源文件
2.把classes.dex拷贝到dex2jar.bat所在目录。
windows系统下:
在命令行模式下定位到dex2jar.bat所在目录,运行dex2jar.bat classes.dex ,生成classes.dex.dex2jar.jar linux、Ubuntu系统下:在终端下定位到dex2jar.sh所在目录,运行
sh dex2jar.sh classes.dex
则可生成classes.dex.dex2jar.jar
3.运行JD-GUI工具(它是绿色无须安装的)
打开上面的jar文件,即可看到源代码
来源:清源教育。
Android_反编译apk_到java源码的方法
Android 反编译apk 到java源码的方法分类:Android 2010-12-31 15:46 1931人阅读评论(1) 收藏举报Apk文件破解可见源码1.获取apk的资源图片直接用WinRAR打开,res/drawable直接拖拽出来即可。
2.获取xml文件信息虽然能用WinRAR看到里面的xml文件,但是xml是经过优化的,无法直接查看,需要使用apktool工具,下载地址:https:///p/android-apktool/。
下载apktool-1.3.1.tar.bz2和apktool-install-windows-2.2_r01-2.tar.bz2解压到同一个目录,然后把待破解的apk文件拷贝到同一目录,DOS在cmd下进入apktool 所在路径,然后输入apktool d "XXX1" "XXX2",XXX1指的是你要反编译的apk文件,XXX2指的是反编译后文件存放的路径,如:apktool d "C:/taobao.apk" "C:/taobao"3 .反编译dex获取Java源代码Apktool工具只能反编译成smali的中间代码文件,这里需要借助另外一个开源工具:dex2jar,下载地址:/p/dex2jar/。
这个工具不能直接翻译成java文件,但是可以把dex文件转换成jar文件,然后可以通过jad工具把jar文件反编译成Java源文件,jd-gui下载地址:http://java.decompiler.free.fr/jd-gui/downloads/jd-gui-0.3.3.windows.zip。
详细步骤:解压apk文件,直接拖拽(rar解压软件),找到classes.dex文件在cmd下进入dex2jar.bat所在路径,然后输入“dex2jar.bat XXX”,XXX指的是你要反编译的apk中的classes.dex 文件所在路径及名称(classes上面解压得到),如:dex2jar.bat D:/classes.dex;这样会生成一个classes.dex.dex2jar.jar文件,然后用jd-gui工具将jar文件反编译成java文件,选择保存所有,它会生成一个压缩文件,所有的源码都在这个压缩文件中,解压了就可以看到详细的代码了。
Android软件代码反编译方法
Google Android平台选择了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,类似Sun JavaMe 的Jar压缩格式一样,不过比较去别的是Android上的二进制代码被编译成为Dex的字节码,所有的Java文件最终会编译进该文件中去,作为托管代码既然虚拟机可以识别,那么我们就可以很轻松的反编译。
所有的类调用、涉及到的方法都在里面体现到,至于逻辑的执行可以通过实时调试的方法来查看,当然这需要借助一些我们自己编写的跟踪程序。
Google最然在Android Market上设置了权限保护app-private文件夹的安全,但是最终我们使用修改定值的系统仍然可以获取到需要的文件。
dexdump是emulator自带提供的查看dex文件的工具,可使用类似这样的命令将dex文件dump到txt文件中:D:\ProgramFiles\android-sdk-windows-1.6_r1\platforms\android-1.6\tools> dexdump.exe -d classes.dex > spk.dump.txt得到的文件内容,描述了类的信息,但是不怎么好阅读这个方法就强大了,AXMLPrinter2是还原AndroidManifest.xml和main.xml的工具,直接打开这两个xml文件是乱码,而通过还原之后,可以很明白的看到里面的内容(我猜测还是使用了字节异或的方式加的密)。
baksmali.jar是反解析dex的工具,smali.jar则是再还原成dex的工具操作方式如下:1.1、java -jar AXMLPrinter2.jar D:\play\AndroidManifest.xml >AndroidManifest.txt2.2、java -jar AXMLPrinter2.jar D:\play\res\layout\main.xml > main.txt3.3、java -jar baksmali-1.2.5.jar -o classout/d:\play\classes.dex复制代码baksmali可解析(注意,是解析,不是反编译)原java包以及引用的lib包,解析出的文件认真看还是能看懂,比如以下片段:1.2.3.view plaincopy to clipboardprint?4..class Lcom/paul/test/a;5..super Landroid/view/View;6.7.# static fields8..field private static final a:Landroid/graphics/Typeface;9.10.# instance fields11..field private b:I12..field private c:I13..field private d:Z14..field private e:J15..field private f:I16..field private l:[Ljava/lang/String;17.18.# direct methods19..method static constructor <clinit>()V20. .registers 221. sget-object v0,Landroid/graphics/Typeface;->SANS_SERIF:Landroid/graphics/Typeface;22. const/4 v1, 0x023. invoke-static {v0, v1},Landroid/graphics/Typeface;->create(Landroid/graphics/Typeface;I)La ndroid/graphics/Typeface;24. move-result-object v025. sput-object v0,Lcom/wiyun/ad/a;->a:Landroid/graphics/Typeface;26. return-void27..end method28.#29.# other methods ..........30.#31.# virtual methods32..method public onKeyUp(ILandroid/view/KeyEvent;)Z33. .registers 434. const/16 v0, 0x4235. if-eq p1, v0, :cond_836. const/16 v0, 0x1737. if-ne p1, v0, :cond_b38. :cond_839. invoke-direct {p0}, Lcom/paul/test/a;->d()V40. :cond_b41. const/4 v0, 0x042. invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)V43. invoke-super {p0, p1, p2},Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z44. move-result v045. return v046..end method47..class Lcom/paul/test/a;48..super Landroid/view/View;49.50.# static fields51..field private static final a:Landroid/graphics/Typeface;52.53.# instance fields54..field private b:I55..field private c:I56..field private d:Z57..field private e:J58..field private f:I59..field private l:[Ljava/lang/String;60.61.# direct methods62..method static constructor <clinit>()V63. .registers 264. sget-object v0,Landroid/graphics/Typeface;->SANS_SERIF:Landroid/graphics/Typeface;65. const/4 v1, 0x066. invoke-static {v0, v1},Landroid/graphics/Typeface;->create(Landroid/graphics/Typeface;I)La ndroid/graphics/Typeface;67. move-result-object v068. sput-object v0,Lcom/wiyun/ad/a;->a:Landroid/graphics/Typeface;69. return-void70..end method71.#72.# other methods ..........73.#74.# virtual methods75..method public onKeyUp(ILandroid/view/KeyEvent;)Z76. .registers 477. const/16 v0, 0x4278. if-eq p1, v0, :cond_879. const/16 v0, 0x1780. if-ne p1, v0, :cond_b81. :cond_882. invoke-direct {p0}, Lcom/paul/test/a;->d()V83. :cond_b84. const/4 v0, 0x085. invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)V86. invoke-super {p0, p1, p2},Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z87. move-result v088. return v089..end method90.复制代码认真一看,就知道:# static fields 定义静态变量的标记# instance fields 定义实例变量的标记# direct methods 定义静态方法的标记# virtual methods 定义非静态方法的标记以onKeyUp方法为例,其中定义了处理逻辑,if-eq p1, v0, :cond_8 表示如果p1和v0相等,则执行cond_8的流程:1.2. :cond_83. invoke-direct {p0}, Lcom/paul/test/a;->d()V4.复制代码调用com.paul.test.a的d()方法不相等:if-ne p1, v0, :cond_b 则执行cond_b的流程:1.2. :cond_b3. const/4 v0, 0x04.5. invoke-virtual {p0, v0}, Lcom/paul/test/a;->setPressed(Z)V6.7. invoke-super {p0, p1, p2},Landroid/view/View;->onKeyUp(ILandroid/view/KeyEvent;)Z 8.9. move-result v010.复制代码大概意思就是调用com.paul.test.a的setPressed方法,然后再调用父类View的onKeyUp方法最后1.return v0复制代码该方法,能把外部引用的lib包类也解析出来,能开到包的全貌。
反编译Apk得到Java源代码(apk xml源文件)
1、下载apktool,可以去Google的官方下载,地址:/p/android-apktool/得,apktool1.3.2.tar.bz2和apktool-install-windows-2.2_r01-3.tar.bz2两个包都要下。
解压apktool1.3.2.tar.bz2得到apktool.jar放到 C:\Windows ,解压apktool-install-windows-2.2_r01-3.tar.bz2到C:\Windows下,记住了,解压后的几个文件放到同一文件夹。
2、打开命令窗口(开始 > 运行,输入cmd,回车。
)进入到apktool.bat的文件夹里。
输入:apktool d C:\***.apk C:\***文件夹(命令行解释:apktool d 要反编译的文件输出文件夹)4、如果出了以下的问题:Exception in thread "main" ng.UnsupportedClassVersionError: Bad version n umber in .class fileat ng.ClassLoader.defineClass1(Native Method)at ng.ClassLoader.defineClass(ClassLoader.java:620)atjava.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)at .URLClassLoader.defineClass(URLClassLoader.java:260)at .URLClassLoader.access$100(URLClassLoader.java:56)at .URLClassLoader$1.run(URLClassLoader.java:195)at java.security.AccessController.doPrivileged(Native Method)at .URLClassLoader.findClass(URLClassLoader.java:188)at ng.ClassLoader.loadClass(ClassLoader.java:306)at uncher$AppClassLoader.loadClass(Launcher.java:268)at ng.ClassLoader.loadClass(ClassLoader.java:251)at ng.ClassLoader.loadClassInternal(ClassLoader.java:319)版本问题,装了个jre6,在360中的软件管家可以找到的,记得装完后配置path路径,果然,ok。
Android开发学习总结(六)——APK反编译
Android开发学习总结(六)——APK反编译 学习和开发Android应⽤有⼀段时间了,今天写⼀篇博客总结⼀下Android的apk⽂件反编译。
我们知道,Android应⽤开发完成之后,我们最终都会将应⽤打包成⼀个apk⽂件,然后让⽤户通过⼿机或者平板电脑下载下来进⾏安装。
正常情况下,Android应⽤打包成apk之后,就⽆法再看到开发这个应⽤时使⽤的资源⽂件以及代码了。
但是我们通过⽹上提供了⼀些⼯具,还是可以将apk进⾏反编译的,apk反编译之后,我们就可以看到开发这个应⽤使⽤的资源⽂件(图⽚)、layout、样式、相关的实现代码等,apk反编译也算是Android开发中⼀个⽐较实⽤的技巧吧,当我们对别⼈开发好的应⽤感兴趣时,我们就可以通过这种技术⼿段将别⼈打包好的apk进⾏反编译,继⽽可以看到我们感兴趣的内容,(注:反编译不是让各位开发者去对⼀个应⽤破解搞重装什么的,主要⽬的是为了促进开发者学习,借鉴好的代码,提升⾃我开发⽔平。
)下⾯就来说说如何将⼀个apk反编译出来。
⼀、准备必要⼯具 ⼯欲善其事,必先利其器,⾸先我们要下载好反编译apk时需要的相关⼯具1.1、使⽤⼯具1. apktool (资源⽂件获取)2. dex2jar(源码⽂件获取)3. jd-gui (源码查看)1.2、⼯具介绍 apktool 作⽤:资源⽂件获取,可以提取出图⽚⽂件和布局⽂件进⾏使⽤查看 dex2jar 作⽤:将apk反编译成java源码(classes.dex转化成jar⽂件) jd-gui 作⽤:查看APK中classes.dex转化成出的jar⽂件,即源码⽂件1.3 apktool下载地址: 下载好之后得到⼀个如下图所⽰的jar⽂件 dex2jar下载地址: 下载完成之后,得到⼀个如下图所⽰的压缩包 jd-gui下载地址: 下载完成之后,得到⼀个如下图所⽰的压缩包: 到此,需要使⽤到的3个相关⼯具都下载好了,在这⾥说明⼀下jd-gui的下载,我从官⽅⽹站上点击下载时会经常出现如下图所⽰的问题 但是多试⼏次⼜可以下载了,所以如果有遇到这个问题的朋友们不妨多试⼏次,或者从别的地⽅下载jd-gui,jd-gui算是做Java开发的⼀个必备⼯具了,⽤它来将class反编译成java源代码是⾮常⽅便的,⽹上搜索⼀下⼀般都可以下载到,只不过版本不⼀定是最新的。
Android开发:APK的反编译(获取代码和资源文件)
Android开发:APK的反编译(获取代码和资源⽂件)⼀、反编译⼯具: 1、APKTool: APKTool是由GOOGLE提供的APK编译⼯具,能够完成反编译及回编译apk的⼯作。
同时,它也有着安装反编译系统apk所需要的framework-res框架,以及清理以前反编译⽂件夹等功能。
APKTool的使⽤需要java⽀持。
2、dex2jar: dex2jar 是将android的.dex⽂件转换成Java的.class⽂件的转换⼯具,如果在转换过程中有问题的话,可以试⽤下其他的版本。
3、jd-gui: JD分为JD-GUI、JD-Eclipse两种运⾏⽅式,JD-GUI是以单独的程序的⽅式运⾏,JD-Eclipse则是以⼀个Eclipse插件的⽅式运⾏。
jd-gui只能查看,不能够将那些⽂件转换成.java⽂件。
⽂件下载地址: 提取码:eeir⼆、APKTool使⽤: 下载好的apktool⽂件夹中包含以下⽂件:aapt.exe、apktool.bat、apktool.jar、cmd.exe. 1、反编译: 将要反编译的apk⽂件复制到该⽂件夹下,打开cmd.exe,进⼊cmd中,执⾏命令:apktool.bat d hotword.apk (不复制也⾏,但是执⾏命令时要使⽤绝对路径写清apk⽂件放置的精确位置) 在apktool⽂件夹下可以看到hotword⽂件夹,⾥⾯存储的有res下的资源⽂件,和各种XML⽂件: 如果你给定的apk反编译⽂件已经存在,那么输⼊完该命令后会提⽰你,并且⽆法执⾏,需要重新修改命令加⼊-f指令: 这样会强⾏覆盖已经存在的⽂件。
2、回编译: 运⾏命令: 参数b代表回编译,hotword则是apk反编译出来的⽂件夹名。
apktool.bat d –f hotword.apkapktool.bat b hotword 回编译完成会在hotword⽂件夹⽣成⼀个dist⽂件夹和⼀个build⽂件夹,dist⽂件夹⾥⾯存放的就是回编译后不带有签名的apk⽂件,build⽂件夹⾥⾯还有⼀个apk⽂件夹,⾥⾯存放的是回编译后没有打包成apk的⽂件。
AndroidApk的反编译和加密
AndroidApk的反编译和加密 这⼏天在上海出差,忙⾥偷闲学习了⼀下Apk的反编译⼯具的基本使⽤。
下⾯就简单介绍⼀下如何将我们从⽹上下载的Apk⽂件进⾏反编译得到我们想要获得的资源⽂件和源码。
⼀、Apk⽂件组成 Android的应⽤程序APK⽂件说到底也是⼀个压缩⽂件,那么可以通过解压缩得打⾥⾯的⽂件内容,不过很显然,当你去解压完去查看的时候,发现⾥⾯的很多东西和你想象中的不太⼀样。
资源⽂件等xml⽂件基本打不开,即使打开了也都是乱码(⽽这正是Android进⾏加密过),有些应⽤会将图⽚资源等的也加密(如qq⾳乐)。
⽽既然直接解压⽆法看到正常的应⽤程序,那么就需要借助反编译软件来实现APK的反编译。
⼆、反编译必备⼯具及使⽤ Android⼯程⽂件主要有资源⽂件和源代码组成。
⽽为了查看资源⽂件需要借助⼀个⼯具,本⽂使⽤的是apktool⼯具进⾏反编译,经过编译后能够正确查看XML⽂件和其他的⾮XML的资源⽂件,这对于汉化⽽⾔有着巨⼤的意义。
⽽为了查看源码,则需要借助于dex2jar和jd-gui这两个⼯具,其中dex2jar⼯具负责将dex⽂件转化为jar⽂件,⽽jd-gui则⽤于查看jar⽂件。
1)apktool⼀次失败的经历-----使⽤apktool时报错原因:apktool的版本过低,⽆法解析当前版本的apk。
修正:更新最新的apktool版本后正常,本⽂使⽤的最新apktool版本为2.2.2.然后就可以发现资源⽂件等xml⽂件可以正常打开。
2)Dex2jar接下来就需要对source code进⾏反编译。
需要借助⼯具Dex2jar和jd-gui。
其中Dex2jar,顾名思义就是将dex⽂件反编译为jar⽂件。
⽽jd-gui则⽤于直接查看jar包中的源代码。
具体步骤就是将apk⽂件解压,得到其中的classes.dex,它就是java⽂件经过编译⽽后通过dx⼯具打包⽽成的,⽽后解压下载的dex2jar,将classes.dex复制到dex2jar根⽬录下,在命令⾏下定位到该⽬录下,运⾏d2j-dex2jar.bat classes.dex classes.dex可以发现得到⼀个classes-dex2jar.jar⽂件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android 反编译apk 到java源码的方法分类:Android 2010-12-31 15:46 1931人阅读评论(1) 收藏举报Apk文件破解可见源码1.获取apk的资源图片直接用WinRAR打开,res/drawable直接拖拽出来即可。
2.获取xml文件信息虽然能用WinRAR看到里面的xml文件,但是xml是经过优化的,无法直接查看,需要使用apktool工具,下载地址:https:///p/android-apktool/。
下载apktool-1.3.1.tar.bz2和apktool-install-windows-2.2_r01-2.tar.bz2解压到同一个目录,然后把待破解的apk文件拷贝到同一目录,DOS在cmd下进入apktool 所在路径,然后输入apktool d "XXX1" "XXX2",XXX1指的是你要反编译的apk文件,XXX2指的是反编译后文件存放的路径,如:apktool d "C:/taobao.apk" "C:/taobao"3 .反编译dex获取Java源代码Apktool工具只能反编译成smali的中间代码文件,这里需要借助另外一个开源工具:dex2jar,下载地址:/p/dex2jar/。
这个工具不能直接翻译成java文件,但是可以把dex文件转换成jar文件,然后可以通过jad工具把jar文件反编译成Java源文件,jd-gui下载地址:http://java.decompiler.free.fr/jd-gui/downloads/jd-gui-0.3.3.windows.zip。
详细步骤:解压apk文件,直接拖拽(rar解压软件),找到classes.dex文件在cmd下进入dex2jar.bat所在路径,然后输入“dex2jar.bat XXX”,XXX指的是你要反编译的apk中的classes.dex 文件所在路径及名称(classes上面解压得到),如:dex2jar.bat D:/classes.dex;这样会生成一个classes.dex.dex2jar.jar文件,然后用jd-gui工具将jar文件反编译成java文件,选择保存所有,它会生成一个压缩文件,所有的源码都在这个压缩文件中,解压了就可以看到详细的代码了。
很强大吧。
from:/eblson/blog/item/312de07b5e594dff2f73b353.html-----------------------------------------一、获得APK源代码:工具下载:需用到dex2ja r和JD-GUI这2个工具dex2jar下载地址:/files/dex2jar-0.0.7-S NAPSHOT.zipJD-GUI下载地址:windows版JD-GUI:/files/jdgui.zipLinux版JD-GUI:/files/jd-gui-0.3.2.linu x.i686.tar.gz步骤:1.把apk文件改名为.zip,然后解压缩,得到其中的classes.dex文件,它就是java文件编译后再通过dx工具打包成的,所以现在我们就用上述提到的2个工具来逆方向导出java 源文件2.把classes.dex拷贝到dex2jar.bat所在目录。
在命令行模式下定位到dex2jar.bat所在目录,运行dex2jar.batclasses.dex ,生成classes.dex.dex2jar.jar3.运行JD-GUI工具(它是绿色无须安装的)打开上面的jar文件,即可看到源代码---------------------------------------------------------------------------------二.反编译apk生成程序的源代码和图片、XML配置、语言资源等文件。
工具下载:在/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 dC:/***.apk C:/***文件夹(命令行解释:apktool d 要反编译的文件输出文件夹)特别注意:你要反编译的文件一定要放在C盘的根目录里,3.打开C:/***文件夹就可以得到我们学院的各种资源了。
from:/forum.php?mod=viewthread&tid=118-------------------------------------------本文主要介绍如何逆向一个Android的APK应用程序,本文提供的方法仅供研究学习之用。
本文需要用到的工具有jdk 这个用于搭建java运行环境AXMLPrinter2.jar 这个用于逆向.xml文件baksmali.jar 这个用于逆向classex.dex文件由于 Android 的 .apk 文件实际上就是一个 zip 文件可以直接用 winrar 打开如下图所示:用rar打开之后我们可以看到该文件实际上是一个zip包里面包含了META-INF文件夹,这个文件夹是用于保存签名文件,确保包的完整性的res文件夹下就是apk所要用的资源文件,都是原封不动地保存,我们可以直接提取出来,做汉化时就可以直接阅读string文件然后进行修改AndroidManifest.xml文件则是编译过后的一个配置文件,用于声明程序中所包含的activity,service以及程序所具有的能力,也就是权限。
resources.arsc 则是编译过后的一个资源说明文件,而我们要关注的主要是classes.dex 。
我们编写的Android程序,在源程序里的所有.java的文件,最终都编译到这样1个.dex文件当中,在Android手机上的dalvik虚拟机上执行。
首先,我们介绍如何逆向一个.xml文件由于apk包里的xml文件我们直接用记事本打开还是有一些乱码所以需要我们还原才能更好的看出这里需要用到AXMLPrinter2.jar 工具具体的则是打开命令行我们以AndroidManifest.xml为例,输入如下命令java -jar AXMLPrinter2.jar AndroidManifest.xml > AndroidManifest.txt有兴趣的也可以写成一个.bat的脚本,方便执行我们可以看看执行的结果执行前的AndroidManifest.xml文件1. <?xml2. version="1.0" encoding="utf-8"?>3. <manifest4. xmlns:android="/apk/res/android"5. android:versionCode="322"6. android:versionName="ver 3.2.2"7. package="com.eoeandroid.wallpapers.christmas"8. >9. <application10. android:label="@7F040000"11. android:icon="@7F020004"12. >13. <activity14. android:label="@7F040001"15. android:name=".Main"16. >17. <intent-filter18. >19. <action20. android:name="android.intent.action.MAIN"21. >22. </action>23. <category24. android:name="UNCHER"25. >26. </category>27. </intent-filter>28. </activity>29. <service30. android:name=".service.SyncDeviceInfosService"31. >32. </service>33. <meta-data34. android:name="com.mobclix.APPLICATION_ID"35. android:value="30c0e2bb-a878-43cb-830b-a39fcae33b0c"36. >37. </meta-data>38. </application>39. <uses-sdk40. android:minSdkVersion="3"41. >42. </uses-sdk>43. <uses-permission44. android:name="android.permission.INTERNET"45. >46. </uses-permission>47. <uses-permission48. android:name="android.permission.SET_WALLPAPER"49. >50. </uses-permission>51. <uses-permission52. android:name="android.permission.WRITE_EXTERNAL_STORAGE"53. >54. </uses-permission>55. <uses-permission56. android:name="android.permission.ACCESS_NETWORK_STATE"57. >58. </uses-permission>59. <uses-permission60. android:name="android.permission.READ_PHONE_STATE"61. >62. </uses-permission>63. <uses-permission64. android:name="android.permission.ACCESS_NETWORK_STATE"65. >66. </uses-permission>67. </manifest>java -jar baksmali.jar -o classout/ classes.dex讲classes.dex能逆向成一个文件夹这里我可以截个图给大家看看点开其中一个文件我们继续来看大家是不是觉得这个代码很亲切对从这个代码我们基本能大致推断出源程序的一些结构流程从中借鉴本文仅供研究学习之用欢迎与我讨论交流本文地址如下转载请注明此句。