iOS-防止GDB挂起(就这么简单)
2016-08-04 13:59
176 查看
什么是GDB?
所有发布的iOS设备都是基于ARM架构的。我们开发iOS应用的时候编写的Objective-C代码会首先转换成ARM汇编,然后转换成机器指令。对ARM汇编语言和使用GDB调试有很好掌握的话,攻击者是能够在运行时解密Objective-C代码甚至修改代码的。
在安全评测的时候这个GDB挂起是必不可少的一个安全评测协议。
网上已经有了阻止GDB挂起的代码。【念茜的博客】给出了安全版的解决方案。目前我们的app中用过了。已经通过安全评测这一项测试。
看在Main.m文件中的代码如下:
代码编写流程:
1:引入头文件如下:
2:添加对应函数如下:
3:在工程的mian.m文件的main函数里头就要这样写了:
所有发布的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])); } }
更多消息
更多信iOS开发信息 请以关注洲洲哥 的微信公众号,不定期有干货推送:相关文章推荐
- 所有OC 面试题 就是这么简单。真的边边教你 学ios
- iOS攻防 - (四)iOS应用防止被GDB附加到进程
- iOS-内存管理就这么简单1
- iOS - try~catch捕获异常防止崩溃简单实用
- iOS AVPlayer 后台播放问题自动停止问题 防止应用被后台挂起方法
- iOS-内存管理就这么简单2
- iOS-判断字符串为空你以为这么简单吗?
- UBB编辑器原来就这么简单
- GUID 原来创建这么简单!~
- UBB编辑器原来就这么简单
- photoshop扣发丝——就这么简单
- 记录自己写的几个比较简单的存储过程(防止语法的忘记)
- 原来这么简单(3)
- 就是这么简单,QQ被盗了可以这样找回来!
- 哎,,我笨呀,这么简单,我居然不知道,,
- 学习.NET遇到的第一个问题。原来解决这么简单
- Atlas 原来这么简单???
- 子父表,就是这么简单。。。。。
- 原来这么简单(1)
- [Eclipse笔记]SWT真正的优势不是快这么简单