天天看点

禁止应用在模拟器上运行的方案及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}      
  1. 通过截获和篡改消息来达到直接骗取钱财(一般是现在流行的网络虚拟货币)。
  2. 为了证明我很牛叉的黑客心理。
  3. 截获信息出卖信息。如截获客户信息,出卖给竞争对手。
  4. 恶意捣乱,非法竞争,恶意报复。

    让付费软件变成不付费软件(俗称的破解软件,绿色软件)。

继续阅读