吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2851|回复: 3
收起左侧

[Android 分享] 使用Frida对某APP进行Hook把玩

[复制链接]
QingYi. 发表于 2021-11-6 17:21
本帖最后由 QingYi. 于 2022-1-9 19:48 编辑

首先抓包看看有什么数据,其他的数据都没什么,我们来看看这个signature
1.png
打开"jd龟",它告诉我们这里关键词
2.png
猜一猜,是上面这个
3.png

果然也是bs64加密
4.png

如果这个是null就等于null 否则就是后面那个鬼东东,怎么可能是null呢,我们往上看看
5.png
其实他就是一个反射
6.png
这个GAME_SIGNATURE本质上就是signature,像极了宏定义
7.png
于是乎我们去com.hoge.android.jni.Utils这个类下面找找,发现他是在so里面无疑了
8.png
没错,它的名字是这样的,前面前缀lib
9.png

把它抓出来,丢进去IDA中看看
10.png
在导出函数里面搜索signature,点进去
11.png
第一个是env,第二个也没用到,不用管,第三个第三四个是传进去的参数,再点进去signature
12.png
看见了sha算法,再点进去,确实有蛮像
13.png
现在我们使用Frida来Hook 这个函数,首先要找到这个地址
14.png 15.png
在这个界面按下tab键就可以跳到arm汇编代码了,前面这块就是地址
代码如下:
[Python] 纯文本查看 复制代码
# -*- coding: UTF-8 -*-
import frida, sys

jsCode = """

Java.perform(function(){
        var resPtr = null;
    // find the address of the "so" file
        var soAddr = Module.findBaseAddress("libm2o_jni.so");
    // printf
        send('soAddr: ' + soAddr);
    // function address
        var sha1Addr = soAddr.add(0xA8E8 + 1);
        send('sha1Addr: ' + sha1Addr);
        Interceptor.attach(sha1Addr, {
                onEnter: function (args) {
        // 进入函数时的操作
                        send(Memory.readCString(args[0]));
                        send(args[1].toInt32());
                        resPtr = args[2];
                },
                onLeave: function(retval){
        // 退出函数时的一系列操作
                        var buffer = Memory.readByteArray(Memory.readPointer(resPtr), 60);
                        console.log(hexdump(buffer, {
                                offset: 0,
                                length: 60,
                                header: true,
                                ansi: false
                        }));
                }
        });
        
});

""";

def message(message, data):
    if message["type"] == 'send':
        print(u" {0}".format(message['payload']))
    else:
        print(message)

process = frida.get_remote_device().attach("海博TV")
script= process.create_script(jsCode)
script.on("message", message)
script.load()
sys.stdin.read()

看不懂的去翻下官方文档就能懂了

res: 16.png

compare:
17.png

组限定长度为n的包,不懂的看下c语言官方api,前面定死,后面传来的
18.png

19.png

v4 和 a1 a2 有关系,a2是传的第一个,也就是版本号,v11 也就和a3有关系,自己琢磨琢磨 从反射那一段到汇编这一块的流程
20.png

后面getBytes 再进行b64 编码 完事了.

免费评分

参与人数 8吾爱币 +15 热心值 +7 收起 理由
白云点缀的蓝 + 2 + 1 谢谢@Thanks!
神枪泡泡丶 + 2 + 1 用心讨论,共获提升!
xiaolong23330 + 2 + 1 你这个jd龟把我逗笑了
无敌小车 + 1 + 1 热心回复!
ofo + 2 我很赞同!
笙若 + 1 + 1 谢谢@Thanks!
正己 + 4 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
佚名RJ + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

本帖被以下淘专辑推荐:

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

小飞虫 发表于 2021-11-7 13:45
感谢分享,最近在学习
Light紫星 发表于 2021-11-9 05:07
神枪泡泡丶 发表于 2021-11-22 16:53
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-22 06:12

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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