2025-12-10
爬虫
00

目录

JS协议
定位业务接口
使用devtools
此方案可能遇到的风控:
解决方案:
使用抓包工具
此方案可能遇到的风控:
解决方案:
获取数据
算法分析还原
在还原参数中,我们可能面临的困难有以下的困难:
常用的解决方法:
rpc调用
此方案具有比较强的局限性:
通用的解决方案:
补环境获取
窗口和屏幕信息
浏览器相关设置
屏幕位置信息
文档对象信息
其他信息

JS协议

定位业务接口

爬虫的第一步是定位目标接口,在浏览器采集的时候,常用的抓包方式有两种:

使用devtools

chrome,edge,safari,firefox等主流浏览器都自带了浏览器调试工具,通过f12等方式可以打开调试工具,打开network面板即可获取到所有数据流,从中筛选出对应的接口即可。

此方案可能遇到的风控:

打开调试工具会有明显的标志位,例如console.debug等检测,遇到强风控的网站可能会直接触发风控,常见风控表现例如无限debugger以及登录和验证码页面。

解决方案:

  1. 魔改浏览器内核,解决检测点。
  2. 定位到对方检测位置,将代码重写覆盖绕过检测。
  3. 使用无法被检测的浏览器调试。

使用抓包工具

可以使用小黄鸟,茶壶以及mitproxy等工具进行全局抓包获取所有数据流,从中筛选出目前接口。

此方案可能遇到的风控:

抓包软件的tls指纹和浏览器不同,遇到强风控的网站可能会直接触发风控。

解决方案:

自写抓包工具,魔改tls指纹通过检测。

获取数据

对于在接口没有设置风控参数以及风控逻辑的网站,找到目标接口就可以直接编写代码获取数据。

对于具有风控的网站,我们需要对目标参数进行破解,常用的破解方式有以下几种:

算法分析还原

风控参数可能是一些看似随机的字符,例如:

