什么是GDB?
所有发布的iOS设备都是基于ARM架构的。我们开发iOS应用的时候编写的Objective-C代码会首先转换成ARM汇编,然后转换成机器指令。对ARM汇编语言和使用GDB调试有很好掌握的话,攻击者是能够在运行时解密Objective-C代码甚至修改代码的。
在安全评测的时候这个GDB挂起是必不可少的一个安全评测协议。
网上已经有了阻止GDB挂起的代码。【念茜的博客】给出了安全版的解决方案。目前我们的app中用过了。已经通过安全评测这一项测试。
看在Main.m文件中的代码如下:
代码编写流程:
1:引入头文件如下:
#import <dlfcn.h>
#import<sys/types.h>
2:添加对应函数如下:
typedef int(*ptrace_ptr_t)(int _request, pid_t _pid, caddr_t _addr, int _data);
#if!defined(PT_DENY_ATTACH)
#define PT_DENY_ATTACH 31
#endif // !defined(PT_DENY_ATTACH)
void disable_gdb() {
void* handle = dlopen(0, RTLD_GLOBAL |RTLD_NOW);
ptrace_ptr_t ptrace_ptr = dlsym(handle,"ptrace");
ptrace_ptr(PT_DENY_ATTACH, 0, 0, 0);
dlclose(handle);
}
3:在工程的mian.m文件的main函数里头就要这样写了:
int main(int argc, char *argv[]) {
/**防止GDB挂起*/
#ifndef DUBUG
disable_gdb();
#endif
@autoreleasepool {
return UIApplicationMain(argc, argv, nil,NSStringFromClass([AppDelegate class]));
}
}
如有问题可添加我的QQ:1290925041
还可添加QQ群:234812704(洲洲哥学院)
欢迎各位一块学习,提高逼格!
也可以添加洲洲哥的微信公众号
更多消息
更多信iOS开发信息 请以关注洲洲哥 的微信公众号,不定期有干货推送: