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

2024-06-04 7319阅读

文章目录

  • 1. 下载Apktool
    • 1.1 Apktool官网下载
    • 1.2 百度网盘下载
    • 2. 安装Apktool
    • 3. 使用Apktool
      • 3.1 配置Java环境
      • 3.2 准备Apk文件
      • 3.3 反编译Apk文件
        • 3.3.1 解包Apk文件
        • 3.3.2 修改Apk文件
        • 3.3.3 打包Apk文件
        • 3.3.4 签名Apk文件

          1. 下载Apktool

          使用Apktool,需要准备好 apktool.jar 和 apktool.bat。

          我准备了两种下载方式,可自行选择:

          • apktool官网下载地址
          • 百度网盘下载链接

            1.1 Apktool官网下载

            apktool官网下载地址:https://apktool.org/docs/install

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

            1.下载apktool.bat:点击高亮字体 wrapper script,进入apktool.bat的下载地址,我这里显示无法访问链接,因此给出替代方案。

            自己本地电脑新建一个apktool.bat文件,然后使用vscode或者notepad++等文本编辑器打开apktool.bat文件,并复制以下代码到该文件中:

            @echo off
            setlocal
            set BASENAME=apktool_
            chcp 65001 2>nul >nul
             
             
            set java_exe=java.exe
             
             
            if defined JAVA_HOME (
            set java_exe="%JAVA_HOME%\bin\java.exe"
            )
             
             
            rem Find the highest version .jar available in the same directory as the script
            setlocal EnableDelayedExpansion
            pushd "%~dp0"
            if exist apktool.jar (
            set BASENAME=apktool
            goto skipversioned
            )
            set max=0
            for /f "tokens=1* delims=-_.0" %%A in ('dir /b /a-d %BASENAME%*.jar') do if %%~B gtr !max! set max=%%~nB
            :skipversioned
            popd
            setlocal DisableDelayedExpansion
             
             
            rem Find out if the commandline is a parameterless .jar or directory, for fast unpack/repack
            if "%~1"=="" goto load
            if not "%~2"=="" goto load
            set ATTR=%~a1
            if "%ATTR:~0,1%"=="d" (
            rem Directory, rebuild
            set fastCommand=b
            )
            if "%ATTR:~0,1%"=="-" if "%~x1"==".apk" (
            rem APK file, unpack
            set fastCommand=d
            )
             
             
            :load
            %java_exe% -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0%BASENAME%%max%.jar" %fastCommand% %*
             
             
            rem Pause when ran non interactively
            for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" pause
            

            2.下载apktool.jar

            • 点击高亮字体 latest version,进入apktool.jar的下载地址,点击下载最新版的apktool_2.9.3.jar
            • 下载完成后将apktool_2.9.3.jar重命名为apktool.jar

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

              1.2 百度网盘下载

              百度网盘链接:

              链接:https://pan.baidu.com/s/1gmoIO2JABqotrLiaCMxN6g?pwd=4m4x

              提取码:4m4x

              2. 安装Apktool

              1.将apktool.bat 和 apktool.jar 放到任一同级目录下

              如 E:\Applications\Apktool

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

              2.添加该目录路径到 Path 环境变量

              • 右键此电脑->属性->系统->高级系统设置->高级->环境变量,打开环境变量
              • 修改 Path 变量,添加 E:\Applications\Apktool到变量中

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

                3.验证是否安装成功

                打开cmd,输入apktool 命令,显示如下图,表示安装成功:

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

                3. 使用Apktool

                3.1 配置Java环境

                要想使用Apktool工具,必须先配置Java环境,需要安装JDK 1.8以上的版本。

                JDK的安装与配置:Java环境搭建,配置环境变量

                3.2 准备Apk文件

                准备一个apk文件用于反编译的练习,apk文件见 1.2 章节的百度网盘链接:

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

                该apk文件打开后样式如下:

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

                3.3 反编译Apk文件

                反编译apk文件分为四步:

                • 解包apk文件
                • 对解包后的apk文件进行修改
                • 重新打包apk文件
                • 对apk文件进行签名(签名以后才能够安装到手机)

                  3.3.1 解包Apk文件

                  切换到apk所在的路径,并输入以下命令,解压apk文件到当前文件夹:

                  apktool d app-release.apk
                  

                  显示如下图,表示解压成功:

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

                  解压后在app-release.apk文件的同级目录下,得到同名文件夹 app-release

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

                  3.3.2 修改Apk文件

                  反编译的目的就是为了修改原来的apk文件,修改成自己想要的样子。

                  原先的的apk样式为红色的 Hello World!,此处我想修改成蓝色的 Hello Android!,步骤如下:

                  1.使用 vscode 打开 app-release 文件夹,找到路径 res/layout/activity_main.xml,修改其中的颜色和文本代码如下:

                  android:textColor="#0000FF"
                  android:text="Hello Android!"
                  

                  2.修改后的 activity_main.xml 文件内容如下

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

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

                  3.3.3 打包Apk文件

                  1.META-INF文件夹,这里面包含旧的签名文件,用不到该文件夹,因此删除它

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

                  2.使用以下命令打包文件夹,生成新的apk文件

                  apktool b app-release
                  

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

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

                  3.3.4 签名Apk文件

                  1.生成密钥库文件,即keystore文件

                  使用以下命令生成keystore文件:

                  keytool -genkey -alias android_keystore -keyalg RSA -validity 20000 -keystore android.keystore
                  

                  以上各个参数的含义如下:

                  • -genkey:这个参数表示keytool要生成一个新的密钥对和一个自签名的证书

                  • -alias android_keystore:这个参数指定了生成的密钥对和证书的别名(alias),此处别名为android_keystore,这个别名在密钥库中用于唯一标识这个特定的密钥对和证书

                  • -keyalg RSA:这个参数指定了用于生成密钥对的算法,即RSA算法。RSA是一种广泛使用的非对称加密算法,它使用一对密钥:一个公钥用于加密数据,另一个私钥用于解密数据

                  • -validity 20000:这个参数设置了证书的有效期,以天为单位,此处证书的有效期是20000天

                  • -keystore android.keystore:这个参数指定了密钥库(keystore)的文件名,即android.keystore。密钥库是一个用于存储密钥对和证书的数据库文件

                    当使用keytool生成密钥对和证书时,命令执行过程需要输入信息:

                    • 密钥库的密码:此处我填写为 123456
                    • 密钥对和证书的所有者姓名、组织单位、城市或地区、省/州/郡、国家代码等,这些信息将被包含在生成的证书中,用于标识证书的所有者。

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

                      此时就在当前目录下,生成了一个android.keystore文件:

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

                      2.将刚刚生成的android.keystore文件,拷贝到未签名的apk文件同级目录下,切换到该路径下,输入以下命令,进行签名:

                      jarsigner -verbose -keystore android.keystore -signedjar app-release-signed.apk app-release.apk android_keystore
                      

                      以上各个参数的含义如下:

                      • jarsigner:这是 Java 开发工具包 (JDK) 中的一个工具,用于对 JAR 文件、APK 文件等进行签名

                      • -verbose:这个参数用于输出详细的签名过程,当使用这个参数时,jarsigner 会显示更多关于签名步骤的信息,这有助于调试和了解签名过程的具体情况

                      • -keystore android.keystore:这个参数指定了密钥库文件的路径和名称,即 android.keystore

                      • -signedjar app-release-signed.apk app-release.apk:这个参数指定了签名后的 APK 文件的输出路径和名称,即 app-release-signed.apk,这个文件是原始 APK 文件 app-release.apk 经过签名后的结果

                      • android_keystore:这个参数指定了密钥库中用于签名的密钥对的别名,别名是在使用 keytool 生成密钥对时指定的,它用于在密钥库中唯一标识这个特定的密钥对

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

                        此时就在当前目录下,生成了一个app-release-signed.apk文件:

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

                        3.将新生成的app-release-signed.apk文件,拖入到夜神模拟器中安装,然后点击打开即可

                        如果夜神模拟器中原先存在该同名应用,需要先卸载掉,然后再安装,否则可能出现一直在安装中,导致安装不成功的情况。

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

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


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]