android反编译工具总结
反编译去签名大全

反编译去签名大全
反编译去签名是指将已经过签名的应用程序进行反编译,并移除其中的签名信息,从而达到绕过验证的目的。
以下是一些常见的反编译去签名的工具和方法:
1. 工具类:
- ApkTool:一个常用的反编译工具,可以将已签名的应用反编译成Smali代码,并通过修改Smali代码达到去除签名的目的。
- Jadx:一款用于反编译Android应用的工具,可以将已签名的APK文件反编译成Java代码,并通过修改Java代码去掉签名相关的代码。
- JADX-GUI:Jadx的图形化界面,可以方便地查看反编译结果并进行相关操作。
2. 方法:
- 反编译:使用上述工具对已签名的应用进行反编译,获取其中的源代码和资源文件。
- 修改:对反编译得到的源代码进行修改,删除与签名相关的代码片段,如验证签名、证书等相关代码。
- 重新编译:将修改后的源代码重新编译成APK文件。
- 重新签名:使用自己的证书对重新编译得到的APK文件进行签名,生成一个新的已签名APK文件。
需要注意的是,反编译去签名是一种绕过验证的行为,是违反软件开发者的授权行为。
在未获得合法授权的情况下进行此类
操作可能涉及版权侵权和违反法律法规等问题,请遵守相关规定并遵循合法途径。
APK反编译工具总结

APK反编译工具总结APK反编译⼯具总结⼯前APP市场混乱,打包党横⼯,很多优秀的应⼯被恶意注⼯和篡改,形成盗版应⼯,导致⼯户下载安装后被扣费、扣流量、盗取信息等。
盗版应⼯的横⼯,也使APP开发公司和个⼯的收⼯、名声受到严重损害。
由于安卓系统的开放性,安卓APK包很容易被破解,在⼯客破解的过程中,⼯多是通过某些⼯具进⼯暴⼯攻击。
那么APK反编译、反汇编的⼯具都有哪些?APK是Android Package的缩写,即Android安装包。
APK⼯件其实是zip格式的⼯个压缩包,但后缀名被修改为APK,通过UnZip 解压后,就可以看见DEX⼯件。
1、APKT oolAPKTool是GOOGLE提供的APK编译⼯具,需要JAVA运⼯环境。
可以对APK进⼯反编译,使⼯它可以将其反编译成⼯常接近打包前的原始格式。
逆向AndroidManifest.xml、资源⼯件resources.arsc以及将dex⼯件反编译成可以调试的smali⼯件。
修改后,可以将其编译回apk ⼯件。
APKT ool也可以⼯来汉化Android软件然后重新打包发布。
2、VirtuousVirtuous团队开发制作的Virtuous Ten Studio (VTS)是迄今为⼯功能最强的APK、JAR编辑⼯具,这个程序允许您在⼯个易于使⼯和熟悉的环境管理整个Android项,可以反编译M10、APK、JAR。
需要.NET 4.0环境⼯持,Microsoft .NET Framework 4(独⼯安装程序)3、ApkAnalyser 5.2⼯款APK可视化分析⼯具。
4、ApkT oolkit v2.1有如下功能:反编译.apk ,重建.apk,签名.apk,优化.apk,.apk转.jar,反编译.dex,重建.dex,.dex转.jar5、APK签名⼯具signapkAPKtool编译⼯成的apk若没签名,不能安装,可以⼯signapk对apk⼯件签名。
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); }}
Android开发apk反编译和二次打包教程

