hook逆向autojs离线Dex加密的app(五)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: hook逆向autojs离线Dex加密的app(五)
ScriptRuntime.setName(ScriptRuntime.bind(context, scriptable, "info"), "yashu", context, scriptable, "info");
Object callName = OptRuntime.callName(new Object[]{ScriptRuntime.name(context, scriptable, "info")}, "toastLog", context, scriptable);


scriptable频繁作为参数, 那么scriptable有什么作用

org.mozilla.javascript.Scriptable是一个接口,

org.mozilla.javascript.ScriptableObject是一个抽象类, 继承了Scriptable


public abstract class ScriptableObject implements Scriptable, SymbolScriptable, Serializable, DebuggableObject, ConstProperties {


org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e._c_script_0的堆栈

org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e._c_script_0(Native Method)
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e.call()
org.mozilla.javascript.ContextFactory.doTopCall()
org.mozilla.javascript.ScriptRuntime.doTopCall()
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e.call()
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e.exec()
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)


Scriptable第一次出现是在d.g.c.o.g.a.doExecution(:2)

@Override // com.stardust.autojs.engine.RhinoJavaScriptEngine, com.stardust.autojs.engine.JavaScriptEngine
public Object doExecution(JavaScriptSource javaScriptSource) {
    C2943j.m3908e(javaScriptSource, ScriptEngine.TAG_SOURCE);
    if (!(javaScriptSource instanceof JavaScriptFileSource)) {
        return m3402b(javaScriptSource);
    }
    try {
        Class<?> cls = Class.forName(CompileContext.Companion.generateClassName(this.f4084a, ((JavaScriptFileSource) javaScriptSource).f459g));
        C2943j.m3907d(cls, "Class.forName(className)");
        Object newInstance = cls.newInstance();
        Objects.requireNonNull(newInstance, "null cannot be cast to non-null type org.mozilla.javascript.Script");
        // 这里第一次出现Scriptable
        return ((Script) newInstance).exec(getContext(), getScriptable());
    } catch (Exception unused) {
        return m3402b(javaScriptSource);
    }
}


Scriptable属于这个类d.g.c.q.i, 他继承了ImporterTopLevel,

ImporterTopLevel继承了TopLevel,

TopLevel继承了IdScriptableObject,

IdScriptableObject继承了ScriptableObject, IdFunctionCall


我们hook一下ImporterTopLevel

org.mozilla.javascript.ImporterTopLevel


找到两个参数有info的方法

getPackageProperty

----------方法getPackageProperty hook 开始----------
Called org.mozilla.javascript.ImporterTopLevel.getPackageProperty(java.lang.String, org.mozilla.javascript.Scriptable)
----------方法getPackageProperty 参数 开始----------
"info"
"<instance: org.mozilla.javascript.Scriptable, $className: d.g.c.q.i>"
----------方法getPackageProperty 参数 结束----------
----------方法getPackageProperty 返回值 开始----------
返回值类型: [object Object]
返回值: "<instance: java.lang.Object, $className: org.mozilla.javascript.UniqueTag>"
----------方法getPackageProperty 返回值 结束----------
----------getPackageProperty 堆栈 开始----------
Backtrace:
org.mozilla.javascript.ImporterTopLevel.getPackageProperty(Native Method)
org.mozilla.javascript.ImporterTopLevel.has()
org.mozilla.javascript.ScriptableObject.getBase()
org.mozilla.javascript.ScriptableObject.hasProperty()
org.mozilla.javascript.ScriptRuntime.initScript()
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e._c_script_0()
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e.call()
org.mozilla.javascript.ContextFactory.doTopCall()
org.mozilla.javascript.ScriptRuntime.doTopCall()
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e.call()
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e.exec()
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)
----------getPackageProperty 堆栈 结束----------
----------方法getPackageProperty hook 结束----------


get

----------方法get 返回值 开始----------
返回值类型: [object Object]
返回值: "<instance: java.lang.Object, $className: java.lang.String>"
----------方法get 返回值 结束----------
----------get 堆栈 开始----------
Backtrace:
org.mozilla.javascript.ImporterTopLevel.get(Native Method)
org.mozilla.javascript.ScriptableObject.getProperty()
org.mozilla.javascript.ScriptRuntime.topScopeName()
org.mozilla.javascript.ScriptRuntime.name()
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e._c_script_0(:2)
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e.call()
org.mozilla.javascript.ContextFactory.doTopCall()
org.mozilla.javascript.ScriptRuntime.doTopCall()
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e.call()
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e.exec()
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)
----------get 堆栈 结束----------
----------方法get hook 结束----------


包含toastLog的方法

get

