独家揭秘:X系列算法如何破解某站签名加密之谜

admin 2024年11月8日11:21:19评论5 views字数 2793阅读9分18秒阅读模式
大家好,我是TheWeiJun,欢迎来到我的公众号。在互联网安全日益重要的今天,签名算法成为保护网络请求的关键手段。某些平台会通过复杂的算法对请求签名,以确保数据的完整性和安全性。然而,还原这些签名算法是一项颇具挑战的任务。本文将深入剖析某站X系列算法签名的加密机制,向读者展示逆向分析过程中使用的技术和工具,并提供详尽的步骤与示例代码,帮助大家更清晰地理解和掌握请求签名加密的原理与应用。
特别声明:本公众号文章只作为学术研究,不作为其他不法用途;如有侵权请联系作者删除。
独家揭秘:X系列算法如何破解某站签名加密之谜

立即加星标

独家揭秘:X系列算法如何破解某站签名加密之谜

每月看好文

 目录
一、前言介绍
二、网站分析
三、逆向分析
四、算法还原
五、思路总结
独家揭秘:X系列算法如何破解某站签名加密之谜

一、前言介绍

大家是否好奇,当我们访问一些知名网站时,为什么即使只是简单的请求,它们依然能识别并校验请求的合法性?在这背后,签名算法发挥了关键作用。这些算法会对请求参数进行复杂的加密处理,通过加密参数和密钥验证用户的请求来源,从而确保数据的完整性和安全性。看似简单的参数签名,却蕴含着深奥的算法逻辑。本文将带大家深入了解某站的X系列签名算法,还原这一加密过程的神秘面纱,一步步揭示它的工作原理,探索它如何保障数据的安全性。让我们一同踏上这个解密之旅,揭开签名算法的技术奥秘吧!

二、网站分析

1、从浏览器打开某站进行访问,通过浏览器DevTools工具中的Network进行请求抓包,截图如下:

独家揭秘:X系列算法如何破解某站签名加密之谜

2、通过Fetch/XHR选项过滤无用请求包,我们可以直接定位到search接口;然后点击搜索接口,直接定位到我们本次需要还原的签名算法,截图如下:

独家揭秘:X系列算法如何破解某站签名加密之谜

总结:网站的分析环节到此告一段落,我们已成功定位到需要还原的加密参数。接下来,我们将进入下一步——“逆向分析”,正式开始破解这一加密算法。

三、逆向分析

1、在逆向分析之前,我们先对签名算法进行简单分析。以往经验来看,有一点像base64编码(eyJwYW比较熟悉)。为了验证我们的猜想,将签名进行base64解码后截图如下:

独家揭秘:X系列算法如何破解某站签名加密之谜

总结:what?什么情况,前半部分还有模有样,后半部分是什么鬼?看来还是猜对了一半,确实有一部分是base64编码。为了彻底解决这个加密参数,接下来,我们还是进行逆向分析吧。

2、这次直接使用堆栈进行回溯,查找加密参数是如何生成的,堆栈回溯过程分析如下:

独家揭秘:X系列算法如何破解某站签名加密之谜

3、经过堆栈分析,通过断点调试后定位到加密位置,截图如下所示:

独家揭秘:X系列算法如何破解某站签名加密之谜

4、这个地方的r就是我们想要还原的签名x-bk-token,结合js代码,进行简单分析如下:

  • r参数由k和.和S参数字符串拼接而且

  • k参数为hmacsha256加密,这里的key如何生成的,未知(s参数)

  • S参数为base64编码,这也就是开头可以看到一部分明文的原因

总结:我们要想全部还原这个签名算法,必须知道k参数的key是如何生成的,msg经常调试是不变的,接下里进入hmac的key加密定位环节。

5、继续追溯js堆栈,经过调试分析最终确定加密位置如下图所示:

独家揭秘:X系列算法如何破解某站签名加密之谜

总结:到这里,我们已经成功定位了所有加密参数的JS代码。接下来,我们将进入Python算法分析环节,深入剖析这些参数的加密逻辑!

