iOS逆向之fishhookDemo

题外话:此教程是一篇严肃的学术探讨类文章,仅仅用于学习研究,也请读者不要用于商业或其他非法途径上,笔者一概不负责哟~~

准备工作

Demo 1:

1、新建工程,将fishhook文件拖入工程

image.png

2、我们的目的是hook系统的NSLog函数,编写代码

//函数指针,用来保存原始的函数的地址
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(@"点击了屏幕!");
}

3、了解fishhook中的struct rebinding结构体

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);

4、运行,点击屏幕,打印的是我们自己的myNSLog

image.png

是不是很爽,是不是很简单?好,看点不一样的

Demo2

1、自己写了两个函数func和newFunc:

void func(const char *str){
    NSLog(@"%s",str);
}
void newFunc(const char *str){
    NSLog(@"勾上了!");
    funcP(str);
}

2、现在的目的是想交换func和newFunc,当调用func时,我们调用newFunc,跟Demo1一样的编写代码

image.png

3、运行点击屏幕,发现打印的是func中的文字,并不是newFunc的文字

image.png

代码没有任何问题,但就是勾不住;自己写的函数是勾不住的,具体原因见下回分解 😁

代码已上传:https://github.com/WinJayQ/fishhookDemo

Hook不成功原因:iOS逆向之fishHook原理探究

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一直自认为很努力努力,实则毫无努力可言。 觉得自己努力学习,最终的...
    静待十年阅读 2,312评论 0 0
  • 邻居家的伯伯买了一把理发的推子,专门给家里的孩子们理发,那个时候没有头型之说,只知道头发长了,就剪掉。作为邻居的沉...
    如释笔记阅读 1,702评论 0 0
  • 这两本书读完,总觉得需要再一次的深入,要不就自己觉得有些囫囵吞枣,但里面有些案例还是给我留下了深刻印象。其中蓄杯和...
    嫃誠的我阅读 2,540评论 0 0
  • 我来了这个培训机构已经有一个月多了。 烦躁不安的感觉越来越强烈。 事实上我最近经历的事情实在太多,可以庆幸的是,未...
    林北樱阅读 1,490评论 0 0

友情链接更多精彩内容