首页 > 其他分享 >瑞数4代逆向学习

瑞数4代逆向学习

时间:2024-05-09 15:47:17浏览次数:25  
标签:逆向 瑞数 代码 js 学习 cookie document

声明

本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请在公众号【小马哥逆向】联系作者立即删除!

瑞数介绍

image

瑞数动态安全 Botgate(机器人防火墙)以“动态安全”技术为核心,通过动态封装、动态验证、动态混淆、动态令牌等技术对服务器网页底层代码持续动态变换,增加服务器行为的“不可预测性”,实现了从用户端到服务器端的全方位“主动防护”,为各类 Web、HTML5 提供强大的安全保护。

瑞数 Botgate 多用于政企、金融、运营商行业,曾一度被视为反爬天花板,随着近年来逆向大佬越来越多,相关的逆向文章也层出不穷,真正到了人均瑞数的时代了,这里也感谢诸如 Nanda、懒神等逆向大佬,揭开了瑞数神秘的面纱,总结的经验让后来人少走了不少弯路。

过瑞数的方法基本上有以下几种:自动化工具(要隐藏特征值)、RPC 远程调用、JS 逆向(硬扣代码和补环境),本文介绍的是 JS 逆向硬扣代码,尽可能多的介绍各种细节。

目标网站

aHR0cDovL3d3dy5mYW5nZGkuY29tLmNuL25ld19ob3VzZS9uZXdfaG91c2VfZGV0YWlsLmh0bWw=

网站分析

https://alidocs.oss-cn-zhangjiakou.aliyuncs.com/res/J9LnWNk86QN8lvDe/img/5e9e3567-86ba-4e43-ba28-6d1766dcb647.jpeg

image

可见首先这是个 202 请求,其次set-cookie: FSSBBIl1UgzbN7N80S。

image

其次他自返回了一个cookie: FSSBBIl1UgzbN7N80S

并且的话还生成了一个 js c.FxJzG50F.dfe1675.js。

第二次

image

第二次需要携带第一次的请求 已经一个新的 cookie 才能返回正常的页面。如下图

image

逆向流程分析

首先过掉无限 debugger(过不过其实无所谓,后面的分析其实这个基本上没影响),直接右键 Never pause here 永不在此处断下即可

image

定位 Cookie,首选 Hook 来的最快,通过 Fiddler 等抓包工具、油猴脚本、浏览器插件等方式注入以下 Hook 代码:

# hook cookie
(function() {
    // 严谨模式 检查所有错误
    'use strict';
    // document 为要hook的对象 这里是hook的cookie
 var cookieTemp = "";
    Object.defineProperty(document, 'cookie', {
  // hook set方法也就是赋值的方法 
  set: function(val) {
    // 这样就可以快速给下面这个代码行下断点
    // 从而快速定位设置cookie的代码
    console.log('Hook捕获到cookie设置->', val);
                debugger;
    cookieTemp = val;
    return val;
  },
  // hook get 方法也就是取值的方法 
  get: function()
  {
   return cookieTemp;
  }
    });
})();

Hook 发现会有生成两次 Cookie 的情况,断下之后往上跟栈,可以看到组装 Cookie 的代码,类似如下结构:

其实 我觉得补环境和正常分析区别很大。
我们不需要了解瑞数中的真假 cookie。
只需要定义出一个函数,去接受和返回 docuement.cookie即可。
在正式分析以前。我们需要固定一份静态代码。因为瑞数的网站返回的内容每次都是动态的,不方便我们调试。后续我们把这份静态代码放到 node 里就能慢慢的去补了。

image

这里补环境的话需要四部分内容,如上图 红圈中圈中的三个。以及生成的虚拟机代码。这四部分代码可以生成FSSBBIl1UgzbN7N80T

这里简单说明一下他们的作用

  • meta 标签中的内容:(即 content 中的内容)会在后续的 eval 中用得到

  • 外链的 js :c.FxJzG50F.dfe1675.js这部分代码。下面的那个自执行函数会解密这个 js 从而生成虚拟机代码

  • 自执行函数:解密外链 js。生成虚拟机代码。并且添加属性

  • 生成的虚拟机代码。生成新的 cookie

我们需要把这三段代码,放到一个文件中

生成的虚拟机文件不需要,他会自己生成的。

分析代码,扣代码

由扣出的代码可见,主要执行步骤在最下边的while 控制流,以及最后一个函数内部的多个控制流:

image

1、缺window,补个 window=global;
image

2、缺document,补个document={}
image

