iOS攻防ios 逆向开发

《iOS防护08》防护fishhook

2020-11-03  本文已影响0人  不仅仅是个程序猿

fishhook的原理是修改符号绑定

#import "ViewController.h"
#import "PtraceHeader.h"
#import <dlfcn.h>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.view.backgroundColor = [UIColor whiteColor];
    
    //拼接一个ptrace字符串
    unsigned char funcStr[] = {
        ('a' ^ 'p'),
        ('a' ^ 't'),
        ('a' ^ 'r'),
        ('a' ^ 'a'),
        ('a' ^ 'c'),
        ('a' ^ 'e'),
        ('a' ^ '\0'),
    };
    unsigned char *p = funcStr;
    while (((*p) ^= 'a') != '\0') {  //二次异或复原字符
        p++;
    }
    
    //通过dlopen拿到句柄
    void *handle = dlopen("/usr/lib/system/libsystem_kernel.dylib",RTLD_LAZY);
    
    //定义函数指针
    int (*sys_ptrace) (int _request, pid_t _pid, caddr_t _addr, int _data);
    
    if (handle) {
        sys_ptrace = dlsym(handle, (const char *)funcStr);
        if (sys_ptrace) {
            sys_ptrace(PT_DENY_ATTACH, 0, 0, 0);
        }
    }
}

@end

如何拿到ptrace函数的句柄:

  1. 添加ptrace符号断点
    可以得到ptrace函数所在的系统库 libsystem_kernel.dylib
  2. 断点处,在控制台输入命令image list
    查看加载的镜像,搜索 libsystem_kernel.dylib,找出libsystem_kernel.dylib 的路径为 /usr/lib/system/libsystem_kernel.dylib
截屏2020-11-03上午10.16.41.png
上一篇下一篇

猜你喜欢

热点阅读