Android开发apk反编译和⼆次打包教程作为Android开发者,⼯作中少不了要反编译别⼈的apk,当然主要⽬的还是为了学习到更多,取彼之长,补⼰之短。
今天就来总结⼀下Android反编译和⼆次打包的⼀些知识。
⾸先声明本⽂的⽬的是为了通过例⼦讲解反编译和⼆次打包的原理和⽅法,继⽽作为后续讲解防⽌⼆次打包和App安全的依据,并不是⿎励⼤家去重新打包别⼈的App,盗取他⼈劳动成果。
本⽂⾸先介绍⼏种Android反编译⼯具的使⽤,然后实现在不需要知道源代码的情况下,仅通过修改反编译得到的smali⽂件实现修改apk逻辑功能的⽬的。
Android中常⽤的反编译⼯具有三个:dex2jar、jd-gui和apktool,这三个⼯具的作⽤如下:dex2jar:将apk中的classes.dex⽂件转换成jar⽂件。
jd-gui:查看由dex2jar转换成的jar⽂件,以界⾯的形式展⽰反编译出来的Java源代码。
apktool:反编译⽣成smali字节码⽂件,提取apk中的资源⽂件。
为了尽可能的把问题讲清楚,我们来实现⼀个很简单的例⼦。
⾸先创建⼀个⼯程DecompileDemo,在MainActivity中定义⼀个布局,其中包含⼀个Button,点击会打印⼀段⽇志。
public class MainActivity extends AppCompatActivity implements View.OnClickListener {private static final String TAG = "MainActivity";private Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);btn = (Button) findViewById(R.id.btn);btn.setOnClickListener(this);}@Overridepublic void onClick(View v) {Log.d(TAG,"Button is clicked");}}将这个⼯程编译⽣成的apk解压,取出其中的classes.dex放在dex2jar⼯具的⽬录下,然后执⾏命令会在当前⽬录下⽣成class-dex2jar.jar⽂件然后打开jd-gui,将class-dex2jar.jar⽂件拖进去,就可以看到反编译出来的源代码。
Android库分析工具(崩溃反编译)

