手把手安装 Apktool:把闭源 APK 拆开、改完、再装回去
【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool
Apktool 是一款 Android 逆向工具,能把闭源 APK 反编译成可读的资源、smali 代码和 AndroidManifest,改完之后重新打包成可安装的 apk。装好它,你的逆向流程就只剩两步。
装完之后你能干成什么
一条命令拆包:apktool d test.apk,得到一个全是可读文件的目录。
再一条命令装回去:apktool b test,产出改过的 apk。中间改文案、换资源、动 smali 逻辑,随便挑。
装好 Apktool 只需要 3 件事
确认机器上有 JDK
Apktool 是纯 Java 程序,跑起来全靠 Java 运行时(JDK,Java 开发工具包)。敲下面这条:
java -version执行后打印出 1.8 以上的版本号,这关就过了。💡 注意区分:只是运行,1.8 起步就够;走后面源码构建那条路,则需要 JDK 17 及以上。命令报command not found,先去装一个 JDK 再回来。
拿到 jar 包(发布版或源码构建,二选一)
直接下 jar。从 Apktool 官方发布页拿对应平台的启动脚本和apktool_x.x.x.jar(2.x 维护版、3.x 主线版任选其一),Linux 脚本内容见仓库 scripts/linux/apktool。
自己构建。嫌发布版旧就克隆仓库(git clone https://gitcode.com/GitHub_Trending/ap/Apktool),跑:
./gradlew build shadowJar proguard这一步让 Gradle 编译全部模块、打出一个带全量依赖的可执行 jar,产物落在brut.apktool/apktool-cli/build/libs/apktool_<版本>.jar。
把脚本和 jar 放进 PATH
两个文件必须放同一目录:启动脚本先在脚本所在目录找apktool.jar,找不到才去挑版本号最高的apktool_*.jar,然后执行java -jar,默认带上-Xmx1024M和-Dfile.encoding=utf-8。把它们放进/usr/local/bin(PATH 环境变量里本来就有的目录),全局哪都能敲apktool:
sudo mv apktool /usr/local/bin/apktool sudo mv apktool.jar /usr/local/bin/apktool.jar sudo chmod +x /usr/local/bin/apktool /usr/local/bin/apktool.jar敲完它,chmod(chmod 是改文件权限的命令)给脚本补上可执行位,缺了它系统会拒绝启动。📦 名字对不上就重命名成apktool.jar,脚本只认这个名字。
跑通第一轮解包和重打包
先确认装好了:
apktool v打印 Apktool 版本以及内置的 smali / baksmali 版本(当前仓库锁定在 3.0.10)才算数。若提示command not found,回到上一步核对目录和文件名。
接着用test.apk来一轮完整解包:
apktool d test.apk执行后生成与 apk 同名的test/目录:解码后的AndroidManifest.xml、res/资源、smali/字节码,外加记录解码参数的apktool.yml。
改到满意,重新打包:
apktool b test产出默认落在dist/test.apk,拿-o可以指定别的位置。✅ 装得上、跑得动,整条流水线就通了。
常见报错速查
can't find apktool.jar。脚本没在脚本所在目录找到 jar:确认二者同目录,文件名是apktool.jar或apktool_版本号.jar。
输出目录已存在的报错。test/之前解过一次,加-f强制覆盖:apktool d -f test.apk。
FrameworkNotFoundException。这个 apk 依赖的 framework 资源没装,先执行apktool if framework.apk把 framework 文件装好(想换目录就带-p <dir>)。
解包或编译时内存不足。脚本默认只给 JVM 1G 堆,用-J开头透传 JVM 参数,比如apktool b -JXmx2G test直接顶到 2G。
装完之后的下一站
几个高频参数:-o指定输出目录或文件,-s只反编译 smali 不动资源,-r反过来只解资源;--debuggable在编译时把android:debuggable改成 true,方便抓包调试。
改逻辑进smali/,改文案就在res/values/strings.xml里找。动完再执行一次apktool b test,改动就进了新 apk。
【免费下载链接】ApktoolA tool for reverse engineering Android apk files项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考