• IOS抓取与反抓取


    IOS抓取基础知识

    1. ARM64

      有道云笔记:http://note.youdao.com/noteshare?id=7b723d832da60281c9bb20e9f56fe69e

    2. 脱壳与加壳

      有道云笔记:http://note.youdao.com/noteshare?id=a7696c5d7181703460a28a481c5ee1b2

    3. Cycript

      有道云笔记:http://note.youdao.com/noteshare?id=b81855b860d782408d96339e8856694c

    4. Reveal

      有道云笔记:http://note.youdao.com/noteshare?id=13204fa4c5420bb386ff4b6a6f01b796

    5. 静态分析

      有道云笔记:http://note.youdao.com/noteshare?id=0959f43af232e788281f848105156b1b

    6. 动态分析

      有道云笔记:http://note.youdao.com/noteshare?id=6944df80c03dd41cf23cec3eb761f772

    7. MachO文件

      有道云笔记:http://note.youdao.com/noteshare?id=c7a6a87998df9df27e65029c390eaadf

    8. ASLR

      有道云笔记:http://note.youdao.com/noteshare?id=8a4652f9374c2d54bac9f14692920f5a

    IOS抓取方式

    iOS破解

    模拟器

    1. 黑雷苹果模拟器
    介绍

    iOS应用需要运行在ARM架构上,不支持x86架构。如果要强行在x86架构的cpu上运行,就需要进行大量的代码转换工作。iOS大部分代码闭源,这就造成整个模拟工作非常困难。目前市面上真正意义上的iOS模拟器只有黑雷。

    局限
    1. 应用商店App量少

    2. 不能自由安装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作弊

    注入

    介绍
    1. 静态注入。修改原始的可执行文件,将需要执行的代码事先插入可执行文件中。
    2. 动态注入。不改变原始的可执行文件,是在目标程序运行时才进行的注入行为。
    方式
    1. 注入动态库文件(越狱)

      将注入的dylib放入DynamicLibraries目录下

    2. 使用DYLD_INSERT_LIBRARIES环境变量启动(越狱)

      dyld会判断环境变量是否存在,存在则会被加载

    3. 为可执行文件添加Load command(非越狱)

      设置LC_LOAD_DYLIB指向注入的dylib。重新打包、签名就能安装到未越狱手机

    Hook方式

    Method Swizzle

    介绍

    Method Swizzle利用Object-C的Runtime特性,动态改变SEL(函数编号)和IMP(函数实现)的对应关系,达到OC函数调用流程改变的目的。

    详细过程

    (1)在Objective-C中调用一个方法,其实向一个对象发送消息,即查找消息的唯一依据是selector的名字,每一个SEL都对应着其方法实现真实的运行地址(IMP)。

    method_swizzle1

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

    method_swizzle2

    (3)runtime机制

    runtime1

    符号表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持久化存储
    1. keychain
    2. 剪切板

    作弊方式

    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. 改机软件检测
    2. 越狱检测加强
    3. 盗版模式加强
    4. 增加调试检测
    5. 增加注入检测

    1.经过近几个月调研,总结了市面逆向课程与书籍。视频包括《小马哥iOS逆向》《Hank攻防对抗》,书籍包括《iOS黑客攻防秘籍》《iOS应用与安全》。

    2.iOS逆向并不想Android逆向那样百花齐放,主要受限于iOS大部分源码闭源,分析难度大。

    3.iOS注入与Hook方式有限,有效性地针对即可解决掉大部分爬虫,剩余的少部分高手可以在对抗中慢慢优化。

    4.爬虫与反爬虫是一个对抗的过程,想把基础防御做好,剩下的在对抗中成长。

  • 相关阅读:
    HDU1058Humble Numbers(DP)
    HDU1285确定比赛名次(拓扑排序)
    HDU2602Bone Collector(DP,0/1背包)
    HDU1869六度分离(最短路floyd)
    HDU3342Legal or Not(拓扑)
    Dijkstra不能得到含有负权边图的单源最短路径
    HDU1069Monkey and Banana(DP)
    HDU1176免费馅饼(DP)
    DAG上的动态规划
    网络分析中数据包结构的定义
  • 原文地址:https://www.cnblogs.com/boycelee/p/12827530.html
Copyright © 2020-2023  润新知