四、算法还原

1、首先对S参数进行算法还原,编写完整代码如下:

def get_request_signature(keyword, visit_time):    q_keyword = quote(keyword)    request_info = {        "pageUrl": f"/search?enc=utf8&word={q_keyword}",        "expireTime": int(visit_time)    }    request_json = json.dumps(request_info, separators=(',', ':'))    request_signature = base64url_encode(request_json.encode('utf-8'))    return request_signature

2、将刚刚编码后的代码同网页中的签名进行一起输出对比,截图如下:

独家揭秘:X系列算法如何破解某站签名加密之谜

3、可以看到base64部分完全一致,接下来分析hmac部分,代码如下:

def get_hmac_signature(keyword, page_token):    # 这里假设page_token已经还原    q_keyword = quote(keyword)    hmac_input = f"/lemma/api/searchenc=utf8&word={q_keyword}"    hmac_key = hmac_sha256(page_token, hmac_input)    hmac_signature = base64url_encode(hmac_key)    return hmac_signature

4、将刚刚加密后的代码同网页中的签名进行一起输出对比,截图如下:

独家揭秘:X系列算法如何破解某站签名加密之谜

总结:这个时候进行两部分参数拼接,就是完整的token签名,但是page_token是如何生成的呢?这也是这个加密算法最难的一部分,接下来我们用python进行算法还原。

5、编辑x-page-token加密算法,经过多次改版后,最后实现纯python版本流程,完整代码如下:

独家揭秘:X系列算法如何破解某站签名加密之谜

总结:x-page-token算法的生成依赖meta_content和visit_time参数,而这两个参数都可以通过网页端进行xpath提取,这部分我们就直接忽略了。编辑完整代码后,我们进行请求体发包,看到response截图如下,这次逆向分析过程到这里就圆满结束了。

独家揭秘:X系列算法如何破解某站签名加密之谜

这次逆向分析过程到这里就圆满结束,可以向目标发起请求了;但需要注意,逆向过程中访问过快可能会导致IP被封禁发生,为了避免这一问题需要使用代理ip来解决,于是我白嫖了6个小时“青果网络”的代理IP,效果真不错!它的纯净ip池和极速的响应模式(<1秒)极大地满足了我在逆向分析中的需求,关键试用期间不限次数,感兴趣的可以去试用下:

独家揭秘:X系列算法如何破解某站签名加密之谜

五、思路总结

本篇分享到这里就结束了,感谢大家的阅读和支持。如果你对爬虫逆向分析、验证码破解及其他技术话题感兴趣,记得关注我的公众号,不错过下一期的更新。我们将继续深入探讨各种技术细节和实用技巧,一起探索数字世界的奥秘。期待与你在下期文章中再见,一起学习,一起进步!☀️☀️✌️

往期推荐

Scrapy爬虫运行全流程深度剖析,让你轻松掌握高效爬取技巧!

非HTTP验证码别乱捅!一不小心就反爬了。

Scrapy结合MongoDB源码重构,打磨完美指纹存储机制!

用Scrapy爬取5秒盾站点,结果万万没想到,速度可以这么快!

某云滑块验证码别乱捅!一不小心就反爬了。

独家揭秘:X系列算法如何破解某站签名加密之谜

如果想要获得更多精彩内容可以关注我朋友:

独家揭秘:X系列算法如何破解某站签名加密之谜

END

独家揭秘:X系列算法如何破解某站签名加密之谜

作者简介

我是TheWeiJun有着执着的追求,信奉终身成长,不定义自己,热爱技术但不拘泥于技术,爱好分享,喜欢读书和乐于结交朋友,欢迎扫我微信与我交朋友💕

原文始发于微信公众号(逆向与爬虫的故事):独家揭秘:X系列算法如何破解某站签名加密之谜

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年11月8日11:21:19
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   独家揭秘:X系列算法如何破解某站签名加密之谜https://cn-sec.com/archives/3372329.html

发表评论

匿名网友 填写信息