反debug
一、防护debug
1、ptrace(process trace 进程跟踪)
此函数提供了一个进程监听控制另一个进程,并且可以检测到被控制进程的内存和寄存器里面的数据。它可以用来实现断点调试和系统调用跟踪。debugserver就是用的它。
2、在代码中加入
ptrace(PT_DENY_ATTACH,0,0,0)进行防护
参数讲解
/*
arg1:ptrace要做的事情
arg2:要操作的进程
arg3(地址)、arg4(数据):取决于arg1
*/
二、反-防护debug
1、下载fishhook
2、动态库注入
3、代码
//定义指针,保存原来的函数地址
int (*ptrace_p)(int _request, pid_t _pid, caddr_t _addr, int _data);
//定义自己的函数
int my_ptrace(int _request, pid_t _pid, caddr_t _addr, int _data){
if (_request != PT_DENY_ATTACH) {//如果不是拒绝连接,就保持调用
return ptrace_p(PT_DENY_ATTACH,_pid,_addr,_data);
}
//如果是拒绝加载,就不执行直接return
return 0;
}
+(void)load
{
//交换
struct rebinding ptraceBd;//fishHook的绑定结构体
ptraceBd.name = "ptrace";//函数名称
ptraceBd.replacement = my_ptrace;//新函数地址
ptraceBd.replaced = (void *)&ptrace_p;//原始函数地址的指针
//弄一个数组,放fishHook的绑定结构体
struct rebinding bindings[] = {ptraceBd};
//fishHook的重绑定函数
rebind_symbols(bindings, 1);
}
三、反-反-防护debug
1、其实就是反fishhook。
2、依据动态库的加载顺序,在app中加入反debug的动态库,这样因为顺序优先于黑客注入的动态库,所以又防住了。
四、小知识点
1、应用中的动态库的加载顺序-从上到下

2、最后才是加载我们APP的Mach-O.
网友评论