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