手机学习笔记之二:APKtool工具实现反编译-编译-签名全过程

这篇具有很好参考价值的文章主要介绍了手机学习笔记之二:APKtool工具实现反编译-编译-签名全过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

APKTool 介绍

        APKTool 是一个开源的、跨平台的反编译、回编译 Android 应用程序的工具。它能够将 APK 文件解压并还原成 Android 应用程序的资源文件和 Smali 代码,还能将修改后的资源文件和 Smali 代码重新打包成 APK 文件。APKTool 是 Android 应用程序开发和逆向开发的重要工具之一,它能够帮助开发者对 APK 文件进行修改、分析和定制,也能够帮助安全研究人员和黑客对应用程序进行逆向工程和漏洞分析。

        APKTool需要java环境支持,请先安装好java环境,可以使用 java -version,java版本尽量在1.8以上;

APKTool 的主要功能包括:

  1. 解压 APK 文件:APKTool 能够将 APK 文件解压为应用程序的源代码和资源文件。解压后的资源文件包括 AndroidManifest.xml、res 目录、assets 目录等;解压后的源代码包括 Java 代码和 Smali 代码。
  2. 反编译 APK 文件:APKTool 能够将 APK 文件反编译为 Java 代码和 Smali 代码。反编译后的 Java 代码和 Smali 代码能够帮助开发者了解应用程序的逻辑和实现方式,也能够帮助安全研究人员和黑客分析应用程序的漏洞和安全性。
  3. 重打包 APK 文件:APKTool 能够将修改后的源代码和资源文件重新打包成 APK 文件。重打包后的 APK 文件可以直接安装到 Android 设备上运行,也可以用于二次开发、分析和测试。
  4. 支持多语言:APKTool 能够处理多语言的应用程序,它支持多种语言的资源文件,可以方便地进行多语言的应用程序开发和本地化。
  5. 支持自定义:APKTool 提供了多种配置选项,可以根据需要自定义应用程序的打包和解包过程,也可以定制应用程序的资源文件和 Smali 代码。
     

APKTool 下载

首先下载apktool.bat和apktool.jar
官网地址:https://ibotpeaches.github.io/Apktool/install/

下载说明:

  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
>apktool

D:\wxds450>echo off
Apktool 2.9.1 - a tool for reengineering Android apk files
with smali v3.0.3 and baksmali v3.0.3
Copyright 2010 Ryszard Wiśniewski <brut.alll@gmail.com>
Copyright 2010 Connor Tumbleson <connor.tumbleson@gmail.com>

usage: apktool
 -advance,--advanced   Print advanced information.
 -version,--version    Print the version.
usage: apktool if|install-framework [options] <framework.apk>
 -p,--frame-path <dir>   Store framework files into <dir>.
 -t,--tag <tag>          Tag frameworks using <tag>.
usage: apktool d[ecode] [options] <file_apk>
 -f,--force              Force delete destination directory.
 -o,--output <dir>       The name of folder that gets written. (default: apk.out)
 -p,--frame-path <dir>   Use framework files located in <dir>.
 -r,--no-res             Do not decode resources.
 -s,--no-src             Do not decode sources.
 -t,--frame-tag <tag>    Use framework files tagged by <tag>.
usage: apktool b[uild] [options] <app_path>
 -f,--force-all          Skip changes detection and build all files.
 -o,--output <dir>       The name of apk that gets written. (default: dist/name.apk)
 -p,--frame-path <dir>   Use framework files located in <dir>.

For additional info, see: https://apktool.org
For smali/baksmali info, see: https://github.com/google/smali

使用APKTool 反编译

使用一个现有的apk文件wxdu450.apk,在Adroid 4.4手机上安装会出现解析错误,拷贝到d:\wxds450下,进行反编译。

