禁止应用在模拟器上运行的方案及app安全问题

大家都知道,应用安装到模拟器上,运行应用直接读取你的应用数据(如.archiver和.plist文件)。甚至能够通过修改模拟器的经纬度来达到模拟使用应用的人运行轨迹的效果,进而达到欺骗那些通过GPS计算距离的应用,来骗取钱财的效果。
当然用户也可以通过把app装到越狱手机上,通过第三方软件读取应用的数据,不过至少比直接把app装到模拟器上要方便的多吧,至少模拟经纬度不是那么连下里巴人都能做到的那么简单了吧,想欺骗苹果gps模块也很难。
对这种高级犯罪,要进行必要的防范,当然为了测试方便又不能禁止正常开发人员通过xcode 连接模拟进行调试。
解决的办法:
只要识别出应用在非调试状态下,在模拟器上运行的行为,直接在app生命周期的前期禁止它运行就可以。就是若发现输出设备不是xcode控制台,并且在模拟器上运行,那么直接让didFinishLaunchingWithOptions返回就可以了
当然开发人员的一般都是在debug模式下开发应用,realse模式下通常是发布版本的,外部人员是拿不到你debug版本安装包的,所以直接禁止非debug模式下应用在模拟器上运行也可以。xcode 12.1版本在使用支付宝SDK的组件项目采用realse模式下报模拟器错误,用debug模式可以,所以这样的工程只等用debug模式发布app。
代码如下:

  • (NSString *)getDeviceModel
    {

    struct utsname systemInfo;
    uname(&systemInfo);

    NSString *deviceKey = [NSString stringWithCString:systemInfo.machine
    encoding:NSUTF8StringEncoding];
    return deviceKey;

    // NSDictionary *deviceNamesByCode = @{@“i386” 😡“Simulator”,
    // @“x86_64” 😡“Simulator”,
    // @“iPod1,1” 😡“iPod Touch”, // (Original)
    // @“iPod2,1” 😡“iPod Touch”, // (Second Generation)
    // @“iPod3,1” 😡“iPod Touch”, // (Third Generation)
    // @“iPod4,1” 😡“iPod Touch”, // (Fourth Generation)
    // @“iPhone1,1” 😡“iPhone”, // (Original)
    // @“iPhone1,2” 😡“iPhone”, // (3G)
    // @“iPhone2,1” 😡“iPhone”, // (3GS)
    // @“iPad1,1” 😡“iPad”, // (Original)
    // @“iPad2,1” 😡“iPad 2”, //
    // @“iPad3,1” 😡“iPad”, // (3rd Generation)
    // @“iPhone3,1” 😡“iPhone 4”, // (GSM)
    // @“iPhone3,3” 😡“iPhone 4”, // (CDMA/Verizon/Sprint)
    // @“iPhone4,1” 😡“iPhone 4S”, //
    // @“iPhone5,1” 😡“iPhone 5”, // (model A1428, AT&T/Canada)
    // @“iPhone5,2” 😡“iPhone 5”, // (model A1429, everything else)
    // @“iPad3,4” 😡“iPad”, // (4th Generation)
    // @“iPad2,5” 😡“iPad Mini”, // (Original)
    // @“iPhone5,3” 😡“iPhone 5c”, // (model A1456, A1532 | GSM)
    // @“iPhone5,4” 😡“iPhone 5c”, // (model A1507, A1516, A1526 (China), A1529 | Global)
    // @“iPhone6,1” 😡“iPhone 5s”, // (model A1433, A1533 | GSM)
    // @“iPhone6,2” 😡“iPhone 5s”, // (model A1457, A1518, A1528 (China), A1530 | Global)
    // @“iPhone7,1” 😡“iPhone 6 Plus”, //
    // @“iPhone7,2” 😡“iPhone 6”, //
    // @“iPad4,1” 😡“iPad Air”, // 5th Generation iPad (iPad Air) - Wifi
    // @“iPad4,2” 😡“iPad Air”, // 5th Generation iPad (iPad Air) - Cellular
    // @“iPad4,4” 😡“iPad Mini”, // (2nd Generation iPad Mini - Wifi)
    // @“iPad4,5” 😡“iPad Mini” // (2nd Generation iPad Mini - Cellular)
    // };
    //
    //
    // return [deviceNamesByCode objectForKey:deviceKey];

}

  • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    NSString *phoneType = [self getDeviceModel];
    //禁止本软件的输出设备为xcode控制台,也就是禁止在连接xcode通过代码直接在模拟器上调试运行
    if(!isatty(STDOUT_FILENO) && (phoneType.length != 0) && ([@“i386” isEqualToString:phoneType] || [@“x86_64” isEqualToString:phoneType]))
    {
    //禁止用模拟器刷单
    return NO;
    }
    //第二种禁止模拟器运行的方法是,TARGET_OS_SIMULATOR是苹果系统自己宏
    #if TARGET_OS_SIMULATOR
    //假如没有定义取消连接XCode时的特别限制
    if(!isatty(STDOUT_FILENO))
    {
    //禁止用模拟器刷单
    return NO;
    }
    #endif
    禁止非调试模式下在模拟器上运行
    //#ifndef DEBUG
    // if((phoneType.length != 0) && ([@“i386” isEqualToString:phoneType] || [@“x86_64” isEqualToString:phoneType]))
    // {
    // //禁止用模拟器刷单
    // return NO;
    // }
    //#endif

}
当然这个禁止模拟器运行的方法也有漏洞,当用户启动xcode,在模拟器上就可以运行这个应用。若想想彻底禁止在模拟器里运行需要设置一个宏,当发布时,设置这个宏生效,当发现TARGET_OS_SIMULATOR时直接返回NO就可以了,不过这样做麻烦些(自己发布前测试需要模拟器,正式发布时还需要修改对应编译宏),用上面的方法就可以了,没有必要把所有情况都防止。防外行,不放内行。当然你的应用可能有机密信息需要彻底堵住模拟器运行的情况,可以用后者。
信息安全等级保护是对信息和信息载体按照重要性等级分级别进行保护的一种工作,在中国、美国等很多国家都存在的一种信息安全领域的工作。在中国,信息安全等级保护广义上为涉及到该工作的标准、产品、系统、信息等均依据等级保护思想的安全工作;狭义上一般指信息系统安全等级保护。
信息系统的安全保护等级分为以下五级:
第一级,信息系统受到破坏后,会对公民、法人和其他组织的合法权益造成损害,但不损害国家安全、社会秩序和公共利益。
第二级,信息系统受到破坏后,会对公民、法人和其他组织的合法权益产生严重损害,或者对社会秩序和公共利益造成损害,但不损害国家安全。
第三级,信息系统受到破坏后,会对社会秩序和公共利益造成严重损害,或者对国家安全造成损害。
第四级,信息系统受到破坏后,会对社会秩序和公共利益造成特别严重损害,或者对国家安全造成严重损害。
第五级,信息系统受到破坏后,会对国家安全造成特别严重损害。
信息泄密有两种途径,一是直接人为,二是间接软件。 要知道,任何防护措施都不是没有漏洞的,就好象锁头防君子不防小人一个道理。软件安全就是为了做到防止外行轻易窃取软件需要保密的数据,尽量防止内行的恶意破坏,窃取,骗取数据和钱财。再好的软件也做不到绝对的安全,但能挡住99%就很不错。简言之也就是提高软件被部分破解的门槛。
对于人为信息泄密,一般通过保密协议和法制办法保证。一般IT人员还是有这方面的职业道德的。
对于小型软件通常通过,公有密钥,md编码,混淆,ssl加密,socket连接通信,自定义加密算法(如:app的安全性设计策略 http://blog.csdn.net/jia12216/article/details/46521297 ),验证码登录机制,验证码3分钟超时限制(防止字典式攻击),等来达到加密和防范的效果。
请求用非加密的http请求发送请求和返回数据,那和光天下的裸奔没有任何区别,很容易被抓包工具,甚至是浏览器直接截获,并且修改后把伪造数据发送给服务器,所以软件的加密传输是必然的。

非法人员破解软件的目的一般有这几个方面:

  1. 通过截获和篡改消息来达到直接骗取钱财(一般是现在流行的网络虚拟货币)。
  2. 为了证明我很牛叉的黑客心理。
  3. 截获信息出卖信息。如截获客户信息,出卖给竞争对手。
  4. 恶意捣乱,非法竞争,恶意报复。
    让付费软件变成不付费软件(俗称的破解软件,绿色软件)。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值