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

时间:2022-12-21 15:56:33

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

////禁止非调试模式下在模拟器上运行
//#ifndef DEBUG
// if((phoneType.length != 0) && ([@”i386” isEqualToString:phoneType] || [@”x86_64” isEqualToString:phoneType]))
// {
// //禁止用模拟器刷单
// return NO;
// }
//#endif

}

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

非法人员破解软件的目的一般有这几个方面:
1. 通过截获和篡改消息来达到直接骗取钱财(一般是现在流行的网络虚拟货币)。
2. 为了证明我很牛叉的黑客心理。
3. 截获信息出卖信息。如截获客户信息,出卖给竞争对手。
4. 恶意捣乱,非法竞争,恶意报复。
让付费软件变成不付费软件(俗称的破解软件,绿色软件)。