某数字藏品监控网站HMAC

花了一天时间搞了下 公司需求的web 端网站 本以为很简单 没想到还是做了一些烦人的反爬

需求就是抓取某个商品的价格变动
在这里插入图片描述
不多说 开始

首先 你会发现 按F12 没有反应 是网站做了反调试
解决方法 :1. 选择浏览器右上方三个点 在选择开发者工具即可
2. 鼠标选中url栏,在按F12

好继续
在这里插入图片描述你会发现 又是这种debugger 看下调用栈 找下触发的代码
在这里插入图片描述找到了 发现是一个定时器 每2s启动一次 然后一直启动
这里有个问题 就是 如果你选中 never parse here 它会内存爆破
导致浏览器无限卡 根本没法调试
可以发现a是个数组 里面就有debugger关键词

解决办法:
打断点进入 函数 修改变量a的值为[] 或者 重置函数c为空函数

解决好内存爆破 反调试之后 先不急

我们先抓包看看

在这里插入图片描述这里有两个请求 第一个是options请求
第二个是post请求

在这里插入图片描述看到第二个请求 post 你会发现

卧槽 怎么没有from data 参数呢?
可以看到 右下角 有个json-rpc 哦哦 说明是通过json-rpc方式调用的
我们只需要 将上面那个json格式当作参数就行
javascript就是参数

既然参数找到了 就分析下参数

{
	"method": "serverless.function.runtime.invoke",
	"params": "{\"functionTarget\":\"getDetail\",\"functionArgs\":{\"time\":1652757446041,\"sign\":\"AMeEAtilAv97A5fgAvWMAF\",\"GoodsId\":\"100513858\",\"platform\":\"ibox\",\"timeType\":\"list10Min\",\"v\":\"4\",\"clientInfo\":{\"PLATFORM\":\"h5\",\"OS\":\"windows\",\"APPID\":\"__UNI__BF29E64\",\"DEVICEID\":\"16526908775569593634\",\"CLIENT_SDK_VERSION\":\"1.0.21\",\"LOCALE\":\"zh-Hans\"}}}",
	"spaceId": "04f58204-a7de-4dc2-8197-8d63c873a510",
	"timestamp": 1652757446050,
	"token": "8790cb4d-ef7d-4865-99ed-d6d8b2b4a117"
}

很明显 这个timestamp 是时间戳 *1000 取整 这个token 和spaceId经过我调式发现 是个固定值 但有几分钟时间限制
这里我主要讲解 params参数和另一个请求头里面的参数加密

观察params 可以里面有个time ,sign time就是时间戳 sign就是我们需要破解的 其他的参数都是一些固定值和商品的id 不用管

接下来 继续调式
跟进调用栈 在这里插入图片描述发现这里 有个getlist 点进去看看
在这里插入图片描述这里有个sign 我们继续看
在这里插入图片描述sign是通过把时间戳当参数 生成的 继续
在这里插入图片描述可以发现这个this.m.b就是加密函数
我们进这个函数看看
在这里插入图片描述
这里又是把 时间戳 拼接上 一个固定字符串str_test当作参数给另一个函数经过一系列加密
既然已经知道参数是什么,这里就没有必要还原算法了,直接调用他这个b函数就行

把js代码保存到本地

在这里插入图片描述
用python调下函数 试试 看看有没有坑

在这里插入图片描述发现是一样的。
那么sign的解密就完了

接下来试试模拟下请求

在这里插入图片描述然后发现 什么鬼 我不是已经带了sign去请求吗 怎么还是说没有sign

。。。

接着分析下请求

在这里插入图片描述
这里请求头里面还有一个sign
接着继续吧。。。

直接搜索这个参数吧
在这里插入图片描述然后发现这里生成了这个sign
在这里插入图片描述然后看看这个W.sign是什么 首先分析参数
在这里插入图片描述
在这里插入图片描述

第一个参数n是一个对象 其实就是我们post请求里面的参数
第二个参数是个字符串
直接搜索这个参数的值 在这里插入图片描述发现是个固定值
这里先不管 继续分析下W.sign函数
在这里插入图片描述
sign函数 里面发现 把第一个参数经过一系列转化成字符串赋值给n
然后再调用y函数,把n和t传进去再通过toString方法返回字符串

我们看下这个n

"method=serverless.function.runtime.invoke&params={"functionTarget":"getDetail","functionArgs":{"time":1652758341791,"sign":"AhI/AlaIAY2JAc+zAHVRAU","GoodsId":"100513782","platform":"ibox","timeType":"list10Min","v":"4","clientInfo":{"PLATFORM":"h5","OS":"windows","APPID":"__UNI__BF29E64","DEVICEID":"16526908775569593634","CLIENT_SDK_VERSION":"1.0.21","LOCALE":"zh-Hans"}}}&spaceId=04f58204-a7de-4dc2-8197-8d63c873a510&timestamp=1652759013657&token=8790cb4d-ef7d-4865-99ed-d6d8b2b4a117"

其实就是把这个对象里面通过&符号拼接成字符串
那看下这个t参数
在这里插入图片描述还是之前那个固定字符串 没变

接下来看下 y这个函数

在这里插入图片描述
一进来 吓一跳 这是什么?怎么还new了下?萌新到这里 应该已经蒙了 这tm啥啊
不急 这里有个关键字 HMAC

HMAC是个加密算法
不妨猜测下 使用的HMAC加密 key就是那个固定字符串 观察发现它的长度是32位那么很有可能是md5
我们用python模拟下

import hashlib
import hmac

key = 'HPa3a69OmRrLM7E8nFpUqw=='.encode()
text = 'method=serverless.function.runtime.invoke&params={"functionTarget":"getDetail","functionArgs":{"time":1652758341791,"sign":"AhI/AlaIAY2JAc+zAHVRAU","GoodsId":"100513782","platform":"ibox","timeType":"list10Min","v":"4","clientInfo":{"PLATFORM":"h5","OS":"windows","APPID":"__UNI__BF29E64","DEVICEID":"16526908775569593634","CLIENT_SDK_VERSION":"1.0.21","LOCALE":"zh-Hans"}}}&spaceId=04f58204-a7de-4dc2-8197-8d63c873a510&timestamp=1652759013657&token=8790cb4d-ef7d-4865-99ed-d6d8b2b4a117'.encode()
mac = hmac.new(key, text, hashlib.md5)
mac.digest()
s=mac.hexdigest()
print(s)

在这里插入图片描述
在这里插入图片描述
然后发现 果然就是这个值
完事

总结:此网站还是有一点点难度,需要点小技巧
,如果不熟悉HMAC加密的话 那就会绕进那个算法里面,那将是非常痛苦的。。。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值