3、需要document.scripts,定位到浏览器代码,查看长度需要是3,补个document.scripts = [1, 2, 3](暂时)
image

4、再运行代码,就大功告成了?不! 并没有,我们在界面上断住这行代码,发现直到最后都断不住到这里,所以感觉还是缺点是什么。
我是通过在控制流断点和webstorm断点单步调试找到的区别,是因为少了一个文件
image

把这里 代码拿出来 补进去,成功运行 打印 window.$_ts,202界面加载的 主要函数就出来了

image

ret=.call(*, **)

打印出来,就是瑞数的调试逻辑代码(具体操作js基本知识)

结果验证

如果整个流程没问题,代码也扣得正确,携带正确的 Cookie 和正确的后缀,就能成功访问:

image

image

标签:逆向,瑞数,代码,js,学习,cookie,document
From: https://www.cnblogs.com/xiaomagenixiang/p/18182431

相关文章

  • 模块学习之logging模块
    【一】函数式简单配置importlogginglogging.debug('debugmessage')logging.info('infomessage')logging.warning('warningmessage')logging.error('errormessage')logging.critical('criticalmessage')默认情况......
  • 模块学习之time、datetime模块
    【一】表示时间的三种方式时间戳元祖(struct_time):年,月,日,时,分,秒,毫秒,微妙格式化的时间字符串:xx年-xx月-xx日时:分:秒【二】time模块(1)导入模块importtime(2)时间戳时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的......
  • 模块学习之os模块
    【一】导入模块importos【二】文件路径相关操作_file__指当前文件(1)获取当前文件路径(abspath)importosfile_path=os.path.abspath(__file__)print(file_path)#D:\Python\pythonProject\pythonProject1\demo7.py(2)获取当前文件所在文件夹路径(dirname)importos......
  • 学习记录+vcode+GPIO例程+正点原子 DNESP32S3 开发板教程-IDF 版
    第一个程序:UART模式和JTAG模式,配置完成不同。配置主要就是.vscode文件夹中 c_cpp_properties.json,tasks.json,launch.json,settings.json四个文件。一个想法:备份UART模式和JTAG模式的配置文件,用时直接文件替换。简单粗暴方式是.vscode文件夹替换。当然每次要选好串口、设置目标......
  • 文件IO学习【一】
    目录计算机的组成部分硬件系统软件系统文件系统Linux系统的目录根文件系统说明目录的结构分析Linux的文件类型计算机的组成部分硬件系统计算机的硬件主要是由五部分组成:控制器、运算器、存储器、输入设备、输出设备。运算器和控制器的总称是中央处理器(CPU),指的是计算机中对......
  • DrissionPage自动化框架学习
    DrissionPage学习官网:http://drissionpage.cn/features/intimate/自动化测试框架:DrissionPage1.DrissionPage事件1.1元素定位查找#根据属性查找,@后面可跟任意属性page.ele('@id:ele_id',timeout=2)#查找id为ele_id的元素,设置等待时间2秒page.eles('@class')#......
  • 吴恩达机器学习-第三课-第三周
    吴恩达机器学习学习视频参考b站:吴恩达机器学习本文是参照视频学习的随手笔记,便于后续回顾。强化学习(reinforcelearning)什么是强化学习示例:如何让遥控飞机学会倒飞?监督学习并不适用,因为很难有好的数据集奖励函数,告诉飞机什么时候是表现好什么时候是表现差强化学习是你需要......
  • 深度学习tf2.0版本报错——实验24
    深度学习:fromtensorflow.contrib.rnnimportLSTMStateTuple没有contrib模块_indylstm-CSDN博客把原先的tf引用换成蓝色框框,然后把红框的代码改成星星处代码——————针对LSTMCell报错 tf2.0里面缺少crf包是因为把这个contrib包删除了所以要下载一个新的库:安装之后就不会......
  • CompletableFuture学习总结
    CompletableFuture简介在Java8中,CompletableFuture提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合CompletableFuture的方法。Java中的异步计算异步计算很难推理。通常,我们......
  • LLM 大模型学习必知必会系列(二):提示词工程-Prompt Engineering 以及实战闯关
    LLM大模型学习必知必会系列(二):提示词工程-PromptEngineering以及实战闯关prompt(提示词)是我们和LLM互动最常用的方式,我们提供给LLM的Prompt作为模型的输入,并希望LLM反馈我们期待的结果。虽然LLM的功能非常强大,但LLM对提示词(prompt)也非常敏感。这使得提示词工程成......