Frida逆向hook 某题库app

本文介绍了如何通过使用 jadx 进行反编译未找到解密地址,然后借助 Frida Hook 技术,实时获取并解密 app 中题库的题目和选项数据。详细步骤包括使用 jadx 寻找数据存储的 bean,然后编写并加载 frida 脚本以 hook 相关方法,最终输出解密后的题目内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接到一个需求, 需要app内部的题库, 通过抓包发现题目和选项返回的全是加密,jadx编译了一下,没有找到具体的解密地址,所以使用frida hook一下可以直接获取解密后数据

jadx寻找数据地址bean

  • 使用jadx反编译找到保存数据的beanList item
  • bean 装填地址
    在这里插入图片描述
  • QuestionBeanList item

进行 frida hook

import frida
import sys
rdev = frida.get_remote_device()
process = rdev.enumerate_processes()#获取手机所有进程
session = rdev.attach("xxxx")
script_js = """
        console.log("start");
        var List = Java.use('java.util.ArrayList');
        Java.perform(function(){
            var k = Java.use("com.lanjiyin.lib_model.util.TransUtils"); //hook 类名
            console.log("Hook start");
            k.onlineQuestionBeanToQuestionBean.implementation = function(a,b,c,d,e){ //onlineQuestionBeanToQuestionBean 方法名
            	var abc = this.onlineQuestionBeanToQuestionBean(a,b,c,d,e)  // 调用onlineQuestionBeanToQuestionBean 返回bean
            	send(abc.getAnswer())
            	send(abc.getTitle())
            	var ArrayList = Java.use('java.util.ArrayList');
            	var ArrayList = ArrayList.$new(abc.getOption());
            	for(var i =0; i<ArrayList.size(); i++){
            		var opt = Java.cast(ArrayList.get(i), Java.use("com.lanjiyin.lib_model.bean.tiku.OptionBean")) //循环每个题目的选项
            		send(opt.getValue())
            	}
            	return abc
            }
        });
        """
def on_message(message, data):
	print(message)
script = session.create_script(script_js)

script.on("message", on_message)
script.load()

sys.stdin.read()

输出结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值