专栏首页HLQ_Struggle破解APK修改资源文件

破解APK修改资源文件

预计阅读时间: 7分钟

前言

本文,乃是反编译(逆向)首战,在此,特意记录过程中遇到的点点滴滴问题,如有不足之处,欢迎指正~

在此,特意感谢鸡排兄以及薇薇姐~ 3q~

本文目标

由于首战,今天我们先来玩点简单的:

将Apk解包并修改资源文件(包含:更换Apk名称、替换Icon以及更换文字内容)

将修改好的Apk包进行回包,运行查看效果。

本文操作流程

摆(qián)好(tí)姿(liǎo)势(jiě)

反编译之前,我们首先准备好反编译工具,下面将进行简单介绍。

而本文,则重点使用ApkTool工具进行愉快的玩耍~

让我们一起开始愉快的玩耍吧~

一、ApkTool 下载地址

官方下载地址(资源下载较慢):

https://bitbucket.org/iBotPeaches/apktool/downloads/

资源库下载(下载速度还是66的):

http://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/ApkTool.shtml

二、ApkTool 简述

官方简述:

https://ibotpeaches.github.io/Apktool/

ApkTool官方翻译:

ApkTool,一种用于Android应用程序逆向工程的第三方工具。 它可以将资源解码为几乎原始的形式,并在进行一些修改后重建它们。 这也使得例如构建APK等一些重复的任务文件结构和自动化项目变得更容易。

三、ApkTool 骚姿势

ApkTool可以帮助我们干以下羞羞的事情:

  1. 拆卸资源近原始形式(包括resources.arsc,classes.dex,9.png.和XMLs);
  2. 将解码的资源重建回二进制APK / JAR;
  3. 组织和处理依赖框架资源的APK;
  4. Smali调试(在2.1.0中移除了IdeaSmali);
  5. 帮助完成重复的任务(自动化)。

四、ApkTool 使用前提条件

当前开发环境所使用JDK是否为:Java 7 (JRE 1.7)及以上?

具有一定Android SDK,AAPT和Smali的基本知识。

五、ApkTool 安装说明

