一个奇怪的tweak问题

NSData* (*orig_decodestring) ( NSData *a1, char *a2,NSString *a3,NSString *a4, NSString *a5);

NSData* replaced_decodestring ( NSData *a1, char *a2,NSString *a3,NSString *a4, NSString *a5)
{
NSLog(@"[++++]a3 = %@", a3);
NSLog(@"[++++]a4 = %@", a4);
NSLog(@"[++++]a5 = %@", a5);

NSData* ok=orig_decodestring(a1,a2,a3,a4,a5);
return ok;

}

成功HOOK住了这个函数,A3,A4的值都正确,可是参数a5的值不对,我LLDB调试进去查看A5的值也不对,是不是类型有问题,可是我确定是NSSTRING类型啊。

你只是看着参数是NSString*的而已,这是个指针,指向的东西是什么它可管不了

po [a5 class] 看看是啥

我直接hook后在函数头断下,查看*($sp+4)确定是a5的值,可以程序跑下去取a5的length的时候就崩了,此函数加密的,好多乱序,会不会是反hook,堆栈会不平衡!

我po [*($sp+4) class]返回是_NSInlineData,确实不是NSSTRING,是我搞错了,内存中是MAC地址的字节,这是什么类型,以前没接触过,请教一下。

也没有接触过,应该是iOS私有的类型

kCBAdvDataManufacturerData = <00029r21 6y051rt2>; 类似这样的,MAC地址来的
在内存中也是 00 02 9R 21 6Y 05 1R T2 长度LENGTH是8,这是什么类型啊!没见过

那是说的就符合这个特征了 http://stackoverflow.com/questions/26636204/convert-nsinlinedata-to-nstring-in-ios

参数5 应该是是SP堆栈,PO [$SP CLASS]

这是十个月前的坟。