攻击者通常有两种手段进行攻击,第一种是修改app的二进制文件增加攻击代码,第二种是通过注入外部库,即启动前通过设置DYLD_INSERT_LIBRARIES环境变量指定第三方库文件,加载前会优先加载第三方库文件。攻击者可以通过注入攻击将一段恶意代码写到目标进程,这段代码可以加载其它可执行程序,进而实施hook,监控程序运行、获取敏感信息等。常见的动态注入,可以实现窃取输入的登录账号、密码、支付密码,修改转账的目标账号、金额,窃取通讯数据等。
以下两种方式任选其一:
1.xcode设置Other Linker Flags 参数 release模式下增加
-Wl,-sectcreate,_RESTRICT,_restrict,/dev/null
这里按一整行设置,不要分行设置!
//注意是release模式,不然模拟机运行会报错(DYLD_ROOT_PATH not set for simulator program)
2.代码DYLD_INSERT_LIBRARIES 检测是否越狱
char *env = getenv("DYLD_INSERT_LIBRARIES");
If(env !=null)
{ NSLog(@"不为空表示通过环境变量有注入模块%s",env); }
env 会打印 我的工程会打印这个 "/usr/lib/libMTLCapture.dylib" ,不知道为啥,有知道的给我说下谢谢了
3.如果有遇到报错
编译报错:dyld:Library not loaded:/user/lib/libMTLCapture.dylib
//是否越狱
+ (BOOL)isJailBreak {
BOOL isjb = NO;
FILE *f = NULL;
if ((f = fopen("/bin/bash", "r"))) {
//Device is jailbroken
isjb = YES;
fclose(f);
f = NULL;
}
return isjb;
}