JS逆向入门案例-某查查网请求头-03

概要

提示:仅供学习,不得用做商业交易,如有侵权请及时联系!

逆向:某查查网

URL:aHR0cHM6Ly93d3cucWNjLmNvbS8=

目的:获取请求头参数(加密key和val)

在这里插入图片描述

整体架构流程

提示:分析-调试-猜想-实现-执行

1、首先登录进去,后随机搜索一个company名称,点击关注!
在这里插入图片描述

API接口
DQpodHRwczovL3d3dy5xY2MuY29tL2FwaS91c2VyL2FkZEZvbGxvd2luZ0xpc3Q=

2、多次请求发现该请求头参数的键和值都是变化的,所以我们通过XHR来进行断点,不断通过堆栈来分析设置改请求头参数的地方,点击关注触发!
在这里插入图片描述
3、开始往上跟栈,找到源头!我们发现下面有一个异步操作,而且还有关键词,f.request,看到这里我们猜一猜会不会是在异步中进行调度设置的。
在这里插入图片描述
4、重新触发,断住该点!
在这里插入图片描述
发现执行了这几个方法,那么我们可以在前俩个方法中尝试进行断点,为什么是前俩个呢?因为前面是请求后面肯定是响应。

5、断点进入前俩个方法中!
在这里插入图片描述
再进入o.default方法中
在这里插入图片描述
6、所以i变量作为了键l变量作为了值,开始分析这俩个变量的生成!
在这里插入图片描述

我们可以看出i变量是通过t和e.data参数进入a.default方法进行加密获取
t:api接口
e.data:请求体参数

进入a.default方法
在这里插入图片描述
我们再分俩段,先分析(0,a.default)(t)是什么,断点进入方法!
在这里插入图片描述

1、我们可以看到e为api接口转化为小写,t为e的俩次字符串拼接,而o.default为一个固定值:

	o.default = {
		codes:{0: 'W', 1: 'l', 2: 'k', 3: 'B', 4: 'Q', 5: 'g', 6: 'f', 7: 'i', 8: 'i', 9: 'r', 10: 'v', 11: '6', 12: 'A', 13: 'K', 14: 'N', 15: 'k', 16: '4', 17: 'L', 18: '1', 19: '8'},
		n:20
	}

2、对t进行遍历循环取出该字符对应的Unicode码点,然后对o.default.n进行取余数,最后将这个值去取codes中对于下标索引值,然后进行拼接!

	def getCodes(baseApi):
    codeList = {
        "0": "W",
        "1": "l",
        "2": "k",
        "3": "B",
        "4": "Q",
        "5": "g",
        "6": "f",
        "7": "i",
        "8": "i",
        "9": "r",
        "10": "v",
        "11": "6",
        "12": "A",
        "13": "K",
        "14": "N",
        "15": "k",
        "16": "4",
        "17": "L",
        "18": "1",
        "19": "8"
    }
    baseApi = baseApi.lower()
    tt = baseApi + baseApi
    codes = ''
    for k in tt:
        a = ord(k) % len(codeList)
        codes += codeList[f'{a}']
    return codes

第二段我们分析 (0,o.default)(t + n, (0,a.default)(t))

1、t + n:/api/user/addfollowinglist{“companykeyno”:“6e9104e7983f72a2178aa189a1ab8d54”}
2、(0,a.default)(t):iLAgiLklNiLWWk6ii68gvBigk4iLAgiLklNiLWWk6ii68gvBigk4

进入方法分析
在这里插入图片描述
开始验证我们的想法,找在线加密工具

URL:https://www.uutils.com/enc/
在这里插入图片描述
到这里最后i参数的值就为:api+请求表单转为字符串并为小写,api进行Unicode码取code,进行HmacSHA512加密,然后toLowerCase().substr(8, 20)得到结果。

	import hashlib
	import hmac
	def getHmacSha512(key,data):
	    hmac_obj = hmac.new(key.encode(), data.encode(), digestmod=hashlib.sha512).digest()
	    return hmac_obj.hex()

7、开始分析l参数的生成(0,r.default)(t, e.data, (0,s.default)())

1、(0,s.default)():就是访问首页获取得到的window.tid参数

在这里插入图片描述

2、其它俩个参数跟上一次加密的参数一致,进入方法内部!

在这里插入图片描述

3、我们发现i变量加密的参数除了多了一个window.tid参数,其它都一样,最终加密方法(0,o.default)(n + “pathString” + i + t, (0,a.default)(n))
n + “pathString” + i + t:为一个字符串拼接,值:/api/user/addfollowinglistpathString{“companykeyno”:“6e9104e7983f72a2178aa189a1ab8d54”}2727b92fa87a73d7fe2d4bef8324ea61
HmacSHA512加密的key是一样的为:iLAgiLklNiLWWk6ii68gvBigk4iLAgiLklNiLWWk6ii68gvBigk4

4、得到最终结果l

在这里插入图片描述
在这里插入图片描述
8、python代码实现

	import json
	import hashlib
	import hmac
	
	def getHmacSha512(key,data):
	    hmac_obj = hmac.new(key.encode(), data.encode(), digestmod=hashlib.sha512).digest()
	    return hmac_obj.hex()
	
	def getCodes(baseApi):
	    codeList = {
	        "0": "W",
	        "1": "l",
	        "2": "k",
	        "3": "B",
	        "4": "Q",
	        "5": "g",
	        "6": "f",
	        "7": "i",
	        "8": "i",
	        "9": "r",
	        "10": "v",
	        "11": "6",
	        "12": "A",
	        "13": "K",
	        "14": "N",
	        "15": "k",
	        "16": "4",
	        "17": "L",
	        "18": "1",
	        "19": "8"
	    }
	    baseApi = baseApi.lower()
	    tt = baseApi + baseApi
	    codes = ''
	    for k in tt:
	        a = ord(k) % len(codeList)
	        codes += codeList[f'{a}']
	    return codes
	
	def getHeaderKey(baseApi,data,tid):
	    dataStr = json.dumps(data,separators=(',',':')).lower()
	    arg1 = baseApi + dataStr
	    arg2 = getCodes(baseApi)
	    key = getHmacSha512(arg2,arg1).lower()[8:28]
	
	    arg3 = baseApi + "pathString" + dataStr + tid
	    arg4 = getCodes(baseApi)
	    val = getHmacSha512(arg4,arg3)
	
	    return key,val
	
	if __name__ == '__main__':
	    baseApi = "/api/user/addfollowinglist"
	    data = {
	        'companyKeyno':"6e9104e7983f72a2178aa189a1ab8d54"
	    }
	    tid = "2727b92fa87a73d7fe2d4bef8324ea61"
	    headerKey, headerVal = getHeaderKey(baseApi,data,tid)
	    print({headerKey:headerVal})

9、运行结果:
在这里插入图片描述

技术细节

提示:快速定位方式,猜想是何加密,验证猜想

例如:

  • o.then(l.shift(), l.shift())异步进行加密
  • 猜想HmacSHA512加密

小结

提示:HmacSHA512加密
学习交流群:v:wzwzwz0613拉进群

敬请期待下一篇,各位也可以提出一些需要逆向的网站,合适的话我也可以发出来学习交流,谢谢!!!

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值