聊聊Android的APK反编译
上一篇《How To Use Proguard in Android APP》介绍了如何对Android进行混淆,现在来对它进行反编译看看,里面有些什么东西。
APK文件,其实也是一个压缩文件,我们可以把它的后缀改为zip格式,解压缩后看看里面的东西,如下:

这里,Android对XML之类文件进行了加密,因此看到的是乱码:

resources.arsc文件是资源文件的二进制索引,每个目录下都放着相关的资源文件,另外还有一个重要角色:classes.dex,这个就是源码打包后的文件,后面再搞它。
Android的反编译经历3个步骤:
apk ---> dex/smali ---> jar
用到3个工具,可以从这个链接查找下载:https://www.linjk.cn:3298/iHouse/utils/file_list_upload.php
apktool ---> dex2jar ---> jd-gui
在使用apktool时若发生解析错误,建议使用更新版本的。
下面,开始进行反编译:
1. 使用工具apktool,参数d代码解码(decode),另外参数b可用于打包(binary)

执行命令后目录结构如下:

和解压缩不一样,解压缩出来的xml文件不可看,这里的xml都是可以看到的,在smali目录下就是源码了,如下部分截图:

因为这里混淆了代码,所有类名都用a、b、c之类的字母替代了。前面解压缩出来的dex是提供给虚拟机执行的,是字节码文件,这里输出的smali文件是apktool按照dex和虚拟机格式转换出来的,类似于汇编语言,也可以使用Smaliviewr或IDA等工具来看函数的调用地址,再配合其他工具获取控件的id,就可以一步步进行功能破解了,后面有时间再写写这部分。
2. 使用工具dex2jar
将前面解压出来的classes.dex转为jar包,如下:

这一步的输出文件是:classes-dex2jar.jar
3. 使用工具JD-GUI查看第2步的输出文件,打开jd-gui软件,然后打开这个jar包文件即可,如下图所示:

左边是app使用的包结构图,右边是随便打开的一个class文件图,可以看到,有些没被混淆的类可以看到源码,已被混淆的类调用已被a、b等字母替换。
APP的反编译查看源码步骤大概就是这样了,反编译主要是想学习别人的代码架构是怎么分配的,学习别人的长处,不要干坏事哦
聊聊Android的APK反编译的更多相关文章
- android之apk反编译
今天就来详细的讲一讲apk的反编译过程,之前自己一直没彻底搞清楚. 一.准备工作 反编译首先要准备三个工具.这三个工具都是可以百度下载的.就是下图所示的三个工具. 这三个工具是有各自作用的: (1)a ...
- Android实践--apk反编译
版权声明:本文为博主原创文章.转载请注明出处. https://blog.csdn.net/ysjian_pingcx/article/details/25468867 Android apk反编译一 ...
- [Android逆向]APK反编译与回编译
一.先查壳,再反编译看验证首先打开.apk文件==>反编译apk(dex/配置文件/资源文件(apk反编译失败)>修改关键文件实现自己的目的>重新打包签名(无法重新打包)==> ...
- Android程序apk反编译破解方法
简短不割了,我们直接奔主题吧. 把apktool-install-windows-r05-ibot文件里的两个文件剪切到apktool1.5.1目录. 新建一个文件夹把需要破解的apk应用程序放进去. ...
- 【转】Android APK反编译就这么简单 详解(附图)
转载地址:http://blog.csdn.net/vipzjyno1/article/details/21039349 在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂 ...
- Android APK反编译详解(附图)
转载自http://blog.csdn.net/sunboy_2050/article/details/6727581 这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而 ...
- Android APK反编译easy 详解
在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...
- Android APK反编译就这么简单 详解(附图)
在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...
- 从原生APK反编译,拿到界面,用于mono for android
从原生APK反编译,拿到界面,用于mono for android 1.用apktool反编译apk,得到xxx.apk.de 2.从xxx.apk.de\res\layout 3.复制所有xml到M ...
随机推荐
- Javascript正则表达式匹配替换
根据正则表达式的匹配结果将匹配项替换为*function regReplace(reg, str){ var result, //最终输出结果 out, //每次运行正则exec返回的匹配结果. in ...
- ajax读取XML文本(如读取城市)
//加载城市 function loadArea_pep() { $.ajax({ url: "/xmlFile/crty.xml", success: function (res ...
- iOS开发——项目篇—高仿百思不得姐
01 一.包装为导航控制器 UINavigationController *nav = [[UINavigationController alloc] initWithRootViewControll ...
- BZOJ3052——糖果公园
0.题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3052 1.题目大意:给定一颗n个点的无根树,每个点有一个颜色,要进行q次操作,有两种操 ...
- android中paint的setXfermode属性
本文前半部分来自于:http://www.cnblogs.com/rayray/p/3670120.html 1.下面的Xfermode子类可以改变这种行为: AvoidXfermode 指定了一个 ...
- linux 文件系统sysvinit 流程分析
参考网上许多的教程. 然后有一下相关的笔记: kernel 在挂载完文件系统后,会执行第一个进程init 这个进程的PID为1 这个进程是所有进程的父进程 init 进程,首先要去读取inittab中 ...
- jQuery插件-表单验证插件-Validation
1.Validation简介 标准的验证方法库 1)内置验证规则:必填,数字,E-Mail,URL和信用卡号码等19类内置验证规则. 2)自定义验证规则:自定义 3)验证信息提示:默认了验证信息提示, ...
- ubuntu配置apache的虚拟主机
ubuntu中apache的配置文件分散在几个文件中,/etc/apache2/apache2.conf将它们组织起来.这样设计有很多好处,这里就不在赘述了.进入正题: 1)配置文件在/etc/apa ...
- Java通过httpclient获取cookie模拟登录
package Step1; import org.apache.commons.httpclient.Cookie; import org.apache.commons.httpclient.Htt ...
- EXTJS动态改变store的proxy的params
动态改变store的条件参数.var store = win.down('grid[name=sourceGrid]').getStore(); Ext.apply(store.proxy.extra ...