App hook不到对应的函数分析

App hook不到函数的原因分析

1.问题:hook不到对应的函数

先通过app抓包分析,发现我们要找的接口是xxxxxx/loginByPassword,主要的加密参数在{"encryptParam":"D7qgDE6jklD76L6rpyJVts4sFzULcBHi7fUgo//QrMjQchiZKk6i1czrSCRHuQXp5r9Ezdfm/g491q0P/l4tVQowotCsmfI1mSXW1LyHLme0A/yoYJb8g=="}

接下来用jadx分析接口
直接搜索encryptParam可以看到对应的加密板块

  public static String e(String str, String str2) {
        try {
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            Charset charset = f35971a;
            cipher.init(1, new SecretKeySpec(str2.getBytes(charset), "AES"));
            return b(cipher.doFinal(str.getBytes(charset)));
        } catch (Exception e10) {
            g(e10);
            return null;
        }
    }

复制名称,发现此函数在ac.l0中
写一个hook脚本

Java.perform(function(){
    console.log("Class found and loaded--");
    let lo = Java.use("rc.l0");
    lo.e.implementation = function (str, str2) {
        console.log("into----")
        console.log(`l0.e is called: str=${str}, str2=${str2}`);
        let result = this["e"](str, str2);
        console.log(`l0.e result=${result}`);
        return result;}
});

发现无论怎么样都没hook到

2.排查问题

查找一下函数试下

    // // 查找函数
//     Java.enumerateLoadedClasses({
//     onMatch: function(name) {
//         if (name.includes("rc.l0")) console.log("Found class:", name);
//     },
//     onComplete: () => {}
// });

发现 void rc.l0.e(android.content.Context,java.lang.String)
入参和我hook app的不大一样啊
按照app的版本void rc.l0.e(java.lang.String,java.lang.String) 才对
查看jadx的app版本和我手机安装的不一致啊
修改函数位置之后重新尝试

可以看到已经正确的hook到了

3.结论:


重要问题说三遍
jadx分析的app一定要和手机安装的版本一致 !!!

jadx分析的app一定要和手机安装的版本一致 !!!

jadx分析的app一定要和手机安装的版本一致 !!!

<think>好的,我现在需要帮助用户了解钩子函数的概念、使用场景和实现方式。根据用户提供的引用内容,我需要整合信息,并确保回答结构清晰,符合用户的要求。 首先,钩子函数的基本概念。引用3中提到,钩子函数是在正常代码执行的前中后插入自定义逻辑,类似于高速公路的收费站。这解释了钩子的基本作用。需要把这点放在最前面,让用户先明白什么是钩子函数。 接下来是使用场景。根据三个引用,Java中的钩子用于事件处理、资源释放等;C语言用于回调机制,比如事件处理;Flask中的请求钩子,如before_request。需要分点列出,每个场景对应不同语言或框架的例子,这样用户更容易理解不同环境下的应用。 然后是实现方式。引用1提到Java中的钩子函数,如ShutdownHook;引用2说明C语言需要钩子点和链表,遍历执行;引用3中的Flask用装饰器注册。需要分别说明不同语言的实现方法,最好结合代码示例,但用户要求中文回答,可能不需要代码,但可以提及示例的存在。 还要注意引用标注,每个段落末尾加上对应的引用标识,比如[^1][^3]。确保每个引用正确对应到内容,比如Java的部分对应引用1,C对应引用2,Flask对应引用3。 用户要求生成相关问题,需要提出三个相关问题,涵盖概念、场景和实现方式。比如钩子函数与回调函数的区别,不同语言的实现差异,以及如何设计钩子系统。 最后检查是否符合系统级指令:行内公式用$,独立公式用$$,但这次问题中没有数学表达式,可能不需要。语法正确,中文回答,结构清晰,引用正确。确保没有使用markdown格式,段落用自然换行。</think>### 钩子函数的概念、使用场景及实现方式 #### 一、钩子函数的基本概念 钩子函数Hook Function)是一种在程序执行流程中**插入自定义逻辑**的技术,类似于在代码的关键位置设置“拦截点”。通过钩子函数开发者可以在**不修改原有代码**的前提下,扩展或修改程序的行为。例如,在Flask框架中,钩子函数被描述为“高速公路上的收费站”,在请求处理前后执行特定操作(如权限验证、日志记录)。 --- #### 二、使用场景 1. **事件驱动编程** 在Java中,钩子函数常用于监听事件(如关闭程序时执行资源清理)。例如,通过注册`Runtime.getRuntime().addShutdownHook()`在JVM终止前保存数据。 2. **框架扩展** Web框架(如Flask)通过钩子函数支持中间件功能。例如,使用`@app.before_request`在请求处理前进行身份验证,或通过`@app.after_request`在响应后添加HTTP头。 3. **回调机制** 在C语言中,钩子函数常用于实现回调。例如,定义钩子链表,遍历链表时依次调用注册的函数,实现模块化的事件处理[^2]。 --- #### 三、实现方式 1. **注册与触发机制** - **Java**:通过API注册钩子(如`ShutdownHook`),系统在特定事件(如程序退出)触发时自动调用。 - **C语言**:需定义钩子链表和钩子点,通过遍历链表执行所有注册的钩子函数。 - **Flask**:使用装饰器(如`@app.before_request`)将函数注册为钩子,框架在请求生命周期中自动触发。 2. **参数传递与返回值** 钩子函数通常接收上下文参数(如请求对象、事件类型),并可返回修改后的数据或状态,影响后续流程。例如,Flask的`before_request`若返回响应对象,则会直接终止后续处理。 --- #### 四、代码示例(以Flask为例) ```python from flask import Flask app = Flask(__name__) @app.before_request def check_auth(): # 在请求前检查用户权限 if not valid_token(): return "Unauthorized", 401 @app.route('/') def home(): return "Hello, World!" ``` 此代码通过`@app.before_request`钩子实现全局权限验证[^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值