美文网首页
Hook逆向离线加密的autojs打包的脚本

Hook逆向离线加密的autojs打包的脚本

作者: 牙叔教程 | 来源:发表于2021-09-13 16:26 被阅读0次

    牙叔教程 简单易懂

    本文仅作为学习交流,请勿用作非法用途

    效果展示

    效果.png

    环境

    雷电模拟器Android版本: 7.1.2

    Android Studio版本: 4.1.2

    jadx-gui版本: 1.2.0

    流程

    1. 用autojs打包app, 安装到雷电模拟器
    2. 用jadx-gui查看app, 主要是查看包名类名
    3. 执行frida的hook命令, hook可疑的类, 主要是包含decrypt的类名
    4. 打印可疑decrypt方法的参数和返回值, 脚本内容就直接出来了

    autojs的测试代码

    1. main.js
    engines.execScriptFile("./dog.js");
    
    2. dog.js
    let result = "dog is running!";
    toastLog(result);
    

    frida的Hook代码

    1. hook.js
    Java.perform(function () {
      var String = Java.use("java.lang.String");
      var clazz5 = Java.use("com.stardust.autojs.engine.encryption.ScriptEncryption");
      clazz5.decrypt.implementation = function (a, b, c) {
        console.log("com.stardust.autojs.engine.encryption.ScriptEncryption");
        console.log("a =");
        console.log(a);
        console.log("b =");
        console.log(b);
        console.log("c =");
        console.log(c);
        let result = this.decrypt(a, b, c);
        let s = String.$new(result);
        console.log("s ====================");
        console.log(s);
        return result;
      };
    });
    
    2. 打印方法堆栈
    function trace() {
      var throwable = Java.use("java.lang.Throwable");
      send(
        "Backtrace:\n\t" +
          throwable
            .$new()
            .getStackTrace()
            .map((traceElement) => traceElement.toString() + "\n\t")
            .join("")
      );
    }
    
    3. 方法堆栈
    com.stardust.autojs.engine.encryption.ScriptEncryption.decrypt(Native Method)
    com.stardust.autojs.engine.encryption.ScriptEncryption$Companion.decrypt()
    com.stardust.autojs.engine.encryption.ScriptEncryption$Companion.decrypt$default()
    d.g.c.o.g.a.b(:4)
    d.g.c.o.g.a.doExecution(:2)
    com.stardust.autojs.engine.JavaScriptEngine.execute()
    com.stardust.autojs.engine.LoopBasedJavaScriptEngine.access$001()
    d.g.c.n.c.run(:2)
    android.os.Handler.handleCallback(Handler.java:751)
    android.os.Handler.dispatchMessage(Handler.java:95)
    android.os.Looper.loop(Looper.java:154)
    com.stardust.autojs.engine.LoopBasedJavaScriptEngine.execute()
    com.stardust.autojs.engine.LoopBasedJavaScriptEngine.execute()
    com.stardust.autojs.execution.LoopedBasedJavaScriptExecution.doExecution()
    com.stardust.autojs.execution.RunnableScriptExecution.execute()
    com.stardust.autojs.execution.RunnableScriptExecution.execute()
    com.stardust.autojs.execution.RunnableScriptExecution.run()
    java.lang.Thread.run(Thread.java:761)
    
    4. 可疑类, 用jadx搜索关键词 decrypt
    com.stardust.autojs.engine.encryption.ScriptEncryption.decrypt(byte[], int, int)
    com.stardust.autojs.engine.encryption.ScriptEncryption.decrypt$default(ScriptEncryption scriptEncryption, byte[] bArr, int i2, int i3, int i4, Object obj)
    com.stardust.autojs.engine.encryption.ScriptEncryption.decrypt(byte[] bArr, int i2, int i3)
    com.stardust.autojs.project.ProjectConfig.ScriptEncryption$Companion.decrypt(byte[] bArr, int i2, int i3)
    

    总结

    脚本打包使用离线加密的时候, javascript脚本本身应该先混淆一遍, 然后再用离线打包,

    或者, 直接使用自带的离线Dex加密 或者 离线Snapshot加密

    名人名言

    思路是最重要的, 其他的百度, bing, stackoverflow, 安卓文档, autojs文档, 最后才是群里问问
    --- 牙叔教程

    声明

    部分内容来自网络
    本教程仅用于学习, 禁止用于其他用途

    相关文章

      网友评论

          本文标题:Hook逆向离线加密的autojs打包的脚本

          本文链接:https://www.haomeiwen.com/subject/dqyfgltx.html