概述:我们在抓提前包的时候,经常会遇到服务器对于数值进行加密处理,或者说对服务器的请求有一个加密。通常为sign签名加密,或者是其他的一些加密,像是简单的md5呀,等等。
那么今天就是分享对一个平台抢购的提前包中signature加密数据。
使用工具:FD。
第一部分,找到加密数值。
首先,我们打开平台,打开FD,抓取两个请求。分别如下:


可以看到,经过两个请求对比,发现有三处不同,分别是:
1.nonce
2.timestamp
3.signature
如果我们重发请求,会得到如下返回。

而正确的返回是:

很明显,我们需要解决的就是以上删除不同。
第二部分,分析加密数值。
首先,我们知道timestamp是一个时间戳,这个随便百度一下就知道是啥了,略过。
接着,我们看这个nonce。直接在浏览器下方搜索。

可以看到他是一个函数方法,RW(!1,16,0) 我们单击一下它,就自动跳转到该方法所在的位置。
我们在这里下一个断点。因为我们点击购买的时候,需要这个数值,那么肯定就需要调用这个方法,所以肯定是可以断到的。
所以点击购买,可以看到断到该方法了,同时把鼠标放在RW这个方法名上,自动弹出信息框,点击js,跳转到实现该方法所在的位置。
因为我们需要对这个方法进行分析,所以自然的在实现该方法的末尾位置打一个断点,让js执行这个方法,
运行后,然后的o的值,就是该nonce的值,
我们在控制台多次运行RW(!1,16,0)这个方法,发现他是随机生成的16位字符串。
因为是客户端随机生成的,所以服务器肯定没有验证。那么这个东西肯定还会用到。
接下来分析signature。还是老方法控制台搜索signature:
继续点击他,看跳转到哪里。
那么我们继续在这两个地方断点,运行js断到该处。可以看到这里有一个加密算法

该方法为HmacSHA256,公钥为:“e6087a37c50453ac262df54fcc12c66446d369887a37ae39d95b5ad0bd85279d”
那么对是对什么数值进行加密呢?我们看到有一个s.join(“&”)。我们在控制台输出一下:

“nonce=96MPdYadb3AFMjJc&platform=H5×tamp=1663425192854&token=eyJUeXBlIjoiSnd0IiwidHlwIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiJTQUFTIiwianNvbkRhdGEiOiJ7XCJsb2dpblR5cGVcIjoxLFwidHlwZVwiOjMsXCJ1c2VySWRcIjpcIjEwNjAxMTEwMzMyOTE2NjkwNjQwOTY1XCIsXCJ0ZW5hbnRJZFwiOlwiMTA2MTAwMTAwMDAwMDVcIn0iLCJleHAiOjE2NjQwMTk2OTB9.ITSCsBGhPPDy7PQlsCwPstmAnj14KW9laEqp0CB_2co”
很明显它是由nonce platform timestamp 还有token 拼接而成的字符串。至此,我们知道了他是怎么进行加密的。首先对上述字符串进行HmacSHA256加密,公钥为:“e6087a37c50453ac262df54fcc12c66446d369887a37ae39d95b5ad0bd85279d”
编码为Base64。
那么距离signature就差一个方法Mw。我们继续跟进看看他是什么。

继续点击实现Mw(r)方法所在的位置。
可以看到他是一个字符换替换。写法为lambda表达式。这里打印一下e

在用我们的在线加密工具,测试一下。

可以看到是完全一致的。但是不要漏掉一个小细节,我们还需要对该数值进行最后的数值替换。
e.replace(/+/g, "-").replace(///g, "_").replace(/=/g, "") ,也就是这行代码

最后得到:kQEWT2c97S6k4OSXBM96CwmapLlZgHj01HJ6gHaH7yE
第三部分,验证是否正确
打开FD抓包一下:

可以看到数值是对应的。
但是最后由于我演示需要时间,所以服务器那边还是判断错误了。如果是代码应该是没问题的。
某平台加密:nonce=vqVAIq7XX1Sc9iG3&platform=H5×tamp=1663417947899&token=eyJUeXBlIjoiSnd0IiwidHlwIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiJTQUFTIiwianNvbkRhdGEiOiJ7XCJsb2dpblR5cGVcIjoxLFwidHlwZVwiOjMsXCJ1c2VySWRcIjpcIjEwNjAxMTEwMzMyOTE2NjkwNjQwOTY1XCIsXCJ0ZW5hbnRJZFwiOlwiMTA2MTAwMTAwMDAwMDVcIn0iLCJleHAiOjE2NjQwMTk2OTB9.ITSCsBGhPPDy7PQlsCwPstmAnj14KW9laEqp0CB_2cononce为随机的字符。
加密方法为:HmacSHA-256
编码方式为:Base64
密钥为:e6087a37c50453ac262df54fcc12c66446d369887a37ae39d95b5ad0bd85279d对结果进行正则替换:e.replace(/+/g, "-").replace(///g, "_").replace(/=/g, "")
测试网站:https://www.mklab.cn/utils/hmac
结果:1cxEVNuQGIYgd3ambsHUrsGFfU8oBZ79HnE0q87RBdk
谢谢大家,有什么不足的,欢迎大家指正!****