Windows 平台:

  1. 下载Windows 包装脚本(右键单击,保存链接为apktool.bat)
  2. 下载apktool-2(在这里找到最新)
  3. 将下载的jar重命名为 apktool.jar
  4. 将这两个文件(apktool.jar&apktool.bat)移到Windows目录(通常C://Windows)
  5. 如果提示无权访问C://Windows,则可以将这两个文件放在任何位置,然后将该目录添加到本地环境变量中的系统PATH变量中。
  6. 尝试通过apktool命令提示符运行

Linux 平台:

  1. 下载Linux 包装器脚本(右键单击,保存链接为apktool)
  2. 下载apktool-2(在这里找到最新)
  3. 将下载的jar重命名为 apktool.jar
  4. 将这两个文件(apktool.jar&apktool)移至/usr/local/bin(需要root)
  5. 确保两个文件都是可执行的(chmod +x)
  6. 尝试通过cli运行apktool

Mac OS X 平台:

  1. 下载Mac 包装器脚本(右键单击,保存链接为apktool)
  2. 下载apktool-2(在这里找到最新)
  3. 将下载的jar重命名为 apktool.jar
  4. 将这两个文件(apktool.jar&apktool)移至/usr/local/bin(需要root)
  5. 确保两个文件都是可执行的(chmod +x)
  6. 尝试通过cli运行apktool

注 - 包装脚本不是必需的,但很有用,所以我们不必java -jar apktool.jar一遍又一遍地输入。

六、ApkTool 下载后放置C://Windows目录下

拷贝过去如下所示:

七、ApkTool 起飞时检测

Step 1: 输入 java -version,查看当前环境下Java JDK版本

Step 2: 输入 apktool,查看当前环境下ApkTool信息

本文前期准备工作到此结束,下面,开搞~

开搞,上车

首先我们需要做个Demo,需求简单如下:

Demo中需要包含一个TextView以及一个ImageView,Apk图标以及名字使用默认即可。

运行后,桌面显示Logo以及Apk名称如下:

而我们的界面如下:

一、使用ApkTool解包

首先,将Build之后的测试包拷贝到桌面,然后将名字修改简单点,方便我们测试:

接着,打开cmd窗口,按照如下俩步进行操作:

  1. 键入 cd Desktop 进入桌面;
  2. 键入apktool d apk名称.apk进行解包:

结果如下:

操作完成后,你会发现在桌面为我们生成了一个和我们Apk名称一样的文件夹,如下:

暂时先不要去管这些都是什么,以后接触到慢慢了解~莫急莫急~

二、着手修改内容

在此,我们再次明确要修改的内容:

  1. Apk 名称以及Activity中文字内容。
  2. Apk Icon以及Activity图片内容;

首先,开始修改名称以及文字内容:

找到res目录下的string.xml文件,修改app_name以及我们定义的str_test值即可。

如下操作示例图:

之后开始修改我们的图片文件:

这里需要注意,需要将要修改的图片名称一样的统统替换,方可达到瞒天过海境界~

三、回包 - 瞒天过海第一式

通过在cmd窗口键入apktool b 解包生成文件夹名称进行回包,如下:

回包成功后,查看生成的Apk文件:

查看地址为:解包生成目录文件下的dist目录下。

这个时候需要注意,此时的包是一个未签名的包,想要安装在真机上以假乱真,还需要最后一步。

四、签名 - 以假乱真第一式

注意,LZ这里使用的是Android默认签名文件。测试包也是使用默认签名文件。

签名,可以直接使用命令行,不过LZ遇到无法打开的问题,So,无奈下找了一个批处理文件,代码如下(原作者地址找不到了,如有发现,LZ更新下地址):

set/p keystore_path=请输入.keystore的文件路径:
set/p alias_path=请输入keystore的alias:
set/p unsign_path=请输入待签名的apk文件路径:
set/p sign_path=请输入签名后生成的apk文件路径:

jarsigner -verbose -keystore %keystore_path% -signedjar %sign_path% %unsign_path% %alias_path%

pause

桌面创建名为:apk-sign.bat,将代码拷贝进去,最后结果如下:

双击打开后,依次填入信息:

完成后如下提示:

警告直接忽略即可。

五、验证是否真的以假乱真

首先查看是否生成已签名包:

运行查看一波,是否真正瞒天过海,达到以假乱真?

Step 1:先来看下Logo以及名称是否发生改变?

Step 2:先来看下资源是否发生改变?

完美,达到我们要求~

回包小意外

关于回包小意外,请点击原文查看详情~

本文分享自微信公众号 - 贺利权(hlq_struggle),作者:贺利权

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-05-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android Notes | 应用认领/转移那点事儿

    腾讯那么大的体量,最基本的一个客服,找不到。即使运气好,找到了,也只会很机械性回复几句根本没用的话,无语了。

    HLQ_Struggle
  • 修改包名

    那么,在解包生成的目录下找到AndroidManifest.xml,着手修改package以及对应引用。

    HLQ_Struggle
  • 「玲珑宝塔」优化 Apk 包大小

    如今的 5 G 也在万众瞩目瞩目下翩翩起舞,而 Android 近些年也惹得不少争议,所谓的谣言,不过尔尔。

    HLQ_Struggle
  • C++之类(一)

    在C++之中,我们使用类来定义自己的数据类型。通过自定义数据类型,可以使我们的编程变得更加方便。或者说C++设计类的目的就是为了使我们可以像使用基本数据类型一样...

    zy010101
  • Maven异常:Could not transfer artifact org.slf4j:slf4j-api:jar:1.6.4 from/to central

    我用Eclipse开发Maven项目,本来好好的,但是后来导入一个新的Maven项目,莫名其妙的其中pom.xml文件报错,后来执行install命令时又编译不...

    黑泽君
  • 5-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案数据篇(配置保存数据的数据库)

    杨奉武
  • 不可分项目公平划分中的群体嫉妒自由性与群体帕累托效率(CS GT)

    本文研究了假设代理人可以组成群体的公平分配问题。因此,本文将流行概念(如无嫉妒和帕累托效率)自然地推广到固定规模的群体中。群体嫉妒的自由要求没有一个群体嫉妒另一...

    用户7454091
  • JDK7的Comparison method violates its general contract异常

    前一阵遇到了一个使用Collections.sort()时报异常的问题,跟小伙伴@zhuidawugui 一起排查了一下,发现问题的原因是JDK7的排序实现改为...

    用户6182664
  • 廖雪峰历时 3 个月打磨出价值 1980 的数据分析教程,终终终于免费啦!

    对比互联网各个岗位的裁员程度可以发现,数据分析相关岗位正在不断的扩招,已经成为了这波逆流中的黑马,什么原因导致的数据分析人才如此紧缺?

    崔庆才
  • kubeadm一键部署Kubernetes(CentOS 7.5+)

    准备部署一个 一主两从 的 三节点 Kubernetes集群,整体节点规划如下表所示:

    Leorizon

扫码关注云+社区

领取腾讯云代金券