//Monkey就是用这种方式进攻的
1、创建一个动态库Inject,引入fishhook及sysctl头文件
2、创建一个继承自NSObject的类 如 XCInject
3、编码
#import "XCInject.h"
#import "fishhook.h"
#import <sys/sysctl.h>
//原始函数的地址
int (*sysctl_p)(int*,u_int,void*,size_t*,void*,size_t);
//自定义函数
intmySysctl(int*name,u_intnamelen,void*info,size_t*infosize,void*newInfo,size_tnewinfosize) {
if(namelen ==4&&
name[0] ==CTL_KERN&&
name[1] ==KERN_PROC&&
name[3] ==KERN_PROC_PID&&
info && (int)*infosize ==sizeof(structkinfo_proc)) {
interr =sysctl_p(name, namelen, info, infosize, newInfo, newinfosize);
//拿出info 做判断
structkinfo_proc*myInfo = (structkinfo_proc*)info;
if((myInfo ->kp_proc.p_flag&P_TRACED) !=0) {
//使用异或反
myInfo->kp_proc.p_flag^=P_TRACED;
returnerr;
}
}
returnsysctl_p(name, namelen, info, infosize, newInfo, newinfosize);
}
//如下方法即可对简单的sysctl 反调试进行破解
//对于sysctl反调试1进行该动态库注入后,可以检测到debugserver且可进行调试
+ (void)load {
rebind_symbols((struct rebinding[1]){{"sysctl",mySysctl,(void *)&sysctl_p}}, 1);
}
@end
网友评论