js
'Af-Ac-Enc-Sz-Token': 'DtzLJcErEbyvMPG+Z74Qdw==|7z69St0L+1WKSd/rIQUgoCAwyjAzGvGfo1ysoxvms9h11vATqJnP6qCuOhbPgdAR/BTt6PK+RG8=|k2/nAbYy+9QZPMZD|08|3', "x-sap-ri": "a1832468fe062245cb4de73a06014cd83b606335b1a7bc304caa", "x-sap-sec": "SBgZKa1YYzmxyyiZZwcNasEQyOPNasaBwnz1y0GKswRUAGsVaeDgrasQrfi4MPDCP/M7ywSh7mnsmYlpikXZqW3x7IcnYHwmItZcdJPbNTgMcqn2Y0EgTn8qrvkSQVNt66Uf6mPZBTeBRHvLxqc8fp+k2tnUsonZ9V0zSkbv5SQyEsOpA1Rvcv3iGDaNYDV5wllP7yWZCRlCCQgir2f9nG4FPC/C/Mya+mNQffDFi2LQkYmaTCwzXev0jMhlzlkUV6gF0ZBaE6ERpu9yzAjyti+C+2Zj4J39xGrdzQNCYl4z+hZGJnqEiQTf6fnDrNZt1V0IoZr06g+g6yC/EEHuiuqqXy9KUX6fqWVX+HXNG7dPDqw3FUJ9NLXDb2MZHhG4CtWwrRSgHqU+R5/OUCakrs6N4WP073wYoaJ+mJZEb+okYHpL8422aO38k6qb1qWJM3LvSF3sY1h+0U7wVQJJ+vAhGCsQ+ErJ1tcwBe608biBXJ2DpQPoOlHBoepOH/bPxLrF1tVW8D/JmvP4ONSchWCdi7SoSuHXZM4wMDxoOnrjqKSOoNE9cpaGYVDaefGB1WQmBPqywyRZlZc8naIEboi/f/DzJ3w63aD8Q5qkSW37p4WB+SlkRMG21u7HWsiCkYUHFQ7BmO51xrlNJmyBeksqClS9sI7Uo4dJsHy1br5Is26mDta8rEuehAQKmuPT79EmuhcZur/77mfd+aucS4riHpshuI/2UEjOoJlDI9NKg+h/a4VnCL3OX6DwfigE8XlXpVESvWBk9uqn0gxQ82fBb5iw0rQ6ZBmpSldSK1Fu99xPgsodoOng3F+qqC7hwe36HvveOEndzIFVpfPf4ts0Qk+Zlf7se5UVEZirEzq0sV8grByKh4iA45luGil0BVHNE4HOR0bBtx74y5Bfz2C195HOFuKdhYlQD6KUGGPOgyZD/NHk9pJZZ//qv4uFHl09n1Zfo0wWjURyQWOhGKnRWRjBSdnYvyne2RsWR7DOFFblv1dcLJJPIwsjMlMbo+2tCfeGecc3w2MxlJu3Q1zA76x8LFemNyFdiCz622+O3re8RWx1d/Bqf7hwH4jonFVXnYBV39zxA5iIq0KfUwtMR8B+ykDKgE3NaSF5SVrmqRGd+ynAwG49B5KryRzOo75mWUzrDmJLfnRHbKd3wVQlw3DZY2CQ2rmafnFBSriz/xkYy+g7ogdDJl+XN8+PmIHM4tAGjSqMnwqGVBMI6JNXYG5IeUluAFGcf+II7+JZbZboniSU/ilhDO1B6ktUprM1ezyX6cPe0TR1GLniFHSiw3kffcXkr1u0J9uHsCwnjcFNZYD29uOH1XcMpLrOroyQEQadPxV6LCWPbW43JsYH0MOjg/5uNaT88Z4bFIUUKCxj8CAbk3+HJdkFAe2MKnqQyCISgMcDbJxzPLTRlT17eso8OXXZo+DflkHCeQvLJLwCRUaDAe3Htv4poqbajzag377GOg14PXrX38zsHHFXOsDU8I5Tf1TDrm5Yn8Vb2u9PjDYfKqmpxYpdQYcjCf0wD/Oyltmi2JngAJkLMxmU1PrP4s/egLzBXYRTXgVzoe+ZGWNk+5KP0SXgeAZ4SVOZzFSJboM8feWDdx63PS587oFgeJGlN4x5RbFHbHOzfe8jkv5KcSbF6VtfLJMw+4U+dotoxVPWTZO9kG06Hg8YR7EoU/0HekDj2OuCPQc8ZbfC7k2yZJNUZL0zSEQ+06yf9FSYvO+vDrqfG8ojuXkwqMTAuP1ACl4oYM2OGiakwXr3wi1ZXMXLurdA9g1LANyPtg0ztr1OTMqLwfdJvQTg8fbHUDz5qry9uj0KXDq5ABTGU8YT1M9zXJSl9WXOXX63XrVSCfk3wJSKAgYVtm6HXi0TDi0inDjSnDaH3Gm7Jorn"

我们需要用java,js,python等高级语言对风控参数进行解析,还原,达到获取到数据接口的目标。

在还原参数中,我们可能面临的困难有以下的困难:
  1. 业务代码逻辑高度混淆,包括但不限于ob混淆,webpack多层嵌套,大数组混淆,控制流平坦化,jsvmp,wasm,动态混淆等混淆逻辑。
  2. 业务代码定位困难,风控参数可能藏在某一个异步函数中,定位到风控参数需要很强的异步栈调试能力。
  3. 反调试检测,目标网站可能在代码中编写反调试代码,以及蜜罐算法,防止我们还原。
  4. 魔改标准加密算法,目标网站可能对常用的加密算法进行魔改,对于幂等性的算法我们可以通过对比结果察觉,例如md5,对称加密算法等。但是例如流密码,非对称加密算法等,此类算法不具有幂等性,如果不具备密码学知识可能很难分析。

