×

注意!页面内容来自https://blog.csdn.net/weixin_51108264/article/details/146558943,本站不储存任何内容,为了更好的阅读体验进行在线解析,若有广告出现,请及时反馈。若您觉得侵犯了您的利益,请通知我们进行删除,然后访问 原网页

Android apk加固、加壳免费解决方案(包括dex文件,so文件加密) 步骤1:使用apktool,解压apk

概要

步骤1:使用apktool,解压apk

提示:不了解apktool的使用,请提前找资料学习一下,这里直接使用

为什么使用apktool工具解压apk,而不使用zip工具?

说明:

  1. ‌R8 的引入与默认启用‌ 。当 Android Gradle 插件升级至 ‌3.4.0 或更高版本‌时,R8 成为默认的编译工具,负责代码缩减、混淆、优化及 DEX 文件生成等任务‌。
  2. Android Gradle 插件升级至 ‌3.4.0 之前的版本,可以使用ziputil进行解压apk包,加固后的apk可以正常运行,但是插件升级之后的版本,如果还使用ziputil,加固后的apk,安装后会直接闪退。具体原因博主没有找到,如果有知道原因的,欢迎反馈一下,博主先表示感谢。
  3. 后经验证,直接使用apktool,进行解压,其实就是反编译apk,然后加固完成的apk,可以正常安装运行。

apktool 解压apk(反编译apk)

提示:这里直接放工具类了,博主使用的java语言进行的脚本化运行,如有可以优化的地方,欢迎评论区反馈。


    /**
     * 使用 Apktool 解压(反编译)APK
     *
     * @param apkPath      APK 文件路径
     * @param outputFolder 解压后的输出目录
     * @return 是否成功
     */
    public static boolean decompileApk(String apkPath, String outputFolder) {
        // 构建命令
        String command = "C:\\Users\\Administrator\\Desktop\\apktool\\apktool d -s " + apkPath + " -o " + outputFolder;

        try {
            // 创建 ProcessBuilder
            ProcessBuilder processBuilder = new ProcessBuilder();

            // 根据操作系统选择命令解释器
            String os = System.getProperty("os.name").toLowerCase();
            if (os.contains("win")) {
                // Windows 系统
                processBuilder.command("cmd.exe", "/c", command);
            } else {
                // Linux/macOS 系统
                processBuilder.command("bash", "-c", command);
            }

            // 启动进程
            Process process = processBuilder.start();

            String encoding = os.contains("win") ? "GBK" : "UTF-8";

            // 读取命令输出
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream(), encoding));
            BufferedReader errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream(), encoding));

            // 设置超时时间(例如 3 秒)
            long timeout = 3 * 1000;
            long startTime = System.currentTimeMillis();

            // 读取输出和错误流
            String line;
            while (true) {
                // 检查是否超时
                if (System.currentTimeMillis() - startTime > timeout) {
                    System.err.println("APK 解压完成!");
                    process.destroy(); // 终止进程
                    return false;
                }

                // 读取标准输出
                if (reader.ready()) {
                    line = reader.readLine();
                    System.out.println(line);
                }

                // 读取错误输出
                if (errorReader.ready()) {
                    line = errorReader.readLine();
                    System.err.println(line);
                }

                // 检查进程是否结束
                try {
                    int exitCode = process.exitValue();
                    if (exitCode == 0) {
                        System.out.println("APK 解压成功!");
                        return true;
                    } else {
                        System.err.println("APK 解压失败,退出码:" + exitCode);
                        return false;
                    }
                } catch (IllegalThreadStateException e) {
                    // 进程仍在运行,继续等待
                    Thread.sleep(100); // 等待 100 毫秒
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

小结

提示:请提前下载好apktool,并修改代码中的cmd指令地址

ApkTool工具链接 apktool github 跳转下载

提示:

如您在尝试自己加固apk,遇到任何问题,欢迎评论区交流。

确定要放弃本次机会?
福利倒计时
: :

立减 ¥

普通VIP年卡可用
立即使用
参与评论 您还未登录,请先 登录 后发表或查看评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山心湖

很高兴我的文章能帮助到您

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
点击重新获取
扫码支付
< type="text/css">
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值