IOS抓取与反抓取
IOS抓取基础知识
ARM64
有道云笔记:http://note.youdao.com/noteshare?id=7b723d832da60281c9bb20e9f56fe69e
脱壳与加壳
有道云笔记:http://note.youdao.com/noteshare?id=a7696c5d7181703460a28a481c5ee1b2
Cycript
有道云笔记:http://note.youdao.com/noteshare?id=b81855b860d782408d96339e8856694c
Reveal
有道云笔记:http://note.youdao.com/noteshare?id=13204fa4c5420bb386ff4b6a6f01b796
静态分析
有道云笔记:http://note.youdao.com/noteshare?id=0959f43af232e788281f848105156b1b
动态分析
有道云笔记:http://note.youdao.com/noteshare?id=6944df80c03dd41cf23cec3eb761f772
MachO文件
有道云笔记:http://note.youdao.com/noteshare?id=c7a6a87998df9df27e65029c390eaadf
ASLR
有道云笔记:http://note.youdao.com/noteshare?id=8a4652f9374c2d54bac9f14692920f5a
IOS抓取方式
iOS破解
模拟器
黑雷苹果模拟器
介绍
iOS应用需要运行在ARM架构上,不支持x86架构。如果要强行在x86架构的cpu上运行,就需要进行大量的代码转换工作。iOS大部分代码闭源,这就造成整个模拟工作非常困难。目前市面上真正意义上的iOS模拟器只有黑雷。
局限
应用商店App量少
不能自由安装ipa
每个app都需要单独适配,就算支持ipa大概率也无法启动
改机软件
常用改机软件
AWZ、NZT、ALS、iGrimace、361、hdFaker
检测
判断 /Applications/XXX.app 和 /Library/MobileSubstrate/DynamicLibraries/XXX.dylib 文件存在
可更改属性
有道云笔记:http://note.youdao.com/noteshare?id=00c99994f248dd484616115fec3ce804
注入与Hook(越狱下实现作弊)
注入方式
1.注入动态库文件
2.使用DYLD_INSERT_LIBRARIES环境变量启动
3.为可执行文件添加Load command
Hook方式
1.Method Swizzle
2.符号表hook
3.Cydia Substrate
重打包(非越狱下实现作弊)
介绍
修改或添加功能后将应用重新打包签名,通过pp助手、iTune等工具进行安装
方式
1.完全重签名
2.非完全重签名
iOS作弊
注入
介绍
- 静态注入。修改原始的可执行文件,将需要执行的代码事先插入可执行文件中。
- 动态注入。不改变原始的可执行文件,是在目标程序运行时才进行的注入行为。
方式
注入动态库文件(越狱)
将注入的dylib放入DynamicLibraries目录下
使用DYLD_INSERT_LIBRARIES环境变量启动(越狱)
dyld会判断环境变量是否存在,存在则会被加载
为可执行文件添加Load command(非越狱)
设置LC_LOAD_DYLIB指向注入的dylib。重新打包、签名就能安装到未越狱手机
Hook方式
Method Swizzle
介绍
Method Swizzle利用Object-C的Runtime特性,动态改变SEL(函数编号)和IMP(函数实现)的对应关系,达到OC函数调用流程改变的目的。
详细过程
(1)在Objective-C中调用一个方法,其实向一个对象发送消息,即查找消息的唯一依据是selector的名字,每一个SEL都对应着其方法实现真实的运行地址(IMP)。

(2)Method Swizzle可以使得两个SEL所对应的IMP相互交换达到hook的目的。

(3)runtime机制