常用的解决方法:

  1. AST抽象语法树还原混淆逻辑,对于常见的ob混淆,大数组混淆,使用抽象语法树可以做到还原大部分逻辑,极大的帮助我们进行参数分析。但是此方案不具备还原jsvmp,wasm等更加抽象以及靠近c语言模式的混淆,目前具有价值的网站通常都是多种混淆一起上。
  2. 使用插桩分析大法,所有的混淆,加密都可以通过在关键位置插桩分析还原,难点在于如何定位到关键的插桩位置以及从上百万行的日志中分析出加密逻辑。
  3. 通过代码改写,魔改浏览器等方案可以解决反调试的困难。
  4. 对于魔改的加密算法,具有幂等性的我们可以通过二次校验发现是否还原完毕,对于不具备幂等性的算法,通常我们可以通过在系统层面固定随机数,观察加密过程中的关键步骤,大多数加密算法都具有线性映射以及轮密钥的过程,通过对于算法本身的分析可以解决魔改的加密算法。

生成参数后,将生成的风控参数用于实际的接口请求,观察是否能够成功获取数据。如果不能成功,需要重新分析参数规律并调整算法。

rpc调用

纯算法还原需要很强的逆向分析能力以及时间的投入,并且网站的算法和混淆可能是日级别的更新,这个时候我们就需要考虑别的获取方式,rpc调用是一个不错的选择。 根据目标网站的通信协议,使用 WebSocket 客户端库(如 Python 的 websocket - client 库等)建立与浏览器的 WebSocket 连接,浏览器收到请求后,会在其运行环境中生成风控参数,并通过 WebSocket 返回给客户端。客户端接收这个响应,从中提取风控参数,将其用于后续的数据接口请求。

此方案具有比较强的局限性:

  1. 浏览器的指纹是确定的,在算法还原方案中,我们每次可以随机使用不同的浏览器指纹,但是在rpc中,浏览器没有销毁前指纹是唯一的。
  2. 对于强风控的网站,会对ws协议等进行检测,rpc生成的参数可能无法获取到实际的数据。

通用的解决方案:

  1. 从底层或者js层对浏览器指纹进行修改,达到模拟不同客户端的情况。
  2. 编写代码绕过检测,包括但不限于更换协议,屏蔽检测等。

补环境获取

介于rpc和纯算法还原中,还存在一个折中的方案,那就是补环境的方法,这个方法是利用nodejs模拟浏览器的dom和bom环境,运行目标网站的风控代码生成参数。

补环境获取风控参数的方法需要对目标网站的风控逻辑有一定了解,并且能够灵活运用Node.js的工具库来模拟真实的浏览器环境。这种方法在实际应用中可能需要不断调整和优化,以适应目标网站的变化。

窗口和屏幕信息

  • window.keys:window的属性数量。
  • window.screen:屏幕参数,包括:
  • width:屏幕宽度。
  • height:屏幕高度。
  • colorDepth:屏幕颜色深度。
  • window.innerWidth:窗口内部宽度。
  • window.innerHeight:窗口内部高度。

浏览器相关设置

  • window.timeZone:时区。
  • window.language:浏览器语言。
  • window.navigator:导航器对象:
  • hardwareConcurrency:可用的硬件线程数量。
  • userAgentData:用户代理数据:
  • platform:平台。
  • maxTouchPoints:最大触摸点数。
  • msMaxTouchPoints

屏幕位置信息

  • window.screenLeft:屏幕左侧位置。
  • window.screenTop:屏幕上侧位置。

文档对象信息

  • window.document:文档对象:
  • img_:图片元素数量。
  • script_:脚本元素数量。
  • div_:div 元素数量。
  • link_:link 元素数量。
  • style_:样式元素数量。
  • button_:按钮元素数量。
  • svg_icon:SVG 图标数量。

其他信息

  • window.canvas:画布信息:
  • parameter。
  • renderingContext:渲染上下文。
  • 画布指纹。
  • window.performance:性能信息:
  • memory:内存信息:
  • jsHeapSizeLimit:JavaScript 堆大小限制。
  • totalJSHeapSize:总 JavaScript 堆大小。
  • usedJSHeapSize:已用 JavaScript 堆大小。
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:回锅炒辣椒

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!