unity韩 发表于 2022-9-17 22:48:21

《逆向》NFT数藏-某平台的Signature 加密数据

概述:我们在抓提前包的时候,经常会遇到服务器对于数值进行加密处理,或者说对服务器的请求有一个加密。通常为sign签名加密,或者是其他的一些加密,像是简单的md5呀,等等。

##### 那么今天就是分享对一个平台抢购的提前包中signature加密数据。

## 使用工具:FD。

# **第一部分,找到加密数值。**

首先,我们打开平台,打开FD,抓取两个请求。分别如下:
!(data/attachment/forum/202209/17/215530fhhhf8ihv44vuv4z.png)
!(data/attachment/forum/202209/17/215628qanni4id4dnwzaky.png)
可以看到,经过两个请求对比,发现有三处不同,分别是:
1.nonce
2.timestamp
3.signature
如果我们重发请求,会得到如下返回。
!(data/attachment/forum/202209/17/215821uoldezf4oevooec4.png)
而正确的返回是:
!(data/attachment/forum/202209/17/215838ehq1wwoh1ocqochq.png)
很明显,我们需要解决的就是以上删除不同。

# **第二部分,分析加密数值。**

首先,我们知道timestamp是一个时间戳,这个随便百度一下就知道是啥了,略过。
接着,我们看这个nonce。直接在浏览器下方搜索。
!(data/attachment/forum/202209/17/222051kqbn0an47nyuza00.png)
可以看到他是一个函数方法,RW(!1,16,0) 我们单击一下它,就自动跳转到该方法所在的位置。!(data/attachment/forum/202209/17/222228oml8zt2xxqt8p8v0.png)
我们在这里下一个断点。因为我们点击购买的时候,需要这个数值,那么肯定就需要调用这个方法,所以肯定是可以断到的。
所以点击购买,可以看到断到该方法了,同时把鼠标放在RW这个方法名上,自动弹出信息框,点击js,跳转到实现该方法所在的位置。!(data/attachment/forum/202209/17/222515vdpctkncnfk60u0t.png)
因为我们需要对这个方法进行分析,所以自然的在实现该方法的末尾位置打一个断点,让js执行这个方法,!(data/attachment/forum/202209/17/222637kkifhhfic74s9k10.png)
运行后,然后的o的值,就是该nonce的值,!(data/attachment/forum/202209/17/222712kikol9qppk6wkirq.png)
我们在控制台多次运行RW(!1,16,0)这个方法,发现他是随机生成的16位字符串。!(data/attachment/forum/202209/17/222823sygqfgjgq29yjqc5.png)因为是客户端随机生成的,所以服务器肯定没有验证。那么这个东西肯定还会用到。
接下来分析signature。还是老方法控制台搜索signature:!(data/attachment/forum/202209/17/223016vl9xf2fhirxknzri.png)
继续点击他,看跳转到哪里。!(data/attachment/forum/202209/17/223035izuyu3lo5ueu6y5p.png)
那么我们继续在这两个地方断点,运行js断到该处。可以看到这里有一个加密算法
!(data/attachment/forum/202209/17/223547ur7wc0606mi99kay.png)
该方法为HmacSHA256,公钥为:“e6087a37c50453ac262df54fcc12c66446d369887a37ae39d95b5ad0bd85279d”
那么对是对什么数值进行加密呢?我们看到有一个s.join(“&”)。我们在控制台输出一下:
!(data/attachment/forum/202209/17/223721kjj1gojjdtuu2c24.png)
“nonce=96MPdYadb3AFMjJc&platform=H5&timestamp=1663425192854&token=eyJUeXBlIjoiSnd0IiwidHlwIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiJTQUFTIiwianNvbkRhdGEiOiJ7XCJsb2dpblR5cGVcIjoxLFwidHlwZVwiOjMsXCJ1c2VySWRcIjpcIjEwNjAxMTEwMzMyOTE2NjkwNjQwOTY1XCIsXCJ0ZW5hbnRJZFwiOlwiMTA2MTAwMTAwMDAwMDVcIn0iLCJleHAiOjE2NjQwMTk2OTB9.ITSCsBGhPPDy7PQlsCwPstmAnj14KW9laEqp0CB\_2co”
很明显它是由nonce platform timestamp 还有token 拼接而成的字符串。至此,我们知道了他是怎么进行加密的。首先对上述字符串进行HmacSHA256加密,公钥为:“e6087a37c50453ac262df54fcc12c66446d369887a37ae39d95b5ad0bd85279d”
编码为Base64。
那么距离signature就差一个方法Mw。我们继续跟进看看他是什么。
!(data/attachment/forum/202209/17/223128e8081mit0f180i8h.png)
继续点击实现Mw(r)方法所在的位置。!(data/attachment/forum/202209/17/223201w5gks4z6217cjzgl.png)
可以看到他是一个字符换替换。写法为lambda表达式。这里打印一下e
!(data/attachment/forum/202209/17/224121cdc9clb295flcvkc.png)
在用我们的在线加密工具,测试一下。
!(data/attachment/forum/202209/17/224153xmknxw56k2f5mkas.png)
可以看到是完全一致的。但是不要漏掉一个小细节,我们还需要对该数值进行最后的数值替换。
e.replace(/+/g, "-").replace(///g, "\_").replace(/=/g, "") ,也就是这行代码
!(data/attachment/forum/202209/17/224309ubpjx6rzcyvtgayy.png)
最后得到:kQEWT2c97S6k4OSXBM96CwmapLlZgHj01HJ6gHaH7yE

# **第三部分,验证是否正确**

打开FD抓包一下:
!(data/attachment/forum/202209/17/224423c8fwv9m4u5m6xaod.png)
可以看到数值是对应的。!(data/attachment/forum/202209/17/224438d6vu5mvo56vt0yuo.png)但是最后由于我演示需要时间,所以服务器那边还是判断错误了。如果是代码应该是没问题的。

某平台加密:nonce=vqVAIq7XX1Sc9iG3&platform=H5&timestamp=1663417947899&token=eyJUeXBlIjoiSnd0IiwidHlwIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJzdWIiOiJTQUFTIiwianNvbkRhdGEiOiJ7XCJsb2dpblR5cGVcIjoxLFwidHlwZVwiOjMsXCJ1c2VySWRcIjpcIjEwNjAxMTEwMzMyOTE2NjkwNjQwOTY1XCIsXCJ0ZW5hbnRJZFwiOlwiMTA2MTAwMTAwMDAwMDVcIn0iLCJleHAiOjE2NjQwMTk2OTB9.ITSCsBGhPPDy7PQlsCwPstmAnj14KW9laEqp0CB\_2cononce为随机的字符。
加密方法为:HmacSHA-256
编码方式为:Base64
密钥为:e6087a37c50453ac262df54fcc12c66446d369887a37ae39d95b5ad0bd85279d对结果进行正则替换:e.replace(/+/g, "-").replace(///g, "\_").replace(/=/g, "")

测试网站:https://www.mklab.cn/utils/hmac

结果:1cxEVNuQGIYgd3ambsHUrsGFfU8oBZ79HnE0q87RBdk

# 谢谢大家,有什么不足的,欢迎大家指正!****

yyds8 发表于 2022-9-21 10:43:12

感觉很厉害的样子啊
页: [1]
查看完整版本: 《逆向》NFT数藏-某平台的Signature 加密数据