声明

本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!

网站

https://match.yuanrenxue.cn/match/5

网站分析

首先 刚进入页面即显示了



说明次题就和cookie有关系。

然后我们通过浏览器自带的抓包软件观察一下



可以看到 这个接口是我们所需要的接口



这里params的加密参数是 mf

cookie的加密参数是 mRM4hZBv0dDon443M 并且 RM4hZBv0dDon443M的值也是定值 不会改变

经过多次分析,这两个cookie的值 是一直改变且变化的

可以观察到 这个 m 和params中的m 同名 那有没有可能二者也存在某种关系呢?

既然是cookie 可以通过以下方式去查找

  1. 查找set_cookie
  2. 通过搜索 cookie的key 或者直接搜索cookie
  3. hook cookie

抓包分析



控制台有这么一段信息。一直会打印出来,

我们首先点进这个js文件里面



在1092行 发现这是个打印函数。很烦人,我们可以去除掉这段信息。

第一种方式呢就是通过hook 改写掉console.log

第二种方式呢 其实和hook差不多,就是直接把console.log 置空。

console.log = function () {
return
}

去除掉这段代码然后我们就可以分析这段代码了

可以看到在这段js里面有大量的混淆代码

寻找参数

我们既然已经找到了 混淆的JS文件

我们可以试着搜一搜RM4hZBv0dDon443M

看看能不能搜到,发现搜不到,我们可以再试试 m=



发现可以搜的到。而且这个值就是 RM4hZBv0dDon443M的cookie值

我们也可以通过hook

然而 有个注意事项,其实直接hook是hook不进去这段代码的,所以我们需要打个断点,然后手动的去hook

我们在这里打上debuger 然后手动去注入如下代码

以下是hook的代码

(function () {
'use strict';
var cookie_cache = document.cookie;
Object.defineProperty(document, 'cookie', {
get: function () {
return cookie_cache;
},
set: function (val) {
console.log('Setting cookie', val);
// 填写cookie名
if (val.indexOf('RM4hZBv0dDon443M') !== -1) {
debugger;
}
return val
}
});
})();

之后放开断点 ============>>>>>



然后成功进入栈,然后我我们向上追栈 也能找到刚刚M=的位置



然后我们测试了一下发现_0x4e96b4['_$ss']函数是我们所需要的cookie值

'R' + 'M' + '4' + 'h' + 'Z' + 'B' + 'v' + '0' + 'd' + 'D' + 'o' + 'n' + '4' + '4' + '3' + 'M=' + _0x4e96b4['_$ss'] + ';\x20path=/';

我们打印下_0x4e96b4 发现其实它是个window对象。





通过这个window对象 ,我们看到 加密函数,指纹识别 还有一大堆都挂载在这个window对象里面

这里可以也可以通过两种方式往下寻找加密栈

1.通过油猴脚本来hook window 这个对象 2.通过Ast来还原这个混淆后的JS

这里贴上hook代码

(
function(){
Object.defineProperty(window, '_$ss', {
set: function(val){
debugger;
console.log(val);
return val;
}
});
}
)();

如果通过hook 会发现(当然也可以继续回车搜索_0x4e96b4 ) 走到如下位置>>>>>>

发现在1224 行有一个加密 函数。





发现这是个AES

通过这个我们可以发现AES加密需要传入三个值,

message:加密的值

这个message的值也是通过加密而来 是由五个类似于MD5的值拼接而来,然后转换成字节类型

可以通过两种方式查找 _$pr

  1. hook window._$pr
  2. 直接搜索 _$pr

这里我们直接搜索



通过这个我们可以判断 这个m的值 被放到了 window._$pr中,然后再通过加密手段 得到了cookie RM4hZBv0dDon443M

的值。

key: 加密秘钥

其次这个key 也是挂载到windows中的

我们既然知道 这个值是 _$qF 我们来搜索下 _$qF 这个值看看

发现直接给我们了。

而这个_0x4e96b4['_$is'] 则是时间戳 所以说秘钥应该是 通过base64编码时间戳然后取16位 做为秘钥

