Frida如何获取block数据


#1

目的是想拿到网络通讯数据,一般在AF里数据在block回调里,现在就卡在怎么拿到block里的数据,请大神指教~~

iOS :8.1.3 越狱
MAC: 10.13.1
FRIDA: 12.1.2

脚本里拿到block代码:

var sucblock = new ObjC.Object(args[4]);

运行结果 :
message: {‘type’: ‘send’, ‘payload’: ‘success : < NSStackBlock : 0x16fd1db50>’} data: None

拿到block 后,我想把 block里的数据拿到

我尝试过看官方写的方法

const pendingBlocks = new Set();

Interceptor.attach(…,
{
onEnter(args)

{

const block = new ObjC.Block(args[4]);
pendingBlocks.add(block);// Keep it alive

const appCallback = block.implementation;

block.implementation = (error, value) =>
{ // Do your logging here
const result = appCallback(error, value);
pendingBlocks.delete(block);
return
result;
};
}
});

可能是我没理解透,总是不对,不知道怎么拿到block里的数据,求大神指点~~十分感谢


#2
if(ObjC.available) {
var hook = ObjC.classes.className["- funcName"];
Interceptor.attach(hook.implementation, {
    onEnter: function(args) {
        var block = new ObjC.Block(args[4]);
        const appCallback = block.implementation;
        block.implementation = function (error, value)  {
            const result = appCallback(1, null);
            return result;
        };
    },
});
} else {
console.log("Objective-C Runtime is not available!");
}

#3

首先谢谢您

您能解释一下
block.implementation = function (error, value)//这里的error,value是固定写,还是需要怎么修改吗 {
const result = appCallback(1, null) //这里的参数我也不太懂该怎么写;
return result;
};

最后我怎么将里面的值打印出来呢
我试了console.log("Block : " + appCallback.toString());

但结果是:
Block : function bound () { [bound code] }

十分感谢~~


#4

是小白就得回复要审核好久吗。。。


#5

审核是人工的,跟管理员多久上一次线有关


#6

你这里打印的是 appCallback 这个 js 对象(是个函数),而不是他的返回值


#7

那怎么打印返回值呢,十分感谢


#8

https://blog.csdn.net/bboyfeiyu/article/details/25284461
请耐心的把这个看完,你如果想知道 appCallback 里面有啥,可以尝试 console.log("appCallback:"+ appCallback()),PS:应该是个内存地址,我没有打印过 :stuck_out_tongue:


#9

我会耐心把它看完的,哈哈哈,虾虾农~~~