需求: 现在有函数的头文件也有函数实现的伪代码,想在函数实现里面加个日志打印传入的参数值以及返回值。
代码:
操作步骤: 问下使用cycript可以实现吗?如果不行,那有没有什么办法可以实现?
我现在看到cycript使用MSHookMessageEx也是整个替代或者调用原来函数。
** 任何其他描述: iOS逆向小白,学习第2天。以前搞c++的,望各位不吝赐教。
** 环境: iPhone5, ios11.3,macOS11.1
需求: 现在有函数的头文件也有函数实现的伪代码,想在函数实现里面加个日志打印传入的参数值以及返回值。
代码:
操作步骤: 问下使用cycript可以实现吗?如果不行,那有没有什么办法可以实现?
我现在看到cycript使用MSHookMessageEx也是整个替代或者调用原来函数。
** 任何其他描述: iOS逆向小白,学习第2天。以前搞c++的,望各位不吝赐教。
** 环境: iPhone5, ios11.3,macOS11.1
你的需求本身是做不到的,但你实际的需求根本不需要实现你说的功能
没错啊,你把原来的函数当作一个黑盒,调用原函数前打印参数,调用原函数拿到返回值之后返回这个返回值之前打印返回值, 就等价于你要实现的功能了。 我寻思既然写过C++的话这应该不是很难理解的概念吧
感谢您的回复,您说的这个我也想过。这是个加密函数,我想打印出原来程序中传入的参数以及返回值,好先弄明白传入参数的格式,这样我就可以自己后续去调用这个函数。
我看到cycript是用下面的实例来Hook具体消息的:
1、原来的函数声明
NSString *(*oldDescription)(id self, SEL _cmd);
2、新建的函数
NSString *newDescription(id self, SEL _cmd) {
NSString *description = (*oldDescription)(self, _cmd);
description = [description stringByAppendingString:@"!"];
return description;
}
3、Hook
MSHookMessageEx(
[NSObject class], @selector(description), &newDescription, &oldDescription
);
有个疑问:
cycript在执行完语句3之后,就会用新的函数2替代了原来旧的函数1了吗?
原来程序中调用1的地方后面就会统统转到调用2吗?