D:\wxds450>apktool d wxdu450.apk
I: Using Apktool 2.9.1 on wxdu450.apk
I: Loading resource table...
I: Decoding file-resources...
I: Loading resource table from file: C:\Users\u\AppData\Local\apktool\framework\1.apk
W: Cant find 9patch chunk in file: "b/b16.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "b/b14.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "e/b17.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "b/b17.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "e/b15.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "a5/b14.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "e/b16.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "a5/b17.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "a5/b16.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "e/b14.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "b/b15.9.png". Renaming it to *.png.
W: Cant find 9patch chunk in file: "a5/b15.9.png". Renaming it to *.png.
I: Decoding values */* XMLs...
I: Decoding AndroidManifest.xml with resources...
I: Regular manifest package...
I: Baksmaling classes.dex...
I: Baksmaling classes2.dex...
I: Baksmaling classes3.dex...
I: Baksmaling classes4.dex...
I: Baksmaling classes5.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...

反编译结果,生成一个wsdu450子目录,

D:\wxds450>dir wxdu450
 Volume in drive D has no label.
 Volume Serial Number is 1234-5678

 Directory of D:\wxds450\wxdu450

01/02/2024  11:16 PM    <DIR>          .
01/02/2024  11:16 PM    <DIR>          ..
01/02/2024  11:16 PM    <DIR>          res
01/02/2024  11:16 PM            26,279 AndroidManifest.xml
01/02/2024  11:16 PM    <DIR>          smali
01/02/2024  11:16 PM    <DIR>          smali_classes2
01/02/2024  11:18 PM    <DIR>          smali_classes3
01/02/2024  11:20 PM    <DIR>          smali_classes4
01/02/2024  11:21 PM    <DIR>          smali_classes5
01/02/2024  11:25 PM    <DIR>          assets
01/02/2024  11:25 PM    <DIR>          lib
01/02/2024  11:25 PM    <DIR>          kotlin
01/02/2024  11:25 PM    <DIR>          unknown
01/02/2024  11:25 PM    <DIR>          original
01/02/2024  11:26 PM             3,705 apktool.yml
               2 File(s)         29,984 bytes
              13 Dir(s)  79,236,169,728 bytes free

找到要修改的文件,进行修改。

这里修改apktool.yml文件,将 minSdkVersion从21【对应Android version 5.0】改为19【对应Android version 4.4】。

sdkInfo:
  minSdkVersion: 21
  targetSdkVersion: 28

改为

sdkInfo:
  minSdkVersion: 19
  targetSdkVersion: 28

 使用APKTool编译,重打包

D:\wxds450>apktool b wxdu450

D:\wxds450>echo off
I: Using Apktool 2.9.1
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes2 folder into classes2.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes3 folder into classes3.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes4 folder into classes4.dex...
I: Checking whether sources has changed...
I: Smaling smali_classes5 folder into classes5.dex...
I: Checking whether resources has changed...
I: Building resources...
I: Copying libs... (/lib)
I: Copying libs... (/kotlin)
I: Building apk file...
I: Copying unknown files/dir...
I: Built apk into: wxdu450\dist\wxdu450.apk

新的文件生成在dist目录下,将新文件更名为wxdu450_0.apk,并移动到d:\wxds450下。

打包完成后会发现指定的目录下出现了打包好的nopassword.apk文件。但是这个apk没有签名,需要重新签名之后,才能安装。

使用APKTool生成签名

生成keystore

keytooljarsigner 工具是JAVA JDK自带的,配置好JAVA环境即可!

输入命令:keytool -genkey -alias new.keystore -keyalg RSA -validity 20000 -keystore new.keystore,然后在输入两次最低六位数的密钥口令,例如123456,下面的信息直接Enter,最后y即可。

D:\wxds450>keytool -genkey -alias new.keystore -keyalg RSA -validity 20000 -keystore new.keystore
Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:
What is the name of your organizational unit?
  [Unknown]:
What is the name of your organization?
  [Unknown]:
What is the name of your City or Locality?
  [Unknown]:
What is the name of your State or Province?
  [Unknown]:
What is the two-letter country code for this unit?
  [Unknown]:
Is CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown correct?
  [no]:  y

Enter key password for <new.keystore>
        (RETURN if same as keystore password):
Re-enter new password:

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore new.keystore -destkeystore new.keystore -deststoretype pkcs12".

结果生成新文件new.keystore

 签名APK

未签名APK不能在安卓手机上安装,想要安装则想要对齐签名。

输入命令:jarsigner -verbose -keystore new.keystore -signedjar wxdu450_sign.apk wxdu450_0.apk new.keystore然后再输入密钥库的密码短语即你之前设置的密钥口令,即可签名!

D:\wxds450>jarsigner -verbose -keystore new.keystore -signedjar wxdu450_sign.apk wxdu450_0.apk new.keystore
Enter Passphrase for keystore:
   adding: META-INF/MANIFEST.MF
   adding: META-INF/NEW_KEYS.SF
   adding: META-INF/NEW_KEYS.RSA
  signing: classes.dex
  signing: classes2.dex
......
......
  signing: pinyindb/pinyin_gwoyeu_mapping.xml
  signing: pinyindb/pinyin_mapping.xml
  signing: pinyindb/unicode_to_hanyu_pinyin.txt
  signing: src/com/qq/jce/wup/wup.properties
jar signed.

Warning:
The signer's certificate is self-signed.
No -tsa or -tsacert is provided and this jar is not timestamped. Without a timestamp, users may not be able to validate this jar after the signer certificate's expiration date (2078-10-06) or after any future revocation date.

结果生成新文件wxdu450_sign.apk,这个新文件就可以在Android4.4手机上安装而不出现解析错误。修改之后虽然能安装成功,但也只是能安装成功,还远远没有达到真正能用的水平:点击打开应用,直接闪退。如果要真的用起来,还需要解决很多问题。 文章来源地址https://www.toymoban.com/news/detail-781787.html

到了这里,关于手机学习笔记之二:APKtool工具实现反编译-编译-签名全过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Android逆向之旅—反编译利器Apktool使用教程(Apktool的安装使用)建议新手浏览

    Android逆向之旅—反编译利器Apktool使用教程(Apktool的安装使用)建议新手浏览

    首先下载apktool.bat和apktool.jar 官网地址:https://ibotpeaches.github.io/Apktool/install/ 这个译文: 1.下载Windows包装脚本(右键单击,将链接另存为apktool.bat) 2.下载apktool-2(在此处查找最新版本) 3.将下载的jar重命名为apktool.jar 4.将两个文件(apktool.jar和apktool.bat)移动到Windows目录(通常

    2024年02月02日
    浏览(9)
  • 电子笔记真的好用吗?手机上适合记录学习笔记的工具

    电子笔记真的好用吗?手机上适合记录学习笔记的工具

    提及笔记,不少人都会和学习挂钩,的确学习过程中我们经常会遇到很多难题,而经常记录笔记可以有效地帮助大家记住很多知识,而且时常拿出笔记查看一下,可方便巩固过去学习的知识。 手机作为大家日常随身携带的工具,可以借助一些手机电子笔记工具来整理学习笔记

    2024年02月07日
    浏览(7)
  • 【Android】使用Apktool反编译Apk文件

    【Android】使用Apktool反编译Apk文件

    要使用Apktool,需要准备好 apktool.jar 和 apktool.bat 。 我准备了两种下载方式,可自行选择: apktool官网下载地址 百度网盘下载链接 apktool官网下载地址:https://apktool.org/docs/install 1.下载 apktool.bat :点击高亮字体 wrapper script ,进入 apktool.bat 的下载地址,我这里显示无法访问链接

    2024年02月21日
    浏览(8)
  • 【Android 逆向】ApkTool 工具使用 ( ApkTool 简介 | ApkTool 解包和打包 )

    【Android 逆向】ApkTool 工具使用 ( ApkTool 简介 | ApkTool 解包和打包 )

    之前写的 ApkTool 相关博客 : 【Android 安全】DEX 加密 ( 常用 Android 反编译工具 | apktool | dex2jar | enjarify | jd-gui | jadx ) 【Android 逆向】Android 逆向工具 ( Apktool | IDA | Python ) 【Android 逆向】APK 文件处理脚本 ApkTool.py ( 脚本简介 | 用法 | 分析 APK 文件 ) 参考 【Android 安全】DEX 加密 ( 常用

    2023年04月08日
    浏览(13)
  • IMX6ULL学习笔记(4)——安装并使用交叉编译工具链

    IMX6ULL学习笔记(4)——安装并使用交叉编译工具链

    本地编译 :编译器和目标程序都是相同架构的编译过程。 交叉编译 :编译器运行在x86架构平台上,编译生成ARM架构的可执行程序,这种编译器和目标程序运行在不同架构的编译过程。 arm-linux-gnueabihf-gcc: 名称中的Linux表示目标应用程序是运行在Linux操作系统之上的,例如前

    2024年02月04日
    浏览(8)
  • AI大模型学习笔记之二:什么是 AI 大模型的训练和推理?

    AI大模型学习笔记之二:什么是 AI 大模型的训练和推理?

    在人工智能(AI)的领域中,我们经常听到 训练(Training) 和 推理(Inference) 这两个词汇,它们是构建强大 AI 模型的关键步骤。我们通过类比人类的学习过程来理解这两个概念,可以更加自然而生动地理解AI大模型的运作原理。 想象一下,当一个人类宝宝刚刚降临人间,还没

    2024年01月19日
    浏览(11)
  • 【学习笔记】Yolov5调用手机摄像头实时检测(环境配置+实现步骤)

    【学习笔记】Yolov5调用手机摄像头实时检测(环境配置+实现步骤)

    我们需要首先从GitHub获取到yolov5的源码,直达链接如下: https://github.com/ultralytics/yolov5 打开后按照如下步骤下载源码压缩包即可 权重文件下载地址:https://download.csdn.net/download/liujiahao123987/87400892 注:我用的iOS,安卓版本没有\\\"Lite\\\" 需要的就是这个局域网,每个人的都不一样 需

    2023年04月25日
    浏览(14)
  • 安卓系统--翻译手机rom语言 添加多国语言 编译apk 反编译ODEX 工具步骤解析

    安卓系统--翻译手机rom语言 添加多国语言 编译apk 反编译ODEX 工具步骤解析

    很多小品牌机型不具备多语言设置。国内大都是中文。要想换为其他语言除非固件支持。例如国际版固件等等。大厂基本都有中文或者英文或者其他语言配置。而小品牌机型只能通过修改rom来达到多语言调用. 今天给友友介绍一款工具,可以用来翻译手机rom语言。添加多国语

    2024年02月04日
    浏览(7)
  • TypeScript 学习笔记(六):索引签名类型、映射类型

    TypeScript 学习笔记(六):索引签名类型、映射类型

    keyof 可以用于获取某种类型的所有键,其返回类型是联合类型。 keyof 与 Object.keys 略有相似,只不过 keyof 取 interface 的键 通过例子可以看到,这里的keyof Info其实相当于\\\"name\\\" | “age”。通过和泛型结合使用,TS 就可以检查使用了动态属性名的代码: 接口 基本数据类型 类 如果

    2024年02月17日
    浏览(9)
  • 密码学学习笔记(十七 ):Edwards曲线数字签名算法 - edDSA

    密码学学习笔记(十七 ):Edwards曲线数字签名算法 - edDSA

    Edwards曲线数字签名算法(Edwards-curve Digital Signature Alogorithm, edDSA)由Daniel J. Bernstein等人在2011年提出,它是一种使用基于扭曲爱德华兹曲线的Schnorr签名变体的数字签名方案。 EdDSA的一个特殊之处在于,该方案不要求每次签名都是用全新的随机数,而且该算法是确定性的。 EdDSA不直

    2024年02月16日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包