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

简介: 禁止应用在模拟器上运行的方案及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. 恶意捣乱,非法竞争,恶意报复。
    让付费软件变成不付费软件(俗称的破解软件,绿色软件)。
目录
相关文章
|
3天前
|
安全 测试技术 网络安全
APP攻防-资产收集篇&反证书检验&XP框架&反代理VPN&数据转发&反模拟器
APP攻防-资产收集篇&反证书检验&XP框架&反代理VPN&数据转发&反模拟器
|
14天前
|
数据采集 JSON 算法
使用Python爬取华为市场APP应用进行分析
这个网站也是作者最近接触到的一个APP应用市场类网站。讲实话,还是蛮适合新手朋友去动手学习的。毕竟爬虫领域要想进步,还是需要多实战、多分析!该网站中的一些小细节也是能够锻炼分析能力的,也有反爬虫处理。甚至是下载APP的话在Web端是无法拿到APK下载的直链,需要去APP端接口数据获取
|
17天前
|
存储 安全 网络安全
APP 安全评估报告:直面移动应用安全威胁,守护用户数据安全
移动APP安全问题日益严重,包括数据泄露、恶意软件和权限滥用等威胁。例如,Ring App安全漏洞导致用户信息曝光,13款Android应用暴露大量用户数据。此外,工信部通报50款APP违规收集个人信息。安全评估是保障APP安全的关键,涉及代码安全、数据传输安全、用户权限管理和隐私保护等方面。经过评估,这款APP在所有方面表现出色,符合最高安全标准,确保用户隐私和数据安全。
25 2
|
4天前
|
应用服务中间件 Linux 网络安全
PHP应用部署在App Service for Linux环境中,上传文件大于1MB时,遇见了413 Request Entity Too Large 错误的解决方法
在Azure App Service for Linux上部署的PHP应用遇到上传文件超过1MB时出现413 Request Entity Too Large错误的解决之法
|
1月前
|
存储 数据安全/隐私保护 iOS开发
应用在App Store上被拒重新提交审核流程指南
该文本是关于iOS应用发布的步骤说明
31 2
|
10天前
|
Android开发 Kotlin
kotlin开发安卓应用 如何修改app安装后的名称
在 Android 应用中,要修改安装后的显示名称,需更新 AndroidManifest.xml 文件中 application 标签的 android:label 属性。可直接在该属性内设置新名称,或在 res/values/strings.xml 文件中修改 app_name 并在 manifest 中引用。推荐使用 strings.xml 方式,以便支持多语言和集中管理。
|
安全 JavaScript Linux
APP安全测试 该如何渗透检测APP存在的漏洞?
IOS端的APP渗透测试在整个互联网上相关的安全文章较少,前几天有位客户的APP数据被篡改,导致用户被随意提现,任意的提币,转币给平台的运营造成了很大的经济损失,通过朋友介绍找到我们SINE安全公司寻求安全解决方案,防止APP继续被篡改与攻击,针对客户的这一情况我们立即成立安全应急响应小组,对客户的APP以及服务器进行了全面的安全渗透。
456 0
APP安全测试 该如何渗透检测APP存在的漏洞?
|
12天前
|
移动开发 小程序 视频直播
FFmpeg开发笔记(二十七)解决APP无法访问ZLMediaKit的直播链接问题
本文讲述了在使用ZLMediaKit进行视频直播时,遇到移动端通过ExoPlayer和微信小程序播放HLS直播地址失败的问题。错误源于ZLMediaKit对HTTP地址的Cookie校验导致401无权限响应。通过修改ZLMediaKit源码,注释掉相关鉴权代码并重新编译安装,解决了此问题,使得ExoPlayer和小程序能成功播放HLS视频。详细解决方案及FFmpeg集成可参考《FFmpeg开发实战:从零基础到短视频上线》一书。
21 3
FFmpeg开发笔记(二十七)解决APP无法访问ZLMediaKit的直播链接问题
|
2天前
|
开发框架 移动开发 JavaScript
SpringCloud微服务实战——搭建企业级开发框架(四十七):【移动开发】整合uni-app搭建移动端快速开发框架-添加Axios并实现登录功能
在uni-app中,使用axios实现网络请求和登录功能涉及以下几个关键步骤: 1. **安装axios和axios-auth-refresh**: 在项目的`package.json`中添加axios和axios-auth-refresh依赖,可以通过HBuilderX的终端窗口运行`yarn add axios axios-auth-refresh`命令来安装。 2. **配置自定义常量**: 创建`project.config.js`文件,配置全局常量,如API基础URL、TenantId、APP_CLIENT_ID和APP_CLIENT_SECRET等。