博文出处:Android安全机制之反编译,欢迎大家关注我的博客,谢谢!

今天我们就来探讨一下反编译,其实反编译在我一开始学习Android的时候就听说过,但是一直没有去尝试。初次接触应该就是那次“蜻蜓FM v5.0.1 apk”事件了( 此处应有掌声(¯ □ ¯) )。那时根据网上的教程第一次反编译了“蜻蜓FM”的apk,看到了传说中的“普罗米修斯方法”以及“宙斯类”(不得不感慨开发小哥的智商)。之后就是在阅读《Android群英传》时也有相关反编译的内容,觉得有必要记录一下。所以这就是本片写博文的起源了。

首先关于反编译,我们先要准备几个工具:

  • apktool:aoktool主要是用来反编译资源文件的,也就是XML了。
  • Dex2jar:Dex2jar就是反编译源代码的,会把源代码反编译成一个jar包。
  • jd-gui :在上面Dex2jar反编译出来的jar包,放入jd-gui中,就可以查看源代码了。

关于上面的三个工具,我会在文末放出下载链接,大家可以去下载。

好了,那接下来我们就开始反编译之旅吧!

至于要反编译的apk,我只能选择自己的Koku了,点击此处下载。

我们把上面下载下来的apk用winrar打开(当然你也可以用其他的解压工具),我们可以看到里面的文件内容如下图所示:

文件内容截图

我们发现classes.dex这个文件,其实classes.dex反编译出来就是源代码。然后我们把Dex2jar解压出来,发现里面有d2j-dex2jar.bat,这就是主角了。

Dex2jar解压截图

在Dex2jar解压出来的目录下,打开命令提示符输入:

d2j-dex2jar.bat [classes.dex所在的路径]

比如:

反编译命令

运行后,我们发现在Dex2jar解压出来的目录下多了一个classes-dex2jar.jar。

classes-dex2jar.jar

然后我们把下载下来的jd-gui.zip解压,里面会有jd-gui.exe。相信大家都懂吧。用jd-gui.exe打开上面的classes-dex2jar.jar,你会惊喜地发现源代码就在你眼前!

jd-gui.exe打开classes-dex2jar.jar

看上面的代码截图,我们会发现比如说setContentView()里面是一串数字。不过别怕,我们都知道R文件是用来关联资源文件的,把上面的那串数字复制下来,再打开R.class,查找一下:

R.class

原来那串数字就代表了activity_my_favorite.xml这个layout。那么问题来了,我们如何反编译XML文件呢?那就要用到上面的apktool了。

打开apktool的所在目录,把koku.apk移动到apktool的同一目录下,输入命令符:

java -jar apktool_2.1.0.jar d koku.apk

如果你配置了Java环境变量,则可以直接输入:

apktool_2.1.0.jar d koku.apk

运行完成之后,我们可以发现在目录下多了一个名字叫koku的文件夹,而这就是我们反编译出来的XML文件了。

反编译出来的XML文件

我们打开里面的AndroidManifest.xml:

AndroidManifest.xml

里面真的有、等信息!然后我们打开res里面的layout文件夹,会发现里面有我们上面提到的activity_my_favorite.xml:

activity_my_favorite.xml

里面的布局一目了然。到这里,这样一个apk的基本的源代码我们都可以看得到。当然,反编译别人的apk应该是以学习为主,而不是恶意地二次打包以及破坏。

在这里额外多说一句,如果要反编译的apk经过了代码混淆,那么反编译出来的就变成了a.class、b.class、c.class等等,所以代码混淆可以有效地阻止apk反编译。

而如果你想要将代码混淆,只要打开项目中的build.gradle(Module:app)文件,minifyEnabled为true则说明打开混淆功能。proguard-rules.pro为项目自定义的混淆文件,在项目app文件夹下找到这个文件,在这个文件里可以定义引入的第三方依赖包的混淆规则。

buildTypes {    release {        minifyEnabled true        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'    }}

好了,差不多该讲的都讲完了,今天就到这里了。

下面给出反编译工具的下载链接:

apktool_2.1.0.jar

dex2jar-2.0.zip

jd-gui-0.3.5.windows.zip

~have a nice day~

更多相关文章

  1. Android(安卓)SDK tools adb.exe下文件丢失问题
  2. Android系统init.rc分析
  3. Android(安卓)使用 DownloadManager 管理系统下载任务的方法
  4. 生成Android(安卓)App签名(为APK签名)
  5. (zz)android HAL实例解析
  6. Android笔记:Android(安卓)7.0 FileUriExposedException 解决
  7. android -- NDK 编译环境搭建
  8. Android(安卓)include 标签
  9. Android布局优化之ViewStub

随机推荐

  1. findViewById()使用常见错误
  2. 2018.10月Android优质开源项目
  3. flutter 密码/验证码输入框
  4. Android 2.3姜饼的API改变大全
  5. 第一章:初入Android大门(教程篇)(下)
  6. 新书内容连载(2):Android Activity的生命周
  7. Android(安卓)ImageView 的 scaleType 属
  8. (OK) 在CentOS7—编译OpenSSL 静态库—fo
  9. android 语言设置
  10. Android数据可视化