ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

手把手安装 Apktool:把闭源 APK 拆开、改完、再装回去

手把手安装 Apktool:把闭源 APK 拆开、改完、再装回去

手把手安装 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),仅供参考

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进