DeHby 发表于 2022-9-8 01:21:23

【JS解密】练手帖①

本帖最后由 DeHby 于 2022-9-8 01:28 编辑

目标:aHR0cHM6Ly93d3cuemZyb250aWVyLmNvbS8=
首先打开 浏览器匿名窗口(在Edge 叫inPrivate),这是为了避免残留缓存 抓到不准确的包 或者来源不明的Cookie..等等,接着打开开发者工具 挂上Fiddler
FD方便分析详细的协议以及注入操作,开发者工具方便观察请求调用堆栈以及debug JS代码,然后打开目标网站,等待页面加载完成得到数据后,停止抓包,请求数越少,抓包数据精度越高是最好的,过滤掉没用的请求。

接着我们找到了 数据接口的关键请求 *v2/tag/flows

寻找关键请求的几个小技巧:
1.根据爬取的数据源在FD进行全局文本搜索
2.在开发者工具找到Fetch/XHR的数据分类进行过滤分析
3.优先查看正文最大 且Content-Type不为text html

大致看一下请求协议头发现了 X-CSRF-TOKEN头,看名字就知道有作用 先记录到我们的小本本(notepad.exe)

接着我们看到了 cookie dnt sec-gpc 以及post数据:
time=1662566366&t=e418c683f1993d78f861e82b882cb6fd&page=1&id=2002&type=normal&tradeType=
我们首先要做的是,用最少的http协议复现浏览器最"原始"得到的http响应数据
我们使用Fiddler/PostMan/Postwoman/手码的方式去发送http请求 测试这些cookie 以及token 等协议头的作用区域
最后我根据测试得出 X-CSRF-TOKEN,Content-Type,Referer是必须存在的协议头,且POST数据不能有任何修改否则失败

接着我们理清楚哪些数据是从何而来的,首先看X-CSRF-TOKEN,我们使用FD进行全局文本搜索得到如下的结果

Token的数据来源是访问第一个HTML页面在 响应的HTML源码内的script标签内置的 可以使用一些文本查找处理代码进行获取,接着我们看POST的数据来源
根据分析time为10位时间戳,t是一个32长度的文本,根据常识我们猜测他是MD5
后面的 page id type 都是我们需要获取数据的一些明文参数就不用管了,我们需要的是知道t是怎么来的
我们前面说过,POST的内容只要任意的修改就会提交失败,并且还有时间戳的参数,按照通常的设计来看这是很明显的 MD5签名,并且是根据某些内容的变化而变化进行校验的
根据上面的猜测(MD5),我们在开发者工具 进行全局搜索"md5"的关键字,得到如下结果

点开后进行JS美化显示,我们看到了熟悉的 time && t,不多废话代码行数位置点上断点,尝试重新触发请求


我们看到t对象里面储存着我们POST里面的每项熟悉的参数
接着我们分析代码,time = 强转整数(当前13位时间戳 ÷ 1000)-time_diff
根据FD的搜索我们发现 time_diff 也是来源于第一个HTML的请求内的script标签,我们只需要取出代码丢到JS引擎跑一下 或者自行文本翻译处理代码得到 time_diff的结果

接着往下关键点 t = e,e= 一大坨混淆的代码,我们将这一戳代码拿到下面控制台运行是可以正常得到数据的

我们猜测他肯定是用了MD5加密,至于加密了什么,我们有两种方式得到这部分的原始代码
方法1:使用在线版反混淆 https://mindedsecurity.github.io/jstillery/# 当然这种方法 代码还是有点反人类

方法2:直接丢到新的窗口控制台运行,让他报错 我们点击报错的VM



显然方法2 让我们直接看清楚了加密的原理,md5 = window.md5 ,t = md5( 计算出来的10位时间戳 + Token )

完结,第一次发帖,回复支持一下吧!

0xAA55 发表于 2022-9-8 10:34:37

我也有这样的使用记事本的习惯。

你这个破 md5 加密方式的过程真是屌。

支持。

DeHby 发表于 2022-9-8 12:50:37

0xAA55 发表于 2022-9-8 10:34
我也有这样的使用记事本的习惯。

你这个破 md5 加密方式的过程真是屌。


我经常 顺手Ctrl+R输入notepad
快捷记录当前有用 可能比较重要的内容
页: [1]
查看完整版本: 【JS解密】练手帖①