当前位置: 首页 > news >正文

爬虫逆向学习(五):使用RPC框架serkio解决逆向难题

serkio应用实战

  • 前言
  • 实战开发
    • 多次调用加密方法破解失败
    • 如何刷新加密方法
    • 同一个浏览器的加密代码如何给不同用户使用
  • 注意事项
  • 总结

前言

最近在工作中遇到了一个反爬虫产品,处于技术能力和新产品迭代更新快的考虑,最后选择使用RPC技术解决问题,因为serkio框架帮我们封装好了服务,且自身具备一定的负载均衡能力,所以选择它作为RPC实现方案。
新手入门请参考K哥的文章,我也是通过这篇继续学习的。
RPC 技术及其框架 Sekiro 在爬虫逆向中的应用,加密数据一把梭

实战开发

由于是工作业务相关的开发,设计隐私问题,这里就不一一展示开发过程了,我大概罗列出开发过程中遇到的问题

多次调用加密方法破解失败

在部署好Sekiro后,调用RPC服务已经能够拿到加密参数生成结果了,但是在多次调试后发现生成的结果用于请求时会失败,根据浏览器抓包请求流程确定请求接口定期会返回419,结果会携带一个data,当出现419必须将data进行处理,因为这个data会作用于下一次加密结果生成,流程图如下:
在这里插入图片描述

如何刷新加密方法

419的data怎么刷新到加密方法里呢?这个需要在js处理响应数据中找到相关的处理代码(onResponse),然后只要将这段代码在RPC服务中执行即可。

if (request.hasOwnProperty('dunm_data')) {let _0x37561b = _0x365f28(request['dunm_data'], window);_0x37561b["run"]();window.localStorage.dunm_data = request['dunm_data'];
}

同一个浏览器的加密代码如何给不同用户使用

使用同一份加密代码加密到的结果,然后用不同cookie发起请求,发现不是浏览器登录用户的请求结果是419,重试也无效,确定加密过程会引用用户的信息,删除浏览器的登录信息后,原浏览器登录用户用加密结果发起请求也无效,但是在重新设置cookie后有效,确定只要动态设置cookie即可实现同一个浏览器的加密代码给不同用户使用。
使用Object.defineProperty动态设置cookie和ua

var client = new SekiroClient("ws://127.0.0.1:5612/business-demo/register?group=shanghai&clientId=" + guid());
client.registerAction("getLosEncrypt", function (request, resolve, reject) {if (request.hasOwnProperty('dunm_data')) {let _0x37561b = _0x365f28(request['dunm_data'], window);_0x37561b["run"]();window.localStorage.dunm_data = request['dunm_data'];}if (request.hasOwnProperty('cookie')) {Object.defineProperty(document, 'cookie', {value: request['cookie'],writable: true});}if (request.hasOwnProperty('userAgent')) {Object.defineProperty(navigator, 'userAgent', {value: request['userAgent'],writable: true});}let result = window["ssx91m$212"](request['hurl'], request['post_data'], {});resolve(result)
})

注意事项

  1. 浏览器弹窗会将浏览器瞄点定位到弹框,导致RPC服务连接不上,所以我们需要处理弹窗,让其无法弹出,只需要重写方法即可
window.alert = function(str){return true;
}
window.compile = function(str){return true;
}
  1. RPC其实不会产生太大的浏览器内存,我在三台服务器中部署了sekiro,通过监控资源情况确定不会产生过大的内存占用
  2. sekiro如何实现负载均衡呢?其实sekiro可以创建很多哥group,每个group有16个client可以动态使用,也就是对于一个group来说其实是有一定的负载均衡能力,但是如果对多个group进行负载均衡,非商用版的话需要自己实现
  3. 调用rpc服务时由于传参太大导致调用失败,这个时候可以使用post,能实现一样的效果

总结

当我们不考虑去逆向js来实现加密参数的话,可以考虑使用RPC 技术,它不需要加载多余的资源,稳定性和效率明显都更高,也不需要考虑浏览器指纹、各种环境。但是,由于服务时注入到浏览器js文件中的,所以需要维护浏览器窗口的稳定性,且如果网站对ua等浏览器信息进行强校验的话,其实RPC也很难使用。

http://www.lryc.cn/news/58387.html

相关文章:

  • NumPy 秘籍中文第二版:三、掌握常用函数
  • 蓝桥杯基础17:BASIC-02试题 序列求和
  • vue移动端实现vue-pdf在线预览与展示,并且解决页面汉字空白的问题
  • 代码随想录算法训练营第四十九天 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II
  • 【职场篇】程序员是否吃青春饭?程序员在35岁之后是否需要转行?
  • ( “树” 之 DFS) 226. 翻转二叉树 ——【Leetcode每日一题】
  • 实验7---myBatis和Spring整合
  • DJ3-4 传输层(第四节课)
  • 2023爱分析·商业智能应用解决方案市场厂商评估报告:数聚股份
  • Kotlin方法执行顺序
  • Ubuntu系统配置SonarQube + cppcheck + Jenkins
  • Spring @Valid 不生效 问题记录
  • 五步教你如何注册一个公司网站
  • CSS绘制气泡对话框样式(有边框)
  • 12款 Macmini A1347 跑 Stable Diffusion,20多分钟一张图
  • 流量控制和拥塞控制的原理和区别
  • 金融机构断卡行动中外部数据
  • 携程总监的单元测试是怎么样写的?
  • 算法每日一题:P2089 烤鸡 -DFS练习
  • Spring中的循环依赖是什么?如何解决它?
  • 不良事件报告系统源码,PHP医院安全(不良)事件报告系统源码,在大型医院稳定运行多年
  • MySQL 查询常用操作(3)——排序 order by
  • Android Jetpack 从使用到源码深耕【数据库注解Room 从实践到原理 】(二)
  • 传统企业如何实现数字化转型?
  • Linux修改密码报错Authentication token manipulation error的终极解决方法
  • ROS实践06 自定义消息类型
  • 《剑指offer》——从尾到头打印链表
  • Javaweb基础配置模板(mybatis+javaweb)
  • 物联网 JS 前端框架开发 - 执行 js 程序
  • 区块链概论