1.利用synalyze it !pro来修改RESTRICT段
将对应的二进制修改一个字段 达到修改RESTRICT段无效 继续hook2.那么接下来如果我想防止别人更改我的二进制 应该怎么做呢 我要确保我macho里面有__RESTRICT这个段 并且值为__restrict 那么首先我们需要拿到我们的macho文件的信息
3.首先我门回到dyld源码里面看下这个函数 只要我们能拿到我们自己的macho文件信息 那么就能拿到我们自己添加的__RESTRICT段和__restrict
4.在我们的项目里面导入
1)#import
#import <mach-o/dyld.h>
这两个头文件
首先在#import 里面
可以看到有两个这个头的结构体2)在#import 里面
我们能拿到我们的头信息5.将dyld函数拷贝到我们的项目里
1)回到我们的dyld看这些爆红的参数是怎么定义的
首先我们看下LC_SEGMENT_COMMAND这个函数的定义
将这些定义拷贝到我们代码里面 同时定义macho_header2)extern const struct mach_header* _dyld_get_image_header(uint32_t image_index) __OSX_AVAILABLE_STARTING(__MAC_10_1,__IPHONE_2_0);
这个函数image_index是个什么呢?
运行项目LLDB调试image list
这个就是我们的macho文件3)
我们将#import <mach-o/loader.h>的macho_header定义到宏里面4)那么我们现在可以直接检测了
然后运行
那么基于修改二进制的防护也就成功了
网友评论