符号表hook
原理
修改符号表所指向的内存地址。
详细过程
dyld 通过更新 Mach-O 二进制文件 __DATA 段中的一些指针来绑定 lazy 和 non-lazy 的符号;而 fishhook 先确定某一个符号在 __DATA 段中的位置,然后保存原符号对应的函数指针,并使用新的函数指针覆盖原有符号的函数指针,实现重绑定。
Mach-O文件中只有我们自己写的函数,系统的动态库的函数不在Mach-O文件中。每次启动从Mach-O文件到系统动态库函数的偏移地址都是变化的。
ASL技术
地址空间布局随机化。它会让Mach-O文件加载的时是随机地址。有了这个技术,Mach-O文件每次加载进内存时地址都是不一样的(目的是防止逆向技术)。
Mach-O文件如何链接外部函数(系统函数)?
苹果为了能在Mach-O文件中访问外部函数,采用了一个技术叫PIC(位置代码独立)技术。
当应用程序想要调用Mach-O文件外部函数(系统的库函数)的时候,流程如下:
(1)先在Mach-O文件的_DATA段中建立一个指针(8字节的数据,放全0),这个指针变量指向外部函数。
(2)DYLD会动态进行绑定,将Mach-O中的_DATA段中的指针,指向外部函数。
应用底层代码是汇编,汇编的内存地址是写死的。C的底层也有动态的表现。C在内部函数的时候是静态的,在编译后,内存地址就确定了。但外部函数是不能确定的,也就是说C底层也有动态。fishhook之所以能hook c函数,是利用Mach-O文件的PIC技术,通过DYLD对动态绑定做手脚。
finshhook的原理其实是,将指向系统方法(外部函数)的符号重新进行绑定执行内部的函数。这样就把系统方法与自定义方法进行交换。
Cydia Substrate
原理
Cyida substrate 中的MSHookFunction,该函数会修改hook的函数的前8个字节,使该函数跳转到我们设定的新函数地址。(inline hook)
详细过程
先调用MSGetImageByName获取需要hook的函数的动态库地址,再调用MSFindSymbol查找需要hook的函数地址,最后调用MSHookFunction修改数据。
设备指纹
IDFA
广告标识符;当用户手动关闭广告追踪时会导致无法获取,重新开启后会生成新的标识符
IDFV
供应商标识符;属于同一个Vender,共享同一个idfv的值。app删除后IDFV重新生成
OpenUDID
将新生成的ID保存至剪切板与沙盒的Preferences目录中
SimulateIDFA
1.不稳定信息。系统启动时间、硬盘使用空间、运营商名称、系统版本
2.稳定信息。国家代码、本地语言、设备名称、内存、机型、核心服务文件创建时间
将稳定信息与不稳定信息结合生唯一标识
ID持久化存储
- keychain
- 剪切板
作弊方式
root权限获取
设备基本信息篡改
常见刷量修改参数有序列号、MAC地址、系统版本、机器名称、IDFA、IDFV、WIFI、位置信息等
数据清除
1.应用数据清除。清空应用沙盒目录
2.清除keychain
3.清除剪切板
变更IP
1.VPN或HTTP代理服务器
2.SIM卡变更运营商分配地址
反越狱检测
Hook相关文件判断函数。一般判断是否越狱通过Cydia和其他相关文件是否存在。
iOS抓取流程
界面分析
1.Reveal:直接查看到界面
2.Cricript:通过命令行的方式,查看控制器的结构、控制器的方法、控制器的成员变量等等
抓包分析
1.tcpdump、Wireshark、Charles抓包分析
代码分析
1.对Mach-O文件的静态分析(ios所有的代码在打包后都会在Mach-O文件中)
2.分析工具:MachOView、class-dump、Hopper Disassembler、ida等
动态分析
1.将代码跑到内存中,进行流程分析,对代码进行调试
2.debugserver、LLDB
代码编写与注入
1.Hook代码编写
2.注入代码
3.必要时可能需要重新签名、打包
IOS反抓取应对方式
分析应对
1.函数名混淆
2.字符串加密
3.代码混淆
https://www.jianshu.com/p/628a0c232c2a
越狱应对
1.判断cydia相关文件是否存在
2.直接访问cydia路径
3.stat函数判断文件
使用c代码stat相关路径,/Application/Cydia.app
4.获取动态库列表查看动态库
获取所有动态库,查看是否存在异常dylib
5.检测环境变量DYLD_INSERT_LIBRARIES环境变量
检测是否存在DYLD_INSERT_LIBRARIES
6.检测函数是否被劫持
stat函数是否出自libsystem_kernel.dylib
https://blog.csdn.net/yiyaaixuexi/article/details/20286929
盗版应对
1.检测BundleID
2.检测来源是否为App Store
判断LC_ENCRYPTION和LC_ENCRYPTION_INFO_64信息是否加密
3.检测重签名
通过embedded.mobileprovisio配置文件中UUID和账号前缀来判断重签名检测
4.代码校验
获取内存中运行代码的MD5值,与其真实值做对比
调试应对
1.调用ptrace函数跟踪与调试
2.调用syscall函数执行系统调用
3.调用syscall函数获取进程信息
通过判断P_TRACE标识检测是否在调试
4.调用isatty函数检测终端
如果调试器运行,就能检测到终端
5.ioctl获取终端信息
如果能够获取到终端信息,说明正在调试器运行
http://bbs.iosre.com/t/topic/8179
http://www.iosre.com/t/topic/9351
注入应对
1.DYLD_INSERT_LIBRARIES 检测
2.动态库列表白名单
https://juejin.im/entry/5c9242126fb9a070eb267474
iOS反抓取之我希望发展方向
- 改机软件检测
- 越狱检测加强
- 盗版模式加强
- 增加调试检测
- 增加注入检测
结
1.经过近几个月调研,总结了市面逆向课程与书籍。视频包括《小马哥iOS逆向》《Hank攻防对抗》,书籍包括《iOS黑客攻防秘籍》《iOS应用与安全》。
2.iOS逆向并不想Android逆向那样百花齐放,主要受限于iOS大部分源码闭源,分析难度大。
3.iOS注入与Hook方式有限,有效性地针对即可解决掉大部分爬虫,剩余的少部分高手可以在对抗中慢慢优化。
4.爬虫与反爬虫是一个对抗的过程,想把基础防御做好,剩下的在对抗中成长。
IOS抓取与反抓取的更多相关文章
- 谈谈HTTPS安全认证,抓包与反抓包策略
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信 ...
- 使用Fiddler 对ios 设备进行HTTPS 的抓取
http://blog.csdn.net/skylin19840101/article/details/43485911 使用Fiddler 对ios 设备进行HTTPS 的抓取
- fiddler抓包工具 https抓取 ios手机端抓取
fiddler抓包工具 https抓取 ios手机端抓取 转载链接:https://www.cnblogs.com/bais/p/9118297.html 抓取pc端https请求,ios手机端 ...
- Phantomjs+Nodejs+Mysql数据抓取(2.抓取图片)
概要 这篇博客是在上一篇博客Phantomjs+Nodejs+Mysql数据抓取(1.抓取数据) http://blog.csdn.net/jokerkon/article/details/50868 ...
- 网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(3): 抓取amazon.com价格
通过上一篇随笔的处理,我们已经拿到了书的书名和ISBN码.(网络爬虫: 从allitebooks.com抓取书籍信息并从amazon.com抓取价格(2): 抓取allitebooks.com书籍信息 ...
- python实现一个栏目的分页抓取列表页抓取
python实现一个栏目的分页抓取列表页抓取 #!/usr/bin/env python # coding=utf-8 import requests from bs4 import Beautifu ...
- Hibernate学习---第十一节:Hibernate之数据抓取策略&批量抓取
1.hibernate 也可以通过标准的 SQL 进行查询 (1).将SQL查询写在 java 代码中 /** * 查询所有 */ @Test public void testQuery(){ // ...
- jmeter旅程第一站:Jmeter抓包浏览器或者抓取手机app的包
学习jmeter?从实际出发,我也是一个初学者,会优先考虑先用来做一些简单的抓包.接口测试,在实践的过程中学习jmeter用途.那么接下来,这篇文章我会以jmeter抓包开启我的jmeter旅程. 这 ...
- javascript中的取反再取反~~
操作符~, 是按位取反的意思,表面上~~(取反再取反)没有意义,实际上在JS中可以将浮点数变成整数. <html> <script> var myArray = new Arr ...
随机推荐
- Docker+Jmeter+InfluxDB+Grafana搭建性能测试监控平台
搭建需求? jmeter自身的聚合测试报告可视化效果极差,为更加形象的.动态的展示测试过程,需要一个具有时序性的可视区来展示给我们的测试者, 这时候就需要用到后端监控,下面我们来开始搭建符合这种测试需 ...
- Java成长记录第二集--基础重点
第一篇写的博客给自己的学习路线立了个flag后,感觉现在学习的积极性大增,这也离不开那几位老铁们的互相鼓励.废话不多说,现在给出自己总结的Java基础部分所要重点注意的内容,对以后的开发工作也是很常用 ...
- Docker-Bridge Network 01 容器间通信
本小节介绍bridge network模式下,单机上的容器网络拓扑及通信. 1.前言 对于单机上的容器,Docker提供了bridge.host.none三种网络.我们首先介绍经典的bridge模式. ...
- Python中Selenium模拟JQuery滑动解锁实例
滑动解锁一直做UI自动化的难点之一,我补一篇滑动解锁的例子,希望能给初做Web UI自动化测试的同学一些思路. 首先先看个例子. https://www.helloweba.com/demo/2017 ...
- 极验反爬虫防护分析之slide验证方式下图片的处理及滑动轨迹的生成思路
本文要分享的内容是去年为了抢鞋而分析 极验(GeeTest)反爬虫防护的笔记,由于篇幅较长(为了多混点CB)我会按照我的分析顺序,分成如下四个主题与大家分享: 极验反爬虫防护分析之交互流程分析 极验反 ...
- 2020新Asp.NET敏捷快速开发框架7.0.5旗舰版源码asp.net mvc框架,工具类CRM,工作流
演示地址: http://frame3.diytassel.com 用户名:system 密码:0000 需要的联系QQ:22539134 一.新添加了 1.多语言功能: 2.代码生成器模版 ...
- 2020i春秋新春战疫
简单的招聘系统 登陆这里就可以注入 查询这里也可以注入 从登陆这里注入把 爆破数据库名 爆破表名 列名 flag 就很奇怪跑出来的东西 重开容器跑一遍列,估计是flaaag.后面可能是发生了502 再 ...
- 在c++中引用c头文件里的函数
在c++中有的时候想要引用c头文件里的函数有两种方法;就拿c语言里面的<stdlib.h>举例 在c中我们想要用<stdlib.h>里的函数,形式为:#include<s ...
- Nginx+Fastdfs
注: 在配置时,使用非root用户配置 fdfs/fdfs 1. 集群部署 1.1. 准备 创建目录:本文档中所有内容安装到/fdfs目录 [fdfs@5861be93b5b0 /]$mk ...
- linux uniq 命令实用手册
Linux uniq 命令用于处理文本内容中的重复行. 这里我们只介绍其常用参数,其完整用法可参见man uniq. 例如,我们有如下文件内容: >>> cat log.txt __ ...