如果是在字典里取值判断 该怎么hook?


%hook NSDictionary

-(id)objectForKey:(id)aKey{
	if([aKey isEqualToString:@"status"]){
		return @"1";
	}else{
	       return %orig;
	}
}

%end

我这样hook 完全不行

我想修改他网络请求成功时候回调里的JSON值。他是直接在字典里objectForKey取值判断的。如何修改他取出的值?

应该是类簇的原因。建议hook回调

回调的是block 在hopper里没解析出来。

在lldb中我修改了r4值为1时(我想要的功能完成) 现在我想写一个hook 不清楚要hook那个类跟函数

你先看下这个字典的类型,因为类簇的原因这个字典的名字不一定是NSDictionary或者NSMutableDictionary

试了,感觉这个思路行不通… 根本就没勾住NSDictionary,勾住objectForKey在控制台打印都没输出…还有好的思路吗?

你runtime打印的类型信息就是NSDictionary?

我两个都是过了,NSDictionary和NSMutableDictionary 都试过了。。图指标错了,r4是参数

可以看的出r4是NSDictionary

hook objc_msgSend

你的tweak filter是怎么写的?

他应该hook __NSCFDictionary. 跟filter应该无关

不是,应该是hook NSDictionary就可以了;我怀疑他的filter设置的是当前App的bundle id,而不是com.apple.foundation

Meh whatever

试了…我这修改参数是在C语言方法当中的…可能是因为在C语言方法中没勾住吧…我也试了勾住在该方法中所调用的方法输出控制台,控制台没有一个输出。:no_mouth: 有其他解决方法吗…?

能把舌头先捋直了再问么?

直接修改网络请求返回的数据

不清楚如何修改…

试了NSLocale的objectForKey:,你说的正解。