前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Swift中防止ptrace依附

Swift中防止ptrace依附

作者头像
100000798482
发布2018-08-20 17:07:45
1.1K0
发布2018-08-20 17:07:45
举报
文章被收录于专栏:一个番茄说

在移动开发中,安全是一个很重要的话题,当然安全是没有绝对的,只能说尽可能的提高安全性。在iOS的开发中,为了防止别人窥视我们的App,我们得采用一些手段来进行防范。

当“坏人”拿到我们的App以后,最想干的事情一定是想看看我们App的内部构造。这个时候调试器就起了大作用了,无论GDB还是LLVM,都是通用的工具。在这里我们要做一点防范措施,防止别人能够轻易的窥视应用的内部,这里主要是要防止ptrace【注:1】。当然这样做也只是稍微提高了一点点门槛而已,对于高手来说这样的手段简直是小菜一碟,你可以看看这里如何调试防止ptrace依附的App

我们需要在程序开始处加上防止ptrace的代码,那么问题来了,程序的入口在哪里?

在之前使用OC开发的时候,由于OC是在C语言的基础上发展起来的,所以我们自然而然的会去找程序的main函数,然后在里面加上如下图的代码。

如图,在autorelease之前插入了执行的代码,所以一开始我就是拒绝的!

这里主要调用dlopen函数动态库,然后用dlsym获取到ptrace的函数指针,然后传入参数调用就可以禁止掉ptrace依附了。

然而在swift里面是没有main函数的,但是在AppDelegate里有个@UIApplicationMain,关于这个标签的更多解释请看苹果官方。如果去掉了这个标签的话,程序是跑不起来的,我们可以按照苹果的提示加上一个main.swift,写上如下的代码

```

autoreleasepool{

UIApplicationMain(Process.argc,Process.unsafeArgv,nil,NSStringFromClass(AppDelegate))

}

autoreleasepool{         UIApplicationMain(Process.argc,Process.unsafeArgv,nil,NSStringFromClass(AppDelegate)) }

这样子就和之前OC一样了,接下来就要在入口调用disable_gdb这个函数。因为在swift里没有办法像之前OC一样,import之后就直接开始使用C的函数库,需要创建创建一个C的源文件,里面写上disable_gdb这个函数的具体实现。然后XCode会自动给你生成一个{projectName}-Bridging-Header.h,再将函数的定义写在里面。接下来你就可以在main.swift里面加上disable_gdb()了。

整个demo在我的Github上,具体细节可以看看。

【注:1】具体说明这里。简单来说,调试器能够调试的原理,就是调试器的工作进程成为了你应用的跟踪进程,每当有中断发生的时候,内核会先去检测你当前的进程有没有被跟踪,如果有就先让你的跟踪进程做处理,从而达到调试的目的。防止依附就是要让你的app不被调试器跟踪。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015.09.16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档