Android反编译及二次打包基础操作
目录
前言
最近遇到一个NFC的项目, 因为网上的相关资料实在是太少, 手上的最有效资料只有一个厂家的apk, 只好尝试进行反编译; 自己操作的时候整理记录了反编译的简单操作方法, 本文将一些基本的概念和操作分享出来.
基本概念
-
Dalvik VM
Google 专门为 Android 平台设计的一套虚拟机
区别于标准 Java 虚拟机 JVM 的 class 文件格式, Dalvik VM 拥有专属的 DEX 可执行文件格式和指令集代码
-
Smali
Smali是用于Dalvik的反汇编程序实现,汇编工具(将Smali代码汇编为dex文件)为smali.jar, 与之对应的baksmali.jar则是反汇编程序(下载地址)
Smali 的优势在于, 提供反汇编功能的同时, 也提供了打包反汇编代码重新生成 dex 的功能, 因此 Smali被广泛地用于 APP 广告注入, 汉化和破解, ROM 定制等方面
语法规范参考: Smali基础知识
Smali文件也可转成java文件, 点击下载 smali2java
用到的工具
-
apktool
反编译, 重新打包工具;
Smali文件, 布局文件, 资源文件均可通过此工具获得
-
dex2jar-2.0
源码反编译工具, 顾名思义, 将classes.dex反编译成jar文件
-
jd-gui-windows-1.1.0
查看源码的工具, 可打开jar文件查看代码
-
工具下载
-
APKTOOL
-
工具使用
-
使用 apktool 反编译;
进入相关目录, 执行命令
apktool.bat d -f [name.apk] -o [输出目录]
如我在项目中执行了如下命令:
apktool.bat d -f app-releaseNFC_ClientV1.apk -o app-releaseNFC_ClientV1
之后解析结果如下
-
使用 apktool 重新打包;
执行命令
apktool.bat b [文件目录]
如我在项目中执行了如下命令:
apktool.bat b app-releaseNFC_ClientV1
-
使用dex2jar-2.0 获取源码
将文件后缀改成压缩文件格式(.zip .rar等)进行解压, 得到文件如下
classes.dex由源码编译打包而成, 同时也是我们所需要的源码包, 下面我们先使用工具获取到jar包
-
将该文件复制到dex2jar工具的文件夹下
-
执行该命令编译出jar包
dex2jar.bat classes.dex
-
-
使用jd-gui-windows-1.1.0 查看源码
直接使用jd-gui打开该jar包即可查看源码
注意, 如果需要对源码做简单的修改重新打包, 在class文件中找到要修改的部分以后, 到smali中修改再打包即可