Android Apk 文件反编译和重新打包的过程分析

学习的方式有很多种,Read the fucking source code 绝对不失为最佳的方式。除了阅读 Android SDK 的源码,还能通过反编译 APK 的方式,阅读他人开发的应用源码。本文就来聊聊在 Mac 环境下如何借助第三方工具反编译 APK 压缩文件(通过爱加密、360加固等手段处理的 APK 文件除外),阅读源码、修改源码并重新打包成一个新的 APK 安装文件。

准备工具


本文描述的反编译手段需要借助三个工具,分别是:apktool、dex2jar 和 jd-gui,下面我一一介绍下他们的下载及配置过程。

apktool

  1. 打开 apktool 脚本链接网页,右键存储为一个命名为 apktool 的文件,记得不要添加任何格式后缀;

  2. 打开 apktool.jar 下载链接,下载最新版本,下载完成之后重命名为 apktool.jar;

  3. 打开命令行工具,使用 cp 命令将前面两步下载的 apktool 脚本文件和 apktool.jar 文件复制到 PC 的 /usr/local/bin 目录下 (复制前的文件至此可以删除),如:

sudo cp apktool apktool.jar /usr/local/bin
  1. 使用 chmod 命令为上一步复制过去的两个文件添加可执行权限,如:
chmod +x apktool apktool.jar
  1. 操作至此,便可以在任一路径下使用 apktool 命令了。现在,你就可以使用 apktool -version 命令检查以上过程是否配置正确。

有关 apktool 工具的详细信息,可以参考官网介绍:A tool for reverse engineering Android apk files

dex2jar

  1. 你可以从 softpedia 或者 sourceforge 网站找到 dex2jar 的 Mac 版下载链接,并解压缩;

  2. 同样使用 chmod 命令修改 sh 文件的用户权限,如:

chmod a+x *.sh

jd-gui

softpedia 或者 http://jd.benow.ca/ 网站下载并解压缩即可,里面的 JD-GUI 文件便是阅读 jar 包的应用程序。

反编译 apk 资源文件


apk 文件就是一个压缩文件,通过解压缩工具便可以打开并解压缩。但是里面的资源文件,除了 drawable 图片资源,其他都是经过编译处理的二进制文件,什么也看不出来。

而使用 apktool 工具可以直接从 apk 文件中反编译出诸如 AndroidManifest.xml 、layout、strings 等资源文件,可以直接修改,供再次打包。如:

apktool d example.apk

反编译 java 源码文件


解压缩 apk 文件,可以看到 classes.dex 源码文件,可能不止一个。通过 dex2jar 工具可以将其转化为 jar 文件,并使用 jd-gui 工具打开并阅读应用源码。

第一步,dex2jar 操作,得到 classes-dex2jar.jar 文件。注意 d2j-dex2jar.sh 和 classes.dex 文件的路径,按需修改:

sh d2j-dex2jar.sh classes.dex

第二步,使用 jd-gui 打开 classes-dex2jar.jar 文件,便可以看到目标应用所用到的第三方 library 和 开发源码,如:

如果对方开发人员在工程中开启了混淆功能,将会增加你的阅读难度,不过仔细分析,也能找到一些蛛丝马迹,给予你一些“灵感”。

当然,也可以直接针对 apk 文件使用 dex2jar 命令获取 jar 文件,减少上述 apk 文件解压缩的这一步骤,如:

sh d2j-dex2jar.sh example.apk

重新打包 apk 安装文件


学会如何反编译 apk 文件后,我们还可以修改 apk 文件中的内容,比如应用名称、桌面图标,甚至是 Java 源码等,然后使用 apktool 工具重新打包,产生一个新的 apk 安装文件。

这里以修改应用名称和桌面图标为例,看看如何重新打包 apk 文件并安装至手机上。(此处仅供学习参考,勿作恶!)

第一步,使用前文介绍的反编译 apk 资源文件的方式得到反编译后的文件夹,打开 AndroidManifest.xml 文件,找到 application 标签的 label 和 icon 属性。这样,我们就知道在哪里修改对应的资源文件了;

第二步,找到对应的 drawable 图标文件和 strings 字符串资源,比如 ic_launcher.png 和 app_name,替换图标并修改字符串内容;

第三步,使用 apktool b files 命令编译打包,这里的 files 对应第一步反编译 apk 文件时得到的应用文件夹。执行完毕,便会得到一个新的 apk 文件;

注意:此时得到的 apk 文件是没有没有经过签名的,使用 adb install 命令安装时会得到一个失败提示:Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]。

第四步,生成自己的签名文件。你可以选择使用 Android Studio -> Build -> Next -> Create New... 可视化操作界面生成一个新的签名文件,也可以直接使用 keytool 工具直接在终端工具上生成,如:

keytool -genkey -keystore example.keystore -keyalg RSA -validity 10000 -alias example

第五步,使用 jarsigner 工具为 apk 文件签名,签名过后得到的 apk 文件便可以使用 adb install 命令安装至连接到 PC 的安卓设备上了。签名命令如下:

jarsigner -verbose -keystore example.keystore -signedjar example-signed.apk example.apk example

注意:如果签名过后的 apk 文件依旧安装失败,可以试试在签名命令上加上 -digestalg SHA1 -sigalg MD5withRSA -tsa 参数。当然这里我在测试时没有添加该参数,但也能正常安装。

修改资源文件并重新打包还是比较简单的,但是修改 java 源码再重新打包就比较复杂了,特别是在改动较大的情况下。「鸿洋」大神有一篇文章,描述了如何反编译 apk 并为其添加启动页广告的过程,当然也没有涉及到原开发人员的 Java 源代码改动,详情可参考: Android 反编译初探 应用是如何被注入广告的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358

推荐阅读更多精彩内容