上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

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

[复制链接]
  • TA的每日心情

    2022-8-15 10:58
  • 签到天数: 1 天

    [LV.1]初来乍到

    9

    主题

    80

    回帖

    88

    积分

    初级工程师

    积分
    88

    新人报道油中3周年挑战者 lv1

    发表于 2022-9-17 22:48:21 | 显示全部楼层 | 阅读模式

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

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

    使用工具:FD。

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

    首先,我们打开平台,打开FD,抓取两个请求。分别如下:
    image.png
    image.png
    可以看到,经过两个请求对比,发现有三处不同,分别是:
    1.nonce
    2.timestamp
    3.signature
    如果我们重发请求,会得到如下返回。
    image.png
    而正确的返回是:
    image.png
    很明显,我们需要解决的就是以上删除不同。

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

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

    第三部分,验证是否正确

    打开FD抓包一下:
    image.png
    可以看到数值是对应的。image.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

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

  • TA的每日心情
    开心
    2023-5-8 00:09
  • 签到天数: 149 天

    [LV.7]常住居民III

    0

    主题

    12

    回帖

    79

    积分

    初级工程师

    积分
    79

    新人报道油中2周年

    发表于 2022-9-21 10:43:12 | 显示全部楼层
    感觉很厉害的样子啊
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表