吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1316|回复: 7
收起左侧

[Android 求助] Frida hook 方法问题

[复制链接]
bigbigban21 发表于 2022-11-10 10:42
本帖最后由 bigbigban21 于 2022-11-10 10:47 编辑

小白一枚,最近正在学习安卓逆向,由于前阵子旁观大佬用frIDA hook目标app的加解密流程后挖到许多高危,所以现在也在照猫画虎学用frida,在hook某方法时遇到问题
app的部分源代码如下:
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
public static String getAppVerifyValue(WWidgetData curWData, long timeStamp) {
    String md5 = getMD5Code(curWData.m_appId + ":" + curWData.m_appkey + ":" + timeStamp);
    String value = "md5=" + md5 + ";ts=" + timeStamp;
    return value;
}
 
public static String getMD5Code(String value) {
    if (value == null) {
        value = "";
    }
    try {
        MessageDigest md = MessageDigest.getInstance("MD5");
        md.reset();
        md.update(value.getBytes());
        byte[] md5Bytes = md.digest();
        StringBuffer hexValue = new StringBuffer();
        for (byte b : md5Bytes) {
            int val = b & 255;
            if (val < 16) {
                hexValue.append("0");
            }
            hexValue.append(Integer.toHexString(val));
        }
        return hexValue.toString();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
        return null;
    }
}

现在想要拿到每次计算得到的md5值,我目前的脚本如下:
[JavaScript] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
Java.perform(function () {
    var CommClass = Java.use('xxx.xxx.xxx.xxx.xxx.xxx')
    CommClass.getAppVerifyValue.implementation = function(curWData, timeStamp){
        let md5 = getMD5Code(curWData.m_appId + ":" + curWData.m_appkey + ":" + timeStamp)
        console.log("md5=" + md5 + ";ts=" + timeStamp)
        return "md5=" + md5 + ";ts=" + timeStamp
    }
})

疑问主要有两点:
1、传入的curWData是一个类的实例化对象,能否直接使用curWData.m_appkey获取类属性?
2、hook的方法中调用了另一个方法getMD5Code,脚本中能否直接使用getMD5Code?如果不能该如何调用?再hook一个getMD5Code方法吗?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| bigbigban21 发表于 2022-11-10 13:34
关于第一个问题,已经试过了,如果传入参数是一个类的实例化对象,可以通过.XXX获取类属性。关于第二个问题目前还没找到解决办法,希望大佬们帮忙看下如何解决
jayfox 发表于 2022-11-10 13:51
 楼主| bigbigban21 发表于 2022-11-10 14:26
目前已经拿到MD5值了,直接hook下面的getMD5Code方法就行了,现在的代码如下:
[JavaScript] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
9
Java.perform(function () {
    var CommClass = Java.use('xxx.xxx.xxx.xxx.xxx')
    CommClass.getMD5Code.implementation = function (value){
        console.log(value);
        const result = this.getMD5Code(value);
        console.log(result)
        return result
    }
})

但还是想知道hook的方法中调用了另一个方法,如何去获得调用方法的返回值?
debug_cat 发表于 2022-11-10 15:44
直接hook get md5 code就行了,你直接找到md5code这个方法所属的类,然后hook就行。
kof21411 发表于 2022-11-10 20:37
bigbigban21 发表于 2022-11-10 14:26
目前已经拿到MD5值了,直接hook下面的getMD5Code方法就行了,现在的代码如下:
[mw_shl_code=javascript,t ...

你想用的应该是RPC吧
 楼主| bigbigban21 发表于 2022-11-11 08:35
kof21411 发表于 2022-11-10 20:37
你想用的应该是RPC吧

对对对,就是这个意思,主动调用方法获取返回值
kof21411 发表于 2022-11-11 18:51
bigbigban21 发表于 2022-11-11 08:35
对对对,就是这个意思,主动调用方法获取返回值

[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import frida
import sys
  
rdev = frida.get_usb_device()
session = rdev.attach("com.yuanrenxue.onlinejudge2020"# 包名
  
js_code = """
rpc.exports = {
    getsign: function(i) {
        Java.perform(function() {
            console.log("get_sign");
            var my_class1 = Java.use("com.yuanrenxue.onlinejudge2020.OnlineJudgeApp");
            var reslut = my_class1.getSign1(i);
            console.log(reslut);
            send({ "sign": reslut, "num": i })
            return reslut;
        });
    },
};
"""
  
script = session.create_script(js_code)
  
  
def on_message(message, data):
    sign = message.get("payload").get("sign")
    num = message.get("payload").get("num")
  
  
script.on("message", on_message)
script.load()
  
script.exports.getsign(1) # 调用的函数
  
sys.stdin.read()
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-24 12:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表