_0x4e96b4['_$qF'] = CryptoJS['enc']['Utf8']["parse"](window.btoa(_0x4e96b4['_$is'])['slice'](0, 16));

cfg: 配置

我们直接看这个mode 和padding

mode:



padding:

结论

url params中的 m 通过base64编码取了16位 做了 然后通过上文的这个函数,做了 cookie中的m

然后再用cookie的m 做了 RM4hZBv0dDon443M 加密的秘钥

然后这个 url params中的f 就是cookie的过期时间

然后我们继续往下追栈

而前面这个值





就是我们上文提到的 window._$ss 而后者 就是我们所需要的值

!话说有能力最好还是用AST 这么弄真的很麻烦

扣代码

这里有个坑



他们每次的值都是变化的。

_0x4e96b4['_$6_']
_0x4e96b4['_$tT']
_0x4e96b4['_$Jy']

我们可以打印下看看, 也可以hook看看



所以说在扣代码时 这个要死

// 这三个数据不能变
_0x4e96b4['_$6_'] = -389564586
_0x4e96b4['_$tT'] = -660478335
_0x4e96b4['_$Jy'] = -405537848

友情提示 debugger 一定要打在这虚拟机里面 大概在 23 行 window['\x24\x5f\x71\x70'] = window, 这个地方

(function () {
var hook__0x474032 = _0x474032;
_0x474032 = function (e) {
var _ = hook__0x474032(e);
console.log(`时间戳为${e} >>>> 加密后的数据为 ${_}`);
console.log(`_0x4e96b4['_$6_']++++++'${_0x4e96b4['_$6_']}'`)
console.log(`_0x4e96b4['_$tT']++++++'${_0x4e96b4['_$tT']}'`)
console.log(`_0x4e96b4['_$Jy']++++++'${_0x4e96b4['_$Jy']}'`)
return _;
}
})()

然后就扣代码,扣完代码放入执行即可

JS逆向实战15——猿人学第五题 动态cookie乱码增强的更多相关文章

  1. JS逆向实战7-- 某省在线审批网站params 随机生成

    参数分析 我们首先通过抓包 发现这个就是我们所需要的数据 然后我们通过fidder 发起请求 结果: 通过我们反复测试 发现这个params的参数是每次请求中都会变化的 断点查找 我们通过 这个t参数 ...

  2. JS逆向实战6-- x轴 y轴 过点触验证码

    点触验证码是一种常见的反爬手段 解决方案有两种:一种是直接解决,这需要深度学习机器学习等图像处理技术,以大量的数据训练识别模型,最终达到模型足矣识别图片中的文字提示和应该点击的区域之间的对应关系. 这 ...

  3. JS逆向实战4--cookie——__jsl_clearance_s 生成

    分析 网站返回状态码521,从浏览器抓包来看,浏览器一共对此地址请求了三次(中间是设置cookie的过程): 第一次请求:网站返回的响应状态码为 521,响应返回的为经过 混淆的 JS 代码:但是这些 ...

  4. JS逆向实战3——AESCBC 模式解密

    爬取某省公共资源交易中心 通过抓包数据可知 这个data是我们所需要的数据,但是已经通过加密隐藏起来了 分析 首先这是个json文件,我们可以用请求参数一个一个搜 但是由于我们已经知道了这是个json ...

  5. JS逆向实战8——某网实战(基于golang-colly)

    其实本章算不上逆向教程 只是介绍golang的colly框架而已 列表页分析 根据关键字搜索 通过抓包分析可知 下一页所请求的参数如下 上图标红的代表所需参数 所以其实我们真正需要的也就是Search ...

  6. JS逆向实战5--JWT TOKEN x_sign参数

    什么是JWT JWT(JSON WEB TOKEN):JSON网络令牌,JWT是一个轻便的安全跨平台传输格式,定义了一个紧凑的自包含的方式在不同实体之间安全传输信息(JSON格式).它是在Web环境下 ...

  7. JS逆向实战2--cookie-AcwScV2加密—某招标信息网

    cookies的获取 首先拿到第一次访问原链接 拿到acw_tc的值,然后放到session中去 再用这个session再次访问原链接拿到js加载的加密的真实数据.用了一些反混淆. 最后获取这个数据中 ...

  8. JS逆向实战1——某省阳光采购服务平台

    分析 其实这个网站基本没有用到过什么逆向,就是简单的图片base64加密 然后把连接变成2进制存成文件 然后用ocr去识别即可 !! 注意 在获取图片连接 和对列表页发起请求时一定要用一个请求,也就是 ...

  9. JS逆向实战9——cookies DES加密混淆

    cookie加密 DES 混淆 目标网站:aHR0cHM6Ly90bGNoZW1zaG9wLnlvdXpoaWNhaS5jb20vbWFpbi90ZW5kP05vdGljZUNhdGVJZD0xJk5 ...

  10. JS逆向实战11——某金属集团动态cookie加密

    本文来自:来自: https://www.cnblogs.com/zichliang/ 目标网站 aHR0cDovL3d3dy50bm1nLmNvbS5jbi9pbmZvcm1hdGlvbi9pbmZ ...

