美文网首页
iOS安全-杂记

iOS安全-杂记

作者: Bobo_Ma | 来源:发表于2019-05-20 16:55 被阅读0次

1.判断是否设置了代理(防止抓包)

#在网络请求前插入这个方法,再根据需求做相应的防范
+ (BOOL)getDelegateStatus
{
   NSDictionary *proxySettings = CFBridgingRelease((__bridge CFTypeRef _Nullable)((__bridge NSDictionary *)CFNetworkCopySystemProxySettings()));
   NSArray *proxies = CFBridgingRelease((__bridge CFTypeRef _Nullable)((__bridge NSArray *)CFNetworkCopyProxiesForURL((__bridge CFURLRef)[NSURL URLWithString:@"http://www.google.com"], (__bridge CFDictionaryRef)proxySettings)));
   NSDictionary *settings = [proxies objectAtIndex:0];
   NSLog(@"host=%@", [settings objectForKey:(NSString *)kCFProxyHostNameKey]);
   NSLog(@"port=%@", [settings objectForKey:(NSString *)kCFProxyPortNumberKey]);
   NSLog(@"type=%@", [settings objectForKey:(NSString *)kCFProxyTypeKey]);
   if ([[settings objectForKey:(NSString *)kCFProxyTypeKey] isEqualToString:@"kCFProxyTypeNone"])
   {
       //没有设置代理
       return NO;
       
   } else {
       //设置代理了
       return YES;
   }
}

2.数据库(sqlite)整库加密:

可使用第三方的SQLite扩展库,对数据库进行整体的加密。如:SQLCipher,git地址

  1. 本地简单数据储存使用 SSKeychain
//存储
[SSKeychain setPassword: data[@"mobile"] forService:@"ProjectName"account:@"mobile"];
//读取
NSString * phoneNumber = [SSKeychain passwordForService:@"ProjectName"account:@"mobile"];

4.检查设备是否越狱

+ (BOOL)isJailbroken {
    // 检查是否存在越狱常用文件
    NSArray *jailFilePaths = @[@"/Applications/Cydia.app",
                               @"/Library/MobileSubstrate/MobileSubstrate.dylib",
                               @"/bin/bash",
                               @"/usr/sbin/sshd",
                               @"/etc/apt"];
    for (NSString *filePath in jailFilePaths) {
        if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
            return YES;
        }
    }

    // 检查是否安装了越狱工具Cydia
    if([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"cydia://package/com.example.package"]]){
        return YES;
    }

    // 检查是否有权限读取系统应用列表
    if ([[NSFileManager defaultManager] fileExistsAtPath:@"/User/Applications/"]){
        NSArray *applist = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:@"/User/Applications/"
                                                                               error:nil];
        NSLog(@"applist = %@",applist);
        return YES;
    }

    //  检测当前程序运行的环境变量
    char *env = getenv("DYLD_INSERT_LIBRARIES");
    if (env != NULL) {
        return YES;
    }

    return NO;
}
  1. 代码混淆
    地址:https://www.jianshu.com/p/83d6ea92bb7c

6.应用进入后台时的截屏行为
当应用进入后台时,系统会自动在当前应用的页面截屏并存储到手机内,如果当前页面涉及敏感信息时,被攻击会造成泄密。
一般我们在应用被挂起时,在当前页面添加一层高斯模糊,在应用重新进入前台时,删除模糊效果

7.防止二次打包

1)有些hacker可能会通过篡改你的程序包(包括资源文件和二进制代码)加入一些广告或则修改你程序的逻辑,然后重新签名打包,
2)通过检测SignerIdentity判断是Mach-O文件否被篡改
原理是:SignerIdentity的值在info.plist中是不存在的,开发者不会加上去,苹果也不会,只是当ipa包被反编译后篡改文件再次打包,需要伪造SignerIdentity。判断是否被二次打包,如果程序被篡改,则退出程序。

+ (BOOL)isSecondIPA{
    
    NSBundle *bundle = [NSBundle mainBundle];
    NSDictionary *info = [bundle infoDictionary];
    if ([info objectForKey: @"SignerIdentity"] != nil){
        //存在这个key,则说明被二次打包了
        return YES;
    }
    
    return NO;
}

相关文章

网友评论

      本文标题:iOS安全-杂记

      本文链接:https://www.haomeiwen.com/subject/khgkzqtx.html