iOS安全
文章平均质量分 91
1、网络加密传输及安全优化:1.1、报文签名 1.2、SSL证书验证, Charles再也无法抓你的请求数据;1.3、不走全局proxy的方案;1.4、允许不验证SSL证书;1.5、拦截请求;1.6、DoH &DoT 1.7、SDL;
2、动态保护
3、代码混淆
4、敏感逻辑的保护
iOS逆向
华为云云享专家认证|阿里云开发社区博客专家,定期分享Java、iOS资讯(包括基础知识储备)、小程序开发与运营、阅读与写作。只为你呈现有价值的信息,专注于移动端技术研究领域。
展开
-
iOS小技能:敏感逻辑的保护方案
文章目录前言I、把函数名隐藏在结构体里,以函数指针成员的形式存储1.1 >* KNUtil.h1.2 >* KNUtil.m1.3 >* 外围调用II、 案例:js根据key从本地方法获取设备及签名信息 (完整demo)2.1 demo下载see also前言应用场景:签名函数为了提高代码的安全性,可以采用把把函数名隐藏在结构体里,以函数指针成员的形式存储。 编译后,只留了下地址,去掉了名字和参数表,提高了逆向成本和攻击门槛.I、把函数名隐藏在结构体里,以函数指针成员的原创 2021-04-19 09:47:38 · 1779 阅读 · 5 评论 -
iOS intercept the HTTP/HTTPS requests :拦截请求,实现特定目的(修改HTTPHeaderField、不走全局proxy、设置代理IP和端口)
文章目录引言I 、请求安全相关的设置1.1 隧道APP请求我们自己接口的都不走隧道1.2 SSL证书验证1.3 允许不进行SSL证书验证1.4 解决ios的https双向认证不能抓包问题: disable SSL certificate validation1.5 不在本地缓存网络请求报文II、利用NSURLProtocol 拦截 HTTP 请求(修改请求的HTTPHeaderField,设置代理IP和端口)1.1 使用 NSURLProtocol 拦截 HTTP 请求的简单例子1.2 动手实践:设置代理I原创 2021-04-14 10:14:06 · 3556 阅读 · 11 评论 -
iOS安全规范指南之参数签名:参数按照ASCII码从小到大排序、拼接、加密(采用递归的方式进行实现)【案例:条码支付综合前置平台申请退款】 丨蓄力计划
文章目录前言I、实现步骤1.1 签名原始串:`按照参数名ASCII码从小到大排序并拼接`[递归的方式进行实现]1.2 MD5加密(具体的算法和密钥计算出签名结果)1.3 key 的存储1.4 敏感逻辑的保护方案:把签名函数名隐藏在结构体里,以函数指针成员的形式存储II、 用法 & demo下载2.1 用法2.2 、签名demo 下载地址III、 常见问题3.1 `签名数组ASCII码排序的地方`相关问题的解答3.2 Bool 参数处理IV、 应用案例:iOS条码支付综合前置平台【被扫支付 / 申原创 2021-04-13 15:41:12 · 3228 阅读 · 4 评论 -
iOS应用安全-专栏总目录(持续更新) 丨蓄力计划
文章目录引言1.1 代码混淆1.2 敏感逻辑的保护方案1.3 接口安全(网络加密传输)1.4 接口安全设计的Checklist引言欢迎大家来到#公众号:iOS逆向的《iOS应用安全》专栏本文列出学习大纲,同时也可作为大家学习《iOS应用安全》专栏的索引。文中的蓝字都是超级链接,点击进入即可本专栏的整体大纲模块1、网络加密传输及安全优化:1.1、报文签名 1.2、SSL证书验证, Charles再也无法抓你的请求数据;1.3、不走全局proxy的方案;1.4、允许不验证SSL证书原创 2021-04-09 11:38:25 · 2564 阅读 · 3 评论 -
iOS应用内购安全:生成共享密钥以验证收据+核对凭证内不能伪造的字段【解决IAP收据伪造问题】
服务端请求苹果凭证校验接口时,除了传receipt-data字段,再额外传一个password参数(苹果后台生成的共享密钥)。服务端相关文档https://developer.apple.com/documentation/appstoreservernotifications/responsebodyv2。APP 详细信息接口可用于检查版本: https://itunes.apple.com/cn/lookup?验证订阅或 App 内购买项目时,为提高通信安全,请在发送的收据中嵌入共享密钥。原创 2024-03-05 13:54:47 · 201 阅读 · 0 评论 -
加密的本质:数学的不对称性
由于椭圆曲线是相对x轴对称的,因此我们做C关于x轴的对称点D,把D作为新的一个点,再与A点连一条线。于是,便与椭圆曲线又有了一个交点E,这么一连,就得到A·D=E。椭圆曲线的计算的特点:告诉你起点是A,终点是Z,要想猜出我经过了多少步完成上述过程,几乎是不可能的。要想保护私有信息,特别是隐私,必须有一套不对称的机制,做到在特定授权的情况下,不需要拥有信息也能使用信息,在不授予访问信息的权限时,也能验证信息。相比目前比较流行的RSA加密算法,采用椭圆曲线加密方法可以用更短的密钥达到相当或更好的加密效果。原创 2023-04-15 20:17:43 · 1439 阅读 · 0 评论 -
iOS小技能:因境外IP无法访问导致 App 被拒的解决方案
跟运维安全部门进一步交流,看是不是没有放开国外访问这个域名的限制,看下是否允许通过IPv6网络访问这个域名。原创 2020-10-09 18:47:25 · 14685 阅读 · 0 评论 -
iOS小技能:设备ID除了使用_idfa、_idfv 还可使用其他替代方案(使用Keychain 存储UUID)
设备信息的获取:除了使用_idfa、_idfv, 还使用sysctl 获取cpu、macaddress信息,以及使用sysctlbyname获取设备型号等信息、 使用CNCopyCurrentNetworkInfo获取ssid、bssid关于设备ID的心得: 通过逆向研究,发现大部分的app设备ID以及OpenUDID都是基于CFUUIDCreate、CFUUIDCreateString 进行创建........................原创 2020-08-12 15:19:31 · 11676 阅读 · 0 评论 -
iOS小技能:封装银联接口协议(收银台的订单退款、查询机制)【下篇】
文章目录引言I 返回结果处理1.1 状态判断逻辑1.2 字段解析(XML解析)II、解决商户平台交易流水的订单记录无法实时与银联同步的问题2.1 订单列表数据追加本地数据:数据去重和按照时间戳排序2.2 退款状态查询处理IIII 测试技巧3.1 产生订单数据3.2 修改返回报文see alsoiOS网络请求指南: 请求参数的拼接(签名)、返回参数解析(JSON/XML解析)引言上篇:业务功能、退款接口的协议规则、请求 https://kunnan.blog.csdn.net/article/deta原创 2022-02-07 11:07:25 · 1696 阅读 · 0 评论 -
iOS设备限制境外交易(支付交易风险控制)
文章目录前言I、 限制境_外定_位1.1 根据经纬度判断是否在大陆地区1.2 通过逆地理编码进行判断定_位是否在`大_陆`II 测试验证方法1:借助i4Tools修改真机地址方法2:使用模拟器修改地址方法3: 通过GPX文件修改经纬度信息III 、 定_位权限的检测逻辑IV、风险商户处理see also前言本文重点:限制商户定位至大陆以外地区通过经纬度进行判断。利用高德SDK进行判断。(如果是手动输入位置信息就进行逆地理编码获取经纬度再进行判断)优化定位权限的检测逻辑:针对 kCLA原创 2021-09-27 16:30:49 · 1727 阅读 · 0 评论 -
iOS安全:敏感逻辑的保护方案(敏感信息的安全设计)
把函数名隐藏在结构体里,以函数指针成员的形式存储>* KNUtil.h@interface KNUtil : NSObject/** 把函数名隐藏在结构体里,以函数指针成员的形式存储。 编译后,只留了下地址,去掉了名字和参数表,提高了逆向成本和攻击门槛. */typedef struct _util { void (*cign)(char *kns[],unsigned.........原创 2018-11-05 11:47:46 · 11546 阅读 · 0 评论 -
iOS安全之敏感逻辑的保护方案:1、把函数名隐藏在结构体里,以函数指针成员的形式存储2、使用宏进行替换字符串
// Created by devzkn on 18/09/2017.// Copyright © 2017. All rights reserved.//#import <Foundation/Foundation.h>@interface KNUtil : NSObject/** 把函数名隐藏在结构体里,以函数指针成员的形式存储。 编译后,只留了下地址,去掉了名字和参数表,提高了逆向成原创 2017-09-19 11:46:42 · 11052 阅读 · 1 评论 -
iOS 静态混淆混淆方案: 使用宏进行替换字符串,或者解析mach-o中对应的section进行类名和方法名的替换
文章目录前言I 、宏定义II、二进制文件修改III、静态分析防护小结前言本人最终喜欢的马甲包混淆方案是用Hikari,具体的用法看这里本文的重点是讲解最原始的方法:字符串替换1、宏定义[ios-class-guard:Simple Objective-C obfuscator for Mach-O executables( 此项目是class-dump的fork,过滤系统库符号,生成需要混淆的符号)2、修改二进制文件对应的section3、other: https://git原创 2021-06-23 18:16:58 · 2109 阅读 · 0 评论 -
iOS安全保护:静态混淆、动态保护、代码混淆:(静态库混淆:混淆带有bitcode的静态、采用LLVM针对源代码混淆)
安全保护静态混淆: Static_obfuscation动态保护:反调试(PT_DENY_ATTACH = 31参数用于告诉系统阻止调试器的依附;利用sysctl函数查看当前进程信息,判断是否有此标志位来检测是否处理调试状态)、反反调试、反注入(通过_dyld_get_image_name()获取加载的模块名,判断是否都在白名单中)、hook检测(通过dladdr函数得到imp地址所在的模块info.dli_fname;遍历符号表中的每一个指针,然后判断指针是不是指向__stub_helper或者..原创 2020-08-12 14:48:57 · 12126 阅读 · 2 评论 -
iOS混淆带有bitcode sectname 的静态库:Confusing static libraries with Bitcode Sectname 不需要源代码就可以进行混淆
iOS安全:【混淆带有bitcode sectname 的静态库】Confusing static libraries with Bitcode Sectname 不需要源代码就可以进行混淆原创 2017-08-04 11:18:51 · 10857 阅读 · 2 评论 -
iOS App如何在爱思助手应用市场上架?(申请iOS App上线爱思助手应用市场)
文章目录引言I、成为爱思平台的认证开发者引言解决场景:商户/用户 没用Apple ID 且不愿意注册Apple IDI、成为爱思平台的认证开发者未进行开发者认证,请先认证后再提交产品上线申请!原创 2021-06-10 17:09:35 · 4560 阅读 · 0 评论 -
iOS OCR:自定义相机进行银行卡/身份证/驾驶证信息识别方案案例
文章目录引言I、经典案例:识别身份证号码1.1 识别CVImageBufferRef中的身份证信息II、自定义相机进行银行卡信息2.1 获取银行卡号字符信息2.2 字符解析2.3 根据卡并规则获取银行名称2.4 识别银行卡信息(imageBuffer内容的识别2.5 处理帧的扫描引言iOS 自定义相机进行银行卡/身份证信息识别方案原理:自定义相机采集银行卡图片,调用SDK/API进行OCTR识别1、自定义相机识别银行卡/身份证信息的付费方案思路:将CVImageBufferRef转UIIm原创 2021-06-01 16:41:12 · 2123 阅读 · 2 评论 -
iOS小技能:商户进件风险控制强化
文章目录引言I 、定义工具类 IdentityCardTool进行身份证校验2.1 身份证号判断2.2 根据身份证获取生日2.3 从生日上获取年龄2.4 判断是否小于18岁II、用法举例III、测试验证引言需求背景: 进件风险控制强化(IOS)通过身份证号码提取法人出生年月日,与当前日进行比较,如<18周岁, 则提示“法人未满18周岁,禁止进件!”处理流程:如果符合身份证规则,再进一步判断是否大于等于18岁,如<18周岁, 则提示“法人未满18周岁,禁止进件!”原创 2021-05-28 14:25:18 · 1656 阅读 · 1 评论 -
iOS小技能: 限制按钮的点击频率(Target-Action设计模式的运用)
文章目录引言I、限制按钮的事件响应频率1.1 原理分析1.2 代码实现see also引言再项目中,会对数据库数据进行更新操作的接口请求,不仅服务器侧需要控制请求频率以及保证数据的唯一性和一致性,app侧也需要进行限制来避免测试垃圾数据常用的方案有1、限制按钮的点击频率2、新增标志对单个接口进行请求频率的控制/** 控制接口的请求标志 */@property (assign, nonatomic) BOOL IsreqingGetCurrentSysUser;I、限制按钮的事原创 2021-05-28 09:55:59 · 1317 阅读 · 2 评论 -
iOS小技能:【营业执照编号校验】18位社会信用代码验证 unified social credit identifier
文章目录引言I、商户进件新增营业执照编号校验1.1 【需求背景】1.2 【需求描述】引言I、商户进件新增营业执照编号校验1.1 【需求背景】18位编码的校验依据GB 32100-2015 《法人和其他组织统一社会信用代码编码规则》,统一代码由十八位阿拉伯数字或大写英文字母(不使用I、O、Z、S、V)组成,包括以下5个部分第1位登记管理部门代码第2位机构类别代码第3位~第8位登记管理机关行政区划码第9位~第17位主体标识码(组织机构代码)第18位校验码1.2 【需求描述】商户进件(原创 2021-05-08 11:02:06 · 1858 阅读 · 0 评论 -
iOS隐私安全:用户协议及隐私政策弹框(包含超链接属性、demo支持中英文切换)【设置 NSLinkAttributeName 字体颜色:链接默认蓝色】
code//新增超链接属性 //新增超链接属性 [attrStr addAttribute:NSLinkAttributeName value:k_serviceAgreement_URL range:str4Range]; [attrStr addAttribute:NSLinkAttributeName value:k_ser...原创 2020-01-09 10:41:48 · 133567 阅读 · 8 评论 -
iOS安全之基于DRM防截屏/录屏导致泄密的方案
文章目录前言I、 基于DRM防截屏: 播放带DRM加密的视频来展示视图的敏感信息1.1思路1.2 demosee alsoA library used to download HLS video streaming with AES-128 encryptionConvert a series of images to video with audio前言1、监听截屏后通知(UIApplicationUserDidTakeScreenshotNotification),并进行提示《您保存的图片内容可能涉原创 2021-04-29 09:20:07 · 2491 阅读 · 1 评论 -
iOS安全之【 监听物理截图来自动生成截图并跳转到反馈页面进行显示】(截图内容包括系统的弹框视图UIAlertController和UIAlertView) | 蓄力计划
文章目录引言I、反馈页面的开发步骤1.1、 监听截图通知1.2、 截图方法:1.2.1 方法一: 截图内容不包含_UIAlertControllerShimPresenterWindow 且不包含AlertView的方法:1.2.2 方法二:iOS根据视图尺寸获取视图截屏【截图内容包括UIAlertController和UIAlertView】II demo源码2.1 本文的完整demo2.2、反馈页面封装成SDK `pod 'KNPodlib'`see also引言注意:截图在弹反馈页面之前creat原创 2021-01-30 18:13:17 · 1381 阅读 · 2 评论 -
iOS安全之防止手机截屏/录屏导致泄密的方案: iOS11之后防止用户录屏方案、基于DRM防截屏/录屏 | 蓄力计划
当应用进入后台时,系统会自动在当前应用的页面截屏并存储到手机内,如果当前页面涉及敏感信息时,被攻击会造成泄密。如下图生成的两张图片路径:原创 2017-09-18 14:28:33 · 12944 阅读 · 0 评论 -
iOS14.5.1适配【To use the AppTrackingTransparency framework】使用AppTrackingTransparency以请求用户授权获取IDFA信息
前言✎ 在 iOS13 及以前,系统会默认为用户开启允许追踪设置,我们可以简单的通过代码来获取到用户的 IDFA 标识符。if ([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) { NSString *idfaString = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString; NSLog(@"%@", id原创 2020-08-11 14:24:06 · 15296 阅读 · 0 评论 -
iOS安全之拦截http请求 ( 为小白用户定制的精简版本)
文章目录引言I、原理II、基于NSURLProtocol拦截http请求2.1、采用分类的形式在load方法进行自动注册协议类2.2、 自定义NSURLProtocol子类see also引言今天有用户Naruto(化明)反馈之前的demo:https://download.csdn.net/download/u011018979/16768533有点复杂,他的需求是只要拖入我自定义的NSURLProtocol子类到动态库,就可以自动拦截http请求。针对他的要求,今天特意写了一个简单的demo。原创 2021-04-22 18:24:48 · 1349 阅读 · 0 评论 -
iOS安全之启用HTTPDNS,来避免DNS劫持 | 蓄力计划
文章目录引言I、从本地进行DNS解析1.1 CFHostGetAddressing1.2 例子1.3 设置HTTP请求头HOST字段,来避免服务端的解析异常II、特定HTTPDNS 服务进行DNS解析2.1 使用阿里云对特定域名启用HTTPDNS2.2 固定使用单个服务IP引言启用HTTPDNS(直接从本地或特定HTTPDNS 服务进行DNS解析,来避免DNS劫持)HTTPDNS 利用 HTTP 协议与 DNS 服务器的 80 端口进行交互。不走传统的 DNS 解析,从而绕过运营商的 LocalD原创 2021-04-20 09:11:56 · 2450 阅读 · 3 评论 -
iOS安全之【禁止网络代理】(防抓包) | 蓄力计划
文章目录引言I、iOS APP 不走全局proxy的方案1.1 隧道APP的请求接口,一些自己特殊接口不走隧道1.2 hook NSURLSession 进行全局设置II、防止修改请求和返回数据引言银行和信用卡类app 为了安全,防止修改和抓包都是基本的要求应用场景:1、隧道APP请求我们自己接口的都不走隧道2、禁止网络代理(防抓包)原理:如果使用的是NSURLSession,把NSURLSessionConfiguration的connectionProxyDictionar原创 2021-04-19 15:40:06 · 3799 阅读 · 0 评论 -
iOS小技能:自定义NSURLProtocol无法监听AFNetworking请求的解决方案【方法交换SessionConfiguration的属性protocolClasses】
文章目录引言I 、解决方案1.1 问题分析1.2 解决方案II、intercept the HTTP/HTTPS requests引言需求背景:对网络请求的数据进行报文级别的加密:使用NSURLProtocol来自动监听HTTP请求并加密解密。通过[NSURLProtocol registerClass: [KNURLProtocol class]];注入了自定义的NSURLProtocol类 +(void)addRequestBlock{ [self injectNSURLSessi原创 2021-04-19 15:03:31 · 1294 阅读 · 0 评论 -
iOS小技能:获取设备唯一标识符(idfa、idfv 、使用Keychain 存储UUID及通过Safari与mobileconfig获取)
文章目录引言I、知识储备1.1 什么是Keychain?1.2 OpenUDID的使用II 、设备唯一标识符获取方案2.1 通过Safari浏览器获取iOS设备UDID(设备唯一标识符)2.2 替代方案:使用Keychain 存储UUIDIII、IDFA(Identifier For Advertising,广告标识符)3.1 判断 是否限制了广告追踪IV、IDFV (Identifier For Vendor,应用开发商标识符)V、iOS设备指纹大全5.1 iPhone型号认知5.2 iOS设备指纹大全原创 2021-04-19 11:14:56 · 3200 阅读 · 0 评论 -
iOS安全:【敏感信息的脱敏规范】(数据类型包括日志相关、账户订单、个人信息、账户认证、持卡数据)
文章目录前言I、脱敏规范II、 相关术语2.1 PBKDF2算法see also前言应用场景:商户结算账户信息加密保存,脱敏显示I、脱敏规范 数据类型 数据元素 敏感信息的脱敏规则 持卡数据 信用卡卡号(PAN) 信用卡号可显示前6后4,中间部分需要脱敏,可以“*”或其他字符代替 有效期 因PCI要求,有效期,验证码不可存储。 验证码:CAV2/CVV2/CVC2/CID原创 2021-04-13 16:04:41 · 2835 阅读 · 0 评论 -
iOS抽奖转盘上篇:概率抽奖算法 & 转盘算法 &轮盘边框动画丨(内含完整Demo)
文章目录引言I、根据奖品百分比进行控制中奖概率1.1 定义奖品模型1.2 根据奖品的中奖概率获取中奖奖品1.3 构造数据模型II、转盘算法2.1 旋转到指定下标奖品2.2 处理旋转结束事件引言在app侧控制中奖奖品,有两种方式方式一: 发起网络请求获取当前选中奖品(推荐),即由服务侧控制中奖数据,更安全方式二:根据奖品百分比进行控制中奖概率I、根据奖品百分比进行控制中奖概率根据中奖概率probability 确定随机中奖范围probabilityRange根据随机中奖范围proba原创 2021-04-12 17:51:35 · 4044 阅读 · 4 评论 -
HTTP 方法的安全性(可读) & iOS网络安全优化 丨蓄力计划
文章目录引言I 、 HTTP 支持的方法1.1 幂等性1.2 HTTP 方法的安全性1.3 post和get的区别1.3.1 GET请求的数据会附在URL之后1.3.2 POST把提交的数据则放置在是HTTP包的包体中。1.3.2GET方式提交的数据的长度,受到特定的浏览器及服务器对它的限制1.4、 HTTP 状态码II、 iOS网络安全优化2.1 不走全局proxy的方案2.2 SSL证书验证2.3 允许不进行SSL证书验证2.4 解决ios的https双向认证不能抓包问题: disable SSL c原创 2021-04-09 14:14:49 · 1586 阅读 · 2 评论 -
Mac使用技巧:打开没有在 Mac App Store 上架的 iOS App、在 M1 Mac 上安装 Windows 11
文章目录引言I、 知识储备1.1 quarantine1.2 xattrII、 例子: 解除隔离机制引言知识储备先了解下Mac的安全隔离机制quarantine例子: 解除隔离机制,在M1打开没有在 Mac App Store 上架的 iOS AppI、 知识储备1.1 quarantineFile Quarantine is a new feature in Leopard designed to protect users from trojan horse attack原创 2021-04-09 13:46:04 · 2532 阅读 · 0 评论 -
iOS小知识: 使用bugly上报自定义错误信息进行数据监控
文章目录引言I、crash /自定义错误信息监控1.1 bugly上报自定义错误(iOS)1.2 bugly上报自定义错误(android)引言iOS & android 使用bugly上报自定义错误信息的应用场景:【应用调用接口时如果返回了错误,这时需要记录下请求报文(String格式)和设备号等数据,实时发送到控制台查看】I、crash /自定义错误信息监控如果这些+load方法中的代码出现了crash,你的crash监控(bugly)能监控到?bugly1.1 bugly上报原创 2021-04-08 15:12:05 · 5114 阅读 · 3 评论