ios 尝试直接从处理程序读取字节数组时,Frida工具cli手动

7xzttuei  于 2023-03-09  发布在  iOS
关注(0)|答案(1)|浏览(122)

因此,由于某种原因,我可以将ObjC对象转换为string,但无法读取bytearray。如果我尝试执行以下调用,frida cli将无限期冻结
这是我的剧本

var foo = 0x0

Interceptor.attach(
ObjC.classes['AClass']['- AMethod:'].implementation,
{
    onEnter: function (args) {
        foo = ObjC.Object(args[2])
    }
})

这是我的交互式环境

[Remote::com.some.app ]-> foo.$className
"__NSTaggedDate"
[Remote::com.some.app ]-> foo.toString()
"2023-03-06 12:00:55 +0000"
[Remote::com.some.app ]-> foo.handle
"0x8311b5766c5e4001"
[Remote::com.some.app ]-> ptr(foo.handle).readByteArray(1) <--- the cli has hanged now
<nothing will be returned here> ^c^d also won't work
7lrncoxx

7lrncoxx1#

您的主要问题是handle是一个64位值,但它不是一个指向有效内存区域的指针,正如您已经发现的那样。您可以从handle的非常高的值中看出这一点-据我所知,iOS进程从不使用该区域的内存。
句柄更像是字典中指定对象的键(你没有权限访问),或者像是数据库中的主键/id列,最后你只需要记住句柄是一个标识符,而不是一个指针。
如果你想得到__NSTaggedDate的原始数据,你应该检查它的方法哪一个是合适的。因为__NSTaggedDate有超类NSDate,我会尝试,例如timeIntervalSince1970。它返回一个双精度值。

相关问题