目录
个人声明
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
此文章重在学习调试技巧。模拟参数生成。
目标网站:aHR0cHM6Ly93d3cuanptdTFoLmNvbS96YmdsL2NnZ2cvMTMuaHRt
安全产品介绍:aHR0cHM6Ly93d3cuaWRzcy1jbi5jb20vcGx1cy9saXN0MGVkYS5odG1s
前几天遇到cookie加密网站,以为是自营产品。然后搜了一下,

立马就知道了,这是一个安全产品。然后在网上搜了下爬虫攻略,发现搜不到。然后我真的菜,花了一天时间才搞出来。这应该是一个比较新型的安全产品,网上找不到攻略。然后我就写下这篇文章,记录逆向过程。我不会是全网首发的。
产品特征
请求两次
第一次报466

这几个值后面用于生成cookie
第二次成功生成

这一段是解密的内容

文本内容都是函数生成渲染的

以及cookie生成

请求第一次获取JS链接会变,JS详情内容不管JS链接变不变,每次请求详情内容都会变。


对比两次都不一样。
定位cookies
采用hook方式。

发现是这个函数执行的

所以做这个东西还是老样子,替换文件,方便联调。全扣,补环境。导出生成cookie函数。


补环境流程
运行第一次报这个错误

exports检测

在网页上

在浏览器是object

直接赋值为undefined


console重新赋值
接下来就输出不了内容了,所以在程序开始时,
先console.log赋值console就可以打印了然后就疯狂补环境了。
meta标签

就需要第一个必须值了,先写死

压缩检测和定时器
补完卡住不同,

两个原因,第一个压缩代码,第二个清空定时器,事实上这两个检测都有。

点击这个,压缩代码
javascript
window.setTimeout = function () {
}
window.setInterval = function () {
}
再把定时器清空
接着报这个错误

这个可以在JS里用window导出然后调用,或者直接用标准库,用标准库吧,压缩加混淆的代码很难找。
javascript
CryptoJS_idss = require('crypto-js')
继续补环境,补到这里
script标签


返回两个script标签

给两个标签上代理,把两个script标签补上属性

返回x

在浏览器输出

事实上第一次页面返回的

补上去注意顺序
接下来



补上这两个,然后继续补环境
补到这

localStorage
事实是这个东西

补到最后发现还是补不出来,localStorage上代理或者联调都行


发现是这个方法缺失了,补上就行

然后又报cookie未定义

此cookie非彼cookie,为第一个接口响应cookie,随机字符也行

补完这个属性后就可以出值了。

假值cookie
接下来请求首页

获取js链接和meta标签的content属性
然后读取补好环境的node内容进行一一替换

运行内容

发现是个假值,假值跟真值cookie长度还不一样。
BUffer检测
仔细查了下吐环境,发现还有这个检测

BUffer在浏览器是

在Node里是

咱们也可以联调看一下

在这里设置debugger
在这里有个判断
联调,观察是什么内容

在node,是会执行这个判断的

然后对比网页

网页判断是undefined
所以就非常简单,把Buffer赋值为undefined

除以上还有这几个检测
javascript
delete global;
delete Buffer;
delete process;
delete require;
delete module;
delete exports;
delete __filename;
delete __dirname;
留个心
顺利请求

解密流程
下断点

进入这个函数,可以直接使用这个函数

直接使用

接下来就是缺失这个

这个就是这个

可以直接补上了

然后联调补环境补几个方法,补环境过程省略。这一段先写死

补到content,然后script里的src属性和meta标签内容要一一对应,推测可能是生成密钥,或者是分段密文内容。这里面用的是AES加解密。
就可以了
然后进入这个函数

找一找是在哪里解密的
发现在这里
然后用window属性导出来,这里这个函数我格式化了,非压缩,其它都压缩了

然后封装测试

过了,这里面的传参会变。

最后封装代码


运行结果:

