0%

爬虫对抗相关总结

又双叒叕 一篇相关于爬虫对抗的总结. 一般来说对于爬虫的对抗主要体现在如下几个方面

  • 反调: 反抓包\反调试\代码混淆与防护

  • 反(欺诈)模拟: 网络协议校验\TLS\请求头(字段\字段顺序\反盗链)校验

  • 数据防护\验证码\风控对抗等

反爬虫(风险策略)工程师预防以及防止爬虫工程师对数据的抓取, 一方要"守"一方要"攻",各为其主各司其职你来我往谁也多呈不让.

反抓包

反抓包的目的多种多样,简而言之便是让爬虫工作者无法捕获网络数据包

如: 不走http\不走代理\请求分离\SSLping单(双)向校验\网络协议定制等

反调试

反调试的策略诸多, 主要体现方面有思路为 预防调试\ 阻断调试\ 破坏调试,让爬虫逆向者无法有效进行调试

预防调试

预防调试的手段也多种多样, 简而言之便是预防开发者调试从而阻断分析无法进入下一步,主要体现在环境检测\动态代码

譬如:

  • web端: 控制台检测\动态js\wasm\代码防护与混淆\hook检测\堆栈顺序检测

  • Android: 运行环境检测(root\签名校验\hook检测\模拟器检测)\进程检测与调试工具检检测(
    jadx\apktool\jeb\xposed\frida\ida)\壳\so\

  • web:

    • 分辨率检测
    • 控制台检测
    • 动态js
    • wasm
  • Android:

    • 运行环境检测
      • root检测
      • 设备检测
      • 签名校验
    • 调试器工具检查
      • 工具特性检测
        • jadx
        • apktool
        • jeb
        • xposed
        • frida
        • ida
    • 代码防护
      • so
      • 代码隐写
  • 代码混淆

    • 布局混淆
    • 数据混淆
    • 数字混淆
    • 字符串混淆
    • 控制流平坦化

阻断调试

阻断调试, 顾名思义便是阻止调试.或着说将你引入错误的逻辑中,无法正常的调试

譬如代码中的环境检测\设备指纹

破坏调试

相对于阻断调试更加极端的手段,一方面对调试者信息进行采集、攻击调试者。例如删除文件、重置电脑、甚至释放病毒等

小结

做反调试主要有两个方面一方面是特征区分预防\阻断\破坏调试, 另一方面是对代码进行保护与混淆

反(欺诈)模拟

如果说反调试是为了防止逆向工作者,那么反模拟便是针对爬虫工程师.

简而言之,防止模拟请求. 那么对于此.我们只需要区分开这个请求,
亦或者将结果数据进行处理这样就可以让开发者无法拿到正常有价值的数据,从而实现反爬虫的效果.

因为我们知道爬虫简单来说就是模拟用户请求的代码实现

反模拟主要在对于爬虫的请求进行甄别,常见的关键点有

请求库特征,譬如tls指纹

请求协议的区分: 譬如强制指定http2或quic等\使用自研的协议

参数校验: 校验的思路有 参数字段的校验如cookie等, 参数顺序的校验

加密与编码算法的定制修改,

  • 位运算\ 在特殊的头\尾部加入字符
  • 魔改hash算法\base(16\32\64)等
  • 对称加密与非对称加密算法

校验的字段通常使用到加密算法或编码算法

数据防护

当我们完成了以上的种种, 便将"战场"迁移到最后的数据保护上,

常见的方式有数据加密(从服务端返回的数据进行加密或编码)

数据隐写

无法轻松直接的从返回的数据包中获取到数据, 只需要保证界面展示上正常的即可

验证码

验证码不必多说, 譬如常见的如下几种类型

  • 滑动型
  • 计算型
  • 点选型(图像: 一维\二维\三维)
  • 短信或语音验证型

通常验证码还会对对应的譬如图片进行安全处理, 如图片重排\模糊化等等干扰识别以及防止图像被还原

还有就是检测运行环境

风控

IP风控

设备风控

账号风控

风控其核心的对抗 个人认为有两点

  1. 特征
  2. 逻辑

写的比较散,但实现起来却并不是唯一, 仅按个人认为的进行的区分, 大多情况都不可能单独出现.

最后

无论是爬虫工程师还是反爬虫亦或者风险策略工程师. 攻与守并非是一成不变的. ,掌握底层逻辑,不断的成长向上吧.
瑞斯拜~