iOS逆向之fishhookDemo 题外话:此教程是一篇严肃的学术探讨类文章,仅仅用于学习研究,也请读者不要用于商业或其他非法途径上,笔者一概不负责哟~~
- 非越狱的iPhone手机
- fishhook
//函数指针,用来保存原始的函数的地址
static void(*old_nslog)(NSString *format, ...);
//新的NSLog
void myNSLog(NSString *format, ...){
format = @"~~勾上了!\n🐶🐶🐶🐶🐶";
//再调用原来的nslog
old_nslog(format);
}
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
NSLog(@"点击了屏幕!");
}
struct rebinding {
const char *name; //需要HOOK的函数名称,字符串
void *replacement;//替换到哪个新的函数上(函数指针,也就是函数的名称)
void **replaced;//保存原始函数指针变量的指针(它是一个二级指针)
};
定义结构体:
//定义rebinding结构体
struct rebinding nslogBind;
//函数名称
nslogBind.name = "NSLog";
//新的函数地址
nslogBind.replacement = myNSLog;
//保存原始函数地址的变量的指针
nslogBind.replaced = (void *)&old_nslog;
重新绑定:
//数组
struct rebinding rebs[]={nslogBind};
/*
arg1:存放rebinding结构体的数组
arg2:数组的长度
*/
rebind_symbols(rebs, 1);
是不是很爽,是不是很简单?好,看点不一样的
void func(const char *str){
NSLog(@"%s",str);
}
void newFunc(const char *str){
NSLog(@"勾上了!");
funcP(str);
}
代码没有任何问题,但就是勾不住;自己写的函数是勾不住的,具体原因见下回分解 😁