iOS逆向攻防-ptrace,fishhook,dlopen
2020-12-11 本文已影响0人
你飞跃俊杰
LLDB 调试了应用
LLDB-debugsever(附加你的应用)
Process trace(P trace)进程跟踪
控制了当前进程
一、防止LLDB-debugsever
在commonLine项目#import <sys/ptrace.h> 点击去复制粘贴在.h文件中
//利用ptrace防护debugserver
/*
arg1:ptrace 要做的事情
arg2:要操作的进程的id
arg3(地址)\arg4(数据):取决于第一个参数
*/
ptrace(PT_DENY_ATTACH, 0, 0, 0);
/*
运行--附加闪退
点击--正常使用没问题
*/
二、防止hook ptrace
void *handle = dlopen("/usr/lib/system/libsystem_kernel.dylib", RTLD_LAZY);
int (*ptrace_p)(int _request, pid_t _pid,caddr_t _addr,int _data);
ptrace_p = dlsym(handle, "ptrace");
if (!ptrace_p) {
return;
}
ptrace_p(PT_DENY_ATTACH, 0, 0, 0);
fishhook代码
//定义指针,保存原来的函数地址
int(*ptrace_p)(int _request,pid_t _pid,caddr_t _addr,int _data);
//自定义的ptrace
int jun_ptrace (int _request,pid_t _pid,caddr_t _addr,int _data){
if (_request != PT_DENY_ATTACH) {
//如果不是拒绝附加
return ptrace_p(_request, _pid, _addr, _data);
}else{
//如果是拒绝附加,就直接return 不执行。
return 0;
}
}
+(void)load{
//fish_hook
struct rebinding ptraceBd;
ptraceBd.name = "ptrace";
ptraceBd.replacement = jun_ptrace;//新函数的地址
ptraceBd.replaced = (void *)&ptrace_p;//保留原始的函数地址
struct rebinding binds[] = {ptraceBd};
rebind_symbols(binds, 1);//数组,长度为1
}