关于逆向破解tb某个请求的加密算法

  • 关于逆向破解tb某个请求的加密算法已关闭评论
  • 37 次浏览
  • A+
所属分类:Web前端
摘要

由于工作需要,要抓取tb上某个接口的文案资源,用来分析借鉴。本来想着,无非就是验证一下当前用户信息之类的,但在研究过后,发现并没那么简单。


前言

由于工作需要,要抓取tb上某个接口的文案资源,用来分析借鉴。

本来想着,无非就是验证一下当前用户信息之类的,但在研究过后,发现并没那么简单。

1,查看请求相关参数

比如下图,发现请求中携带的参数不少,然后其中随时变化的就有t、sign、data,

很明显,这就是tb判断请求是否合法的参数,其中但凡修改一点,就会提示非法请求。

关于逆向破解tb某个请求的加密算法

2,开始查找处理加密的代码

既然大概猜到这些是加密参数,那就开始在js文件中查找sign,果不其然,找到这么一段,

很明显可以看出,sign参数就是由四个已有参数组成的字符串放入h()加密函数中生成的,

在断点查找后确认,d.token是存在 tb cookies中的某段标识,i 是实时生成的字符戳,g 就不必多说,

最后data中的一大段参数就得复制原有格式,再动态修改某些变量,比如分类id等等。

关于逆向破解tb某个请求的加密算法

3,尝试生成加密参数模拟请求

经过上面的研究,基本理清了这个加密参数的逻辑,至于加密函数h(),看不懂也没所谓,直接复制后拿来用,

根据原有代码照着找齐四个参数,然后送入加密函数,就能得到返回的sign参数,

拿齐参数后,就能开始模拟请求,拼凑url啦,除了上面看得见的参数,还有当前tb用户的cokies也要一并随着请求发出,

不然就会验证为非法请求哦,这里我用js实现了大概的逻辑代码,

另外还用上了获取token啊、生成某段字符、加密的函数,太长了我就不贴了。

let temp = (new Date).getTime()     , appKey = '12574478'     , token = this.getCookie("_m_h5_tk").split("_")[0]     , e = "v1-" + d() + "-" + String(Date.now() - 9)     ,     data = '{"curPageUrl":"https%3A%2F%2Fweb.m.taobao.com%2Fapp%2Ftb-windmill-app%2Fyouhaohuo%2Fhome%3Fbs%3D13","appId":"6696424","tab":' + this.value + ',"topic":"selected_crowd","tabId":' + this.value + ',"type":"selected_crowd","userId":"-1","params":"{\"v\":\"new\",\"resId\":\"6696424\",\"bizId\":\"2020\",\"pageNo\":1,\"type\":\"selected_crowd\",\"pageSize\":20,\"contentIds\":\"\",\"home_clickItemId\":\"\",\"tab\":' + this.value + ',\"tabId\":\"' + this.value + '\",\"clickedIds\":\"\",\"bizCode\":\"steins.goodItem\",\"src\":\"phone\",\"showAllCrowd\":true,\"preExposeItems\":\"\"}","resId":"6696424","backupParams":"tabId,type,userId","pvuuid":"' + e + '","__pvuuid":"' + e + '","_pvuuid":"' + e + '"}' if (this.value != '0') {     data = '{"curPageUrl":"https%3A%2F%2Fweb.m.taobao.com%2Fapp%2Ftb-windmill-app%2Fyouhaohuo%2Fhome","appId":"6696424","tab":"' + this.value + '","topic":"selected_crowd","tabId":"' + this.value + '","crowdId":"' + this.value + '","type":"selected_crowd","userId":"-1","params":"{\"v\":\"new\",\"resId\":\"6696424\",\"bizId\":\"2020\",\"pageNo\":1,\"type\":\"selected_crowd\",\"pageSize\":20,\"contentIds\":\"296620907314\",\"home_clickItemId\":\"\",\"tab\":\"' + this.value + '\",\"tabId\":\"0\",\"clickedIds\":\"\",\"bizCode\":\"steins.goodItem\",\"src\":\"phone\",\"showAllCrowd\":true,\"preExposeItems\":\"\",\"crowdId\":\"' + this.value + '\"}","resId":"6696424","backupParams":"tabId,type,crowdId,userId","pvuuid":"' + e + '","__pvuuid":"' + e + '","_pvuuid":"' + e + '"}' } let j = h(token + "&" + temp + "&" + appKey + "&" + data) data = encodeURIComponent(data) let page_url = 'https://h5api.m.taobao.com/h5/mtop.tmall.kangaroo.core.service.route.aldlampservicefixedres/1.0/?jsv=2.6.2&appKey=' + appKey + '&t=' + temp + '&sign=' + j + '&timeout=6000&api=mtop.tmall.kangaroo.core.service.route.AldLampServiceFixedRes&type=jsonp&params=%5Bobject%20Object%5D&dataType=jsonp&v=1.0&preventFallback=true&callback=mtopjsonp1&data=' + data axios.get(page_url)     .then(response => {         console.log(response)     })

总结

其实很多时候在遇到这种问题时,缺的只是一个思路,当思路打开后会发现,原来这加密参数也没多难啊😁