Android库分析⼯具(崩溃反编译)[时间:2016-07] [状态:Open][关键词:android, 动态库,静态库, 编译,crash,addr2line]本⽂主要整理Android编译系统中可⽤的库分析⼯作,可作为后续代码崩溃分析的参考。
1. 动态库(*.so)处理:arm-linux-androideabi-readelf.exe -a XX.so > xx.txt输出所有导出函数arm-linux-androideabi-objdump.exe -dx XX.so > xx.txt反汇编so包,此时使⽤ $(JNI_PROJ_PATH)\obj\local\armeabi下⾯带符号表的so包。
JNI_PROJ_PATH为编译so包时jni⽂件夹的根⽬录。
2. 静态库(*.a)处理:输出.a内所有导出函数。
⽅法⼀:arm-linux-androideabi-ar.exe -t xx.a > xx.txt⽅法⼆:arm-linux-androideabi-nm.exe xx.a > xx.txt3. ndk编译上⾯两种库⽂件,.a和.so都可以直接通过arm-linux-androideabi-g++.exe⼯具编译,编译语法跟linux上的g++⼀致。
也可以直接使⽤ndk-build命令。
4. crash定位使⽤addr2line将地址转化成代码⾏数,输⼊的so为带符号表的,即为strip过的:arm-linux-androideabi-addr2line.exe -f -e \jni\obj\local\armeabi\libXX.so 00002683使⽤ndk-stack.exe还原堆栈:ndk-stack -sym E:\dev_code\Sosomap-old\Sosomap-jni\obj\local\armeabi -dump D:\android-ndk-r9b-windows-x86\txmap_log.txt-sym为带符号表的so路径, -dump为crash的堆栈信息,必须包含:********************。
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, 最终得到这样的结果。
Android程序反编译工具JEB
Android程序反编译⼯具JEB
⼀、下载并打开
JEB是⼀个付费的逆向⼯具,专业版售价⾼达1800美元,此分享仅供学习使⽤,切勿⽤于商业盈利。
下载并解压后,找到jeb_wincon.bat,双击这个批处理程序。
会依次出现⼀个命令⾏窗⼝和JEB程序窗⼝
不⽤在意那个“检查更新出错”,不影响正常使⽤。
⼆、简要介绍
JEB是⼀个功能强⼤的为安全专业⼈⼠设计的Android应⽤程序的反编译⼯具。
⽤于逆向⼯程或审计APK⽂件,可以提⾼效率,节约⼯程师的分析时间。
①可将Dalvik字节码反编译为Java源码,⽆须DEX-JAR转换⼯具
②JEB强⼤的⽤户界⾯使你可以检查交叉引⽤,重命名的⽅法、字段、类、代码和数据之间导航,以及做笔记和添加注释等
③可以检查解压缩的资源和资产、证书、字符串和常量等。
可以保存对JEB数据库⽂件的分析,通过JEB的修订历史记录机制跟踪进展。
④JEB⽀持Windows、Linux和macOS
⑤使⽤Java或Python语⾔,⽤户可以编写⾃⼰的脚本和插件来⾃动执⾏逆向⼯程流程。
⾼级⽤户可以编写完整的分析模块。
三、参考书籍
《Android⾼效进阶:从数据到AI》第9章静态分析Android引⽤。
详解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反编译利器Apktool
Android开发APK反编译利器Apktool说起APK的汉化,目前大部分教程都是让用Hex Workshop或者Android ResEdit来做。
但是实际操作后,就会发现:1、Hex Workshop操作繁琐,经常出现搜不到想要修改的字符的情况;2、Android ResEdit简单用用可以,修改稍微复杂一点就会出现整条整条丢字符串的情况;并且新内容不能比原内容长——谁能保证我的本地化语言就一定比原来的短呢?现在好了,老外写的《android-apktool》软件,可以帮助我们把APK反编译,生成程序的源代码和图片、XML配置、语言资源等文件。
我们对图片和语言资源等文件修改后,可以再把它们编译打包成APK,签名后就是手机可以安装的本地化/修正版APK了。
apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。
下载后解开,为了方便使用,按作者的推荐把得到的4个文件复制到C:\Windows文件夹里。
这个工具是Java写的,需要你的电脑安装了JRE或者JDK,并在系统环境变量Path里加入java.exe所在路径。
以上准备工作做好后,就可以用它来反编译APK了。
这里我用动态壁纸的APK来做示范。
如果用过动态壁纸,你也许会发现在设置壁纸时,界面的显示有点问题:“动态壁纸”,在手机上中文显示为“当前壁纸”。
这是“动态壁纸选择器”LiveWallpapersPicker.apk的翻译错误造成的。
(假设LiveWallpapersPicker.apk放在C盘根目录)开始> 运行,输入cmd,回车。
apktool d "C:\LiveWallpapersPicker.apk" "C:\LiveWallpapersPicker"(命令行解释:apktool d 要反编译的文件输出文件夹)这样,LiveWallpapersPicker.apk就被反编译了,输出内容在C:\LiveWallpapersPicker文件夹里。
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源码。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
android反编译工具总结
序:
总结反编译主要的目的在于学习。
利用反编译进行相关的汉化或修改,都是不道德的!
大家都知道,将apk文件解压后有两部分文件需要处理,一种是xml文件,另一种一个dex 文件(.dex),我们可以从.dex文件中得到.class,利用后者再得到大家垂涎已久的java文件。
下面分别针对这三种格式的文件进行反编译处理;
1.对xml文件进行包的解析,一般有两种方式:apktool(推荐)和AXMLPrinter
2.jar;
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:/p/android-apktool/downloads/list
点击下载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 (目标文件夹)反编译geek.apk到文件夹test
2.apktool b (目标文件夹)
从目标文件夹中重建APK,生成的APK在"目标文件夹"\dist文件夹里,叫out.apk。
这个out.apk是没有签名的,所以不能直接装到手机里。
签名工具和方法见/bbs/thread-21261-1-1.html,这里就不说了。
签名后得到的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
下载:/p/dex2jar/downloads/list
方法:
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
下载:http://java.decompiler.free.fr/?q=jdgui
方便好用,直接解压得到JD-GUI,用它打开上面的jar文件,File-->Save JAR Source,即可看到梦寐以求的java源代码;
我们也可以解压B步骤得到的jar文件得到class文件,到这里,我们就要用到Jodeclipse 和JadClipse了;
C2. Jodeclipse---Jode的Eclipse插件
C3. JadClipse---Jad的Eclipse插件
关于这两个Eclipse插件的安装可见下面链接:
/blog/553061
(C4. 还有朋友提到DJ Java Decompiler,没用过,可以一试!)
但也有人提出此问题:
自从eclipse升级到3.3以后jad插件就一直没有成功的安装上去,网上看了好多文章也是以前版本的安装方法,3.3目前通过eclipse的software update的插件安装方式已经不行了。
解决方法如下:
1.从/jad.html#download地址下载最新的jad,我目前下载的是jadnt158.zip;
2.从/s ... 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源码;但也有些额外加的包没被编译出来。
但做到这一步已经足够用于学习,我们的目的也就达到了!
大家也可关注下这两篇文章,用的不同方法(dexdump,baksmali.jar,smali.jar),但效果也还不错:
/Android_Tutor/archive/2010/07/09/5724435.aspx
/huyipeng/archive/2010/07/25/1784679.html
有人会说程序可以用混淆器扰乱代码,但刚从网上看到的一种关于混淆器的说法:
“用混扰器的代码一般就是去掉所有注释和把变量名、方法名和类名变成一些没意义的名字。
反编译后一般都变成a, b , c,...这样的名字,只能一点点的看懂,再利用Eclipse的改名方法,一次性的吧相关的名字改成有意义的名称。
”
所以,大家的关键代码最好还是打成.so库吧!。