关闭

iOS安全攻防(二十四):敏感逻辑的保护方案(1)

iOS安全攻防(二十四):敏感逻辑的保护方案(1)Objective-C代码容易被hook,暴露信息太赤裸裸,为了安全,改用C来写吧!当然不是全部代码都要C来写,我指的是敏感业务逻辑代码。本文就介绍一种低学习成本的,简易的,Objective-C逻辑代码重构为C代码的办法。也许,程序中存在一个类似这样的类:@interface XXUtil : NSObject + (BOOL)isVerifi...
阅读(29078) 评论(51)

iOS安全攻防(二十三):Objective-C代码混淆

iOS安全攻防(二十三):Objective-C代码混淆class-dump可以很方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完善的程序给同行留下笑柄。所以,我们迫切的希望混淆自己的代码。混淆的常规思路混淆分许多思路,比如:1)花代码花指令,即随意往程序中加入迷惑人的代码指令2)易读字符替换等等防止class-dump出可读信息的有效办法是易读字符替换。Obj...
阅读(66096) 评论(33)

iOS安全攻防(二十二):static和被裁的符号表

static和被裁的符号表为了不让攻击者理清自己程序的敏感业务逻辑,于是我们想方设法提高逆向门槛。本文就介绍一个防御技巧————利用static关键字裁掉函数符号。原理如果函数属性为 static ,那么编译时该函数符号就会被解析为local符号。在发布release程序时(用Xcode打包编译二进制)默认会strip裁掉这些函数符号,无疑给逆向者加大了工作难度。验证写个demo验证一下上述理论,...
阅读(17499) 评论(17)

iOS安全攻防(二十):越狱检测的攻与防

越狱检测的攻与防在应用开发过程中,我们希望知道设备是否越狱,正以什么权限运行程序,好对应采取一些防御和安全提示措施。iOS7相比之前版本的系统而言,升级了沙盒机制,封锁了几乎全部应用沙盒可以共享数据的入口。即使在越狱情况下,限制也非常多,大大增加了应用层攻击难度。比如,在iOS7之前,我们可以尝试往沙盒外写文件判断是否越狱,但iOS7越狱后也无该权限,还使用老方法检测会导致误判。那么,到底应该如何...
阅读(28037) 评论(14)

iOS安全攻防(十九):基于脚本实现动态库注入

基于脚本实现动态库注入MobileSubstrate可以帮助我们加载自己的动态库,于是开发者们谨慎的采取了对MobileSubstrate的检索和防御措施。那么,除了依靠MobileSubstrate帮忙注入dylib,还有别的攻击入口吗?理理思路,条件、目的很明确:1)必须在应用程序启动之前,把dylib的环境变量配置好2)dylib的位置必须能被应用程序放问到3)最后再启动应用程序啊哈,原汁原...
阅读(20147) 评论(9)

iOS安全攻防(十七):Fishhook

Fishhook众所周知,Objective-C的首选hook方案为Method Swizzle,于是大家纷纷表示核心内容应该用C写。接下来进阶说说iOS下C函数的hook方案,先介绍第一种方案————fishhook .什么是fishhookfishhook是facebook提供的一个动态修改链接Mach-O符号表的开源工具。什么是Mach-OMach-O为Mach Object文件格式的缩写,...
阅读(31908) 评论(26)

iOS安全攻防(十三):数据擦除

数据擦除对于敏感数据,我们不希望长时间放在内存中,而希望使用完后立即就被释放掉。但是不管是ARC还是MRC,自动释放池也有轮循工作周期,我们都无法控制内存数据被擦除的准确时间,让hackers们有机可乘。本文介绍一个小技巧——及时数据擦除。假如一个View Controller A的一个数据被绑在一个property上,@interface WipingMemoryViewController :...
阅读(15655) 评论(25)

iOS安全攻防(九):使用Keychain-Dumper导出keychain数据

使用Keychain-Dumper导出keychain数据iOS系统及第三方应用都会使用Keychain来作为数据持久化存储媒介,或者应用间数据共享的渠道。所以Keychain数据库是hacker们最关注的数据源头之一。不知道是算幸运还是不幸,导出Keychain数据库数据的工具早已非常完善,下载地址:Keychain-Dumper传送门操作步骤极其简单:1)赋予Keychain数据库可读权限Pr...
阅读(25450) 评论(6)

iOS安全攻防(四):阻止GDB依附

阻止GDB依附GDB是大多数hackers的首选,阻止GDB依附到应用的常规办法是:#import int main(int argc, char *argv[]) { #ifndef DEBUG ptrace(PT_DENY_ATTACH,0,0,0); #endif @autoreleasepool { return UIApplicationMain(ar...
阅读(20040) 评论(12)
    个人资料
    • 访问:2652847次
    • 积分:28113
    • 等级:
    • 排名:第208名
    • 原创:136篇
    • 转载:54篇
    • 译文:1篇
    • 评论:4484条
    NOTICE
    博客专栏
    最新评论
    友情链接