----------方法get hook 开始----------
Called org.mozilla.javascript.ImporterTopLevel.get(java.lang.String, org.mozilla.javascript.Scriptable)
----------方法get 参数 开始----------
"toastLog"
"<instance: org.mozilla.javascript.Scriptable, $className: d.g.c.q.i>"
----------方法get 参数 结束----------
----------方法get 返回值 开始----------
返回值类型: [object Object]
返回值: "<instance: java.lang.Object, $className: org.mozilla.javascript.InterpretedFunction>"
----------方法get 返回值 结束----------
----------get 堆栈 开始----------
Backtrace:
org.mozilla.javascript.ImporterTopLevel.get(Native Method)
org.mozilla.javascript.ScriptableObject.getProperty()
org.mozilla.javascript.ScriptRuntime.topScopeName()
org.mozilla.javascript.ScriptRuntime.getNameFunctionAndThis()
org.mozilla.javascript.optimizer.OptRuntime.callName()
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e._c_script_0(:2)
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e.call()
org.mozilla.javascript.ContextFactory.doTopCall()
org.mozilla.javascript.ScriptRuntime.doTopCall()
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e.call()
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e.exec()
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)
----------get 堆栈 结束----------
----------方法get hook 结束----------


包含log的方法

get

----------方法get hook 开始----------
Called org.mozilla.javascript.ImporterTopLevel.get(java.lang.String, org.mozilla.javascript.Scriptable)
----------方法get 参数 开始----------
"log"
"<instance: org.mozilla.javascript.Scriptable, $className: d.g.c.q.i>"
----------方法get 参数 结束----------
----------方法get 返回值 开始----------
返回值类型: [object Object]
返回值: "<instance: java.lang.Object, $className: org.mozilla.javascript.BoundFunction>"
----------方法get 返回值 结束----------
----------get 堆栈 开始----------
Backtrace:
org.mozilla.javascript.ImporterTopLevel.get(Native Method)
org.mozilla.javascript.ScriptableObject.getProperty()
org.mozilla.javascript.ScriptRuntime.getPropFunctionAndThisHelper()
org.mozilla.javascript.ScriptRuntime.getPropFunctionAndThis()
org.mozilla.javascript.Interpreter.interpretLoop()
org.mozilla.javascript.Interpreter.interpret()
org.mozilla.javascript.InterpretedFunction.call()
org.mozilla.javascript.optimizer.OptRuntime.callName()
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e._c_script_0(:2)
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e.call()
org.mozilla.javascript.ContextFactory.doTopCall()
org.mozilla.javascript.ScriptRuntime.doTopCall()
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e.call()
org.autojs.autojspro.gen._7a9076d6d94e62c13d641aa71f19ae8e.exec()
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)
----------get 堆栈 结束----------
----------方法get hook 结束----------


未完待续

相关文章
|
5月前
|
JavaScript 前端开发 安全
VUE——APP,后端,前端三端AES加密解密
VUE——APP,后端,前端三端AES加密解密
196 0
|
安全 数据安全/隐私保护 Python
Crack App | 某赢+ 二手车 App 登录参数加密逻辑分析
Crack App | 某赢+ 二手车 App 登录参数加密逻辑分析
115 0
|
Dart 安全 数据安全/隐私保护
Crack App | 某都市魔幻 FM 请求参数 sign 的加密分析
Crack App | 某都市魔幻 FM 请求参数 sign 的加密分析
130 0
|
JavaScript 数据安全/隐私保护 Python
Crack App | 某搜索 App 中关于 x 信文章检索功能的加密参数分析(Frida Hook 篇)
Crack App | 某搜索 App 中关于 x 信文章检索功能的加密参数分析(Frida Hook 篇)
123 0
|
8月前
|
算法 Java 数据安全/隐私保护
Android App开发之利用JNI实现加密和解密操作实战(附源码 简单易懂)
Android App开发之利用JNI实现加密和解密操作实战(附源码 简单易懂)
384 0
|
8月前
|
XML 数据库 数据安全/隐私保护
Android App规范处理中版本设置、发布模式、给数据集SQLite加密的讲解及使用(附源码 超详细必看)
Android App规范处理中版本设置、发布模式、给数据集SQLite加密的讲解及使用(附源码 超详细必看)
90 0
|
Java 数据安全/隐私保护 Android开发
app逆向实战强化篇——破解某安卓APP请求加密参数
app逆向实战强化篇——破解某安卓APP请求加密参数
|
算法 Java 数据安全/隐私保护
Crack App | yrx App 对抗赛第二、第三题加密签名对抗
Crack App | yrx App 对抗赛第二、第三题加密签名对抗
133 0
|
安全 数据安全/隐私保护 Python
Crack App | 某新闻 app 注册 token 加密逻辑分析
Crack App | 某新闻 app 注册 token 加密逻辑分析
|
JavaScript 安全 算法
Crack App | 某资讯 app 参数 Signature 与 request_sign_q 加密逻辑分析
Crack App | 某资讯 app 参数 Signature 与 request_sign_q 加密逻辑分析
125 0

热门文章

最新文章