随机推荐

  1. Centos 7配置使用nginx反向代理mysql

    背景:由于WEB服务和MySQL数据库服务分开部署的,由于网络问题限制,有时需要通过中间代理服务器跳转连接MySQL,所以需要在中间服务器上配置代理. 1.添加stearm模块 # nginx通常代理 ...

  2. day09-拦截器&文件上传

    拦截器&文件上传 1.拦截器-Interceptor 1.1拦截器概念 拦截器 拦截器(Interceptor):是一种动态拦截方法调用的机制,在SpringMVC中动态拦截控制器方法的执行. ...

  3. 【JVM盲点补漏系列】「并发编程的难题和挑战」深入理解JMM及JVM内存模型知识体系

    并发编程的难题和挑战 在并发编程的技术领域中,对于我们而言的难题主要有两个: 多线程之间如何进行通信和线程之间如何同步,通信是指线程之间以何种机制来交换信息. 多线程的线程通信机制 在命令式编程中,线 ...

  4. 我为什么推荐Nuxt3

    我为什么推荐Nuxt3? 大家好,我今天想和你们分享一个非常棒的前端框架--Nuxt3.自从我接触了Nuxt3,我发现它在前端开发领域具有很多优点.我想逐一向你们介绍Nuxt3的优势,并向大家推荐一些 ...

  5. ffmpeg protocol concat 进行ts流合并视频的时间戳计算及其音画同步方式一点浅析

    ffmpeg protocol concat 进行ts流合并视频的时间戳计算及音画同步方式一点浅析 目录 ffmpeg protocol concat 进行ts流合并视频的时间戳计算及音画同步方式一点 ...

  6. Ansible 安装并简单使用

    Ansible 简介 Ansible 是一款 IT 自动化工具.主要应用场景有配置系统.软件部署.持续发布及不停服平滑滚动更新的高级任务编排. Ansible 本身非常简单易用,同时注重安全和可靠性, ...

  7. [MySQL]SQL条件语句

    IF语句:IF(expr1, trueResultExpr, falseResultExpr) 若expr1 == TRUE, 则:返回值为 trueResultExpr: 若expr1 == FAL ...

  8. wpf RelativeSource绑定

    RelativeSource有四种类型 Self FindAncestor TemplatedParent PreviousData a.Self Self用于绑定源和绑定目标相同的场景中.对象的一个 ...

  9. jdk1.8 LocalTime、LocalDate、LocalDateTime 使用大全

    目录 LocalTime.LocalDate.LocalDateTime 区别 LocalTime.LocalDate.LocalDateTime 使用 now 获取当前 时刻.日期.时间 of 获取 ...

  10. java获取到heapdump文件后,如何快速分析?

    原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,非公众号转载保留此声明. 简介 在之前的OOM问题复盘之后,本周,又一Java服务出现了内存问题,这次问题不严重,只会触发堆内存占用高报警 ...