Android APK反编译图文教程

APK反编译图文教程作用:将apk反编译成java源码(.反编译流程:一、apk反编译得到程序的源代码、图片、XML配置、语言资源等文件如果你想将反编译完的文件重新打包成apk,那你可以:输入.二、Apk反编译得到Java源代码图形化反编译apk(本人未使用过)首先,下载上述反编译工具包,打开目录,双击反编译工具.exe,就可以浏览打开要反编译的apk...

APK反编译图文教程

更新时间:2016-04-15 11:21:57 作者:vipra

学会反编译比较关键,也是我们美化必须掌握的技术。学习反编译也是制作ROM的开始。ROM 主机必须是反编译器。全能,给你基础和灵感,最重要的是我们可以独立创新和思考

在学习开发的过程中,你会经常学习别人的应用是如何开发的。那些精美的动画和精致的布局可能会让你爱上它们。作为一个开发者,你可能很想知道这些效果接口是怎样的。要实现,此时可以反编译查看修改后应用的APK。以下是我参考一些文章后的简单教程详细解释。

(注:反编译并不是为开发者破解和重装应用程序,主要目的是促进开发者学习,向好的代码学习,提高自身开发水平。)

测试环境:

赢 7

使用工具:

脚本之家下载地址:

(资源文件获取)下载

(源码文件获取)下载

ubuntu卸载编译安装的软件_编译软件下载_c语言编译软件win7

jd-gui(源代码视图)下载

最新正式版下载地址:

(代码)

(代码)

最新版本的jd-gui(代码)请看官方

工具介绍:

功能:资源文件获取,可以提取图像文件和布局文件供使用和查看

功能:将apk反编译成java源码(.dex成jar文件)

jd-gui

功能:查看APK中.dex转换后的jar文件,即源文件

反编译过程:

一、apk反编译得到程序的源代码、图片、XML配置、语言资源等文件

下载在上面的工具中,解压得到3个文件:aapt.exe、.bat、.jar,把需要反编译的APK文件放到这个目录下,

打开命令行界面(运行 -CMD),导航到文件夹,然后输入以下命令:.bat d -f test.apk test

(命令中的test.apk是指要反编译的APK文件全名,test是存放反编译资源文件的目录名,即:.bat d -f [apk file] [输出文件夹])

表示采集成功。后来发现文件夹里有一个测试文件。点击查看应用的所有资源文件。

如果要将反编译后的文件重新打包成apk,那么可以:输入.bat b test(你编译的文件夹),效果如下:

之后,可以在之前的测试文件下再找到两个文件夹:

建造

dist(存储打包的 APK 文件)

二、Apk反编译得到Java源码

上述工具中的下载和jd-gui,解压

将要反编译的APK后缀名改为.rar或.zip,解压得到.dex文件(就是编译好的java文件,然后用dx工具打包),把得到的.dex放到之前解压的工具——0.0.9.15文件夹,

在命令行导航到.bat所在目录,输入..dex,效果如下:

改目录下会生成一个.jar文件,然后打开工具jd-gui文件夹下的jd-gui.exe,然后用工具打开之前生成的.jar文件,就可以看到源码了编译软件下载,效果如下:

混淆效果图(类文件名和其中的方法名会以a、b、c....等命名):

三、 图形反编译apk(我没用过)

以上步骤一、2描述了apk的命令行反编译,现提供图形化反编译工具:

一、下载上面的反编译工具包,打开目录,双击反编译工具.exe,可以浏览打开要反编译的apk

通过反编译,您可以了解应用程序使用了哪些第三方库文件、其代码是如何编写的等等。

但是如果apk被混淆了,你看到的class文件名和里面的方法名会以a,b,c....风格命名,所以你可以找到你想知道的接口代码可能会很费力,而且查找代码可能看起来很费力,但会获得一个大致的概念。有了这个想法,你可以自己尝试一下。

曾经想写一个类似的名人界面布局编译软件下载,但是刚接触的时候不知道怎么写,所以反编译了。即使他的代码被混淆了,我可以看到他通过 TYPE 设置不同的 ITEM 布局是实现的。很多参考资料可能会用重写VIEW来达到效果,你可以大致了解他的开发对你的开发是无害的。

还有一个开发者辛辛苦苦开发自己的应用,被别人反编译,变成了自己的东西,所以需要混淆。

作为一个应用开发者,你不得不面对一个尴尬的局面,那就是你辛辛苦苦开发的应用,很容易被别人反编译。

好像也发现了这个问题。从SDK2.3开始​​,我们可以看到-sdk-\tools\下多了一个文件夹

它是一个java代码混淆工具。即使别人反编译你的apk包,也只会看到一些难以理解的代码,从而保护代码。

下面说说如何让SDK2.3下的.cfg文件生效。我们先看一下-sdk-\tools\lib\.cfg的内容:

-optimizationpasses 5 
-dontusemixedcaseclassnames 
-dontskipnonpubliclibraryclasses 
-dontpreverify 
-verbose 
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 
 
-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 
 
-keepclasseswithmembernames class * { 
  native ; 
} 
 
-keepclasseswithmembernames class * { 
  public (android.content.Context, android.util.AttributeSet); 
} 
 
-keepclasseswithmembernames class * { 
  public (android.content.Context, android.util.AttributeSet, int); 
} 
 
-keepclassmembers enum * { 
  public static **[] values(); 
  public static ** valueOf(java.lang.String); 
} 
 
-keep class * implements android.os.Parcelable { 
 public static final android.os.Parcelable$Creator *; 
} 

从脚本中可以看出,继承自 , , , , 和 com.... 的基本组件都保留在混淆中。

并且保留了所有的变量名和类名,所有的类都是具有固定参数格式、枚举等的构造函数的一部分。(详情请参考

/ 中的示例和注释。)

使.cfg 工作的方法很简单,只需在自动生成的.file 中添加一句“.=.cfg”。

完整的 .file 应如下所示:

# This file is automatically generated by Android Tools. 
# Do not modify this file -- YOUR CHANGES WILL BE ERASED! 
# 
# This file must be checked in Version Control Systems. 
# 
# To customize properties used by the Ant build system use, 
# "build.properties", and override values to adapt the script to your 
# project structure. 
 
# Project target. 
target=android-9 
proguard.config=proguard.cfg 

大功告成,正常的编译签名可以防止代码被反编译。

相关文章

发表评论