立即加星标
每月看好文
一、前言介绍
二、网站分析
1、从浏览器打开某站进行访问,通过浏览器DevTools工具中的Network进行请求抓包,截图如下:
2、通过Fetch/XHR选项过滤无用请求包,我们可以直接定位到search接口;然后点击搜索接口,直接定位到我们本次需要还原的签名算法,截图如下:
总结:网站的分析环节到此告一段落,我们已成功定位到需要还原的加密参数。接下来,我们将进入下一步——“逆向分析”,正式开始破解这一加密算法。
三、逆向分析
1、在逆向分析之前,我们先对签名算法进行简单分析。以往经验来看,有一点像base64编码(eyJwYW比较熟悉)。为了验证我们的猜想,将签名进行base64解码后截图如下:
总结:what?什么情况,前半部分还有模有样,后半部分是什么鬼?看来还是猜对了一半,确实有一部分是base64编码。为了彻底解决这个加密参数,接下来,我们还是进行逆向分析吧。
2、这次直接使用堆栈进行回溯,查找加密参数是如何生成的,堆栈回溯过程分析如下:
3、经过堆栈分析,通过断点调试后定位到加密位置,截图如下所示:
4、这个地方的r就是我们想要还原的签名x-bk-token,结合js代码,进行简单分析如下:
-
r参数由k和.和S参数字符串拼接而且
-
k参数为hmacsha256加密,这里的key如何生成的,未知(s参数)
-
S参数为base64编码,这也就是开头可以看到一部分明文的原因
总结:我们要想全部还原这个签名算法,必须知道k参数的key是如何生成的,msg经常调试是不变的,接下里进入hmac的key加密定位环节。
5、继续追溯js堆栈,经过调试分析最终确定加密位置如下图所示:
总结:到这里,我们已经成功定位了所有加密参数的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、将刚刚编码后的代码同网页中的签名进行一起输出对比,截图如下:
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、将刚刚加密后的代码同网页中的签名进行一起输出对比,截图如下:
总结:这个时候进行两部分参数拼接,就是完整的token签名,但是page_token是如何生成的呢?这也是这个加密算法最难的一部分,接下来我们用python进行算法还原。
5、编辑x-page-token加密算法,经过多次改版后,最后实现纯python版本流程,完整代码如下:
总结:x-page-token算法的生成依赖meta_content和visit_time参数,而这两个参数都可以通过网页端进行xpath提取,这部分我们就直接忽略了。编辑完整代码后,我们进行请求体发包,看到response截图如下,这次逆向分析过程到这里就圆满结束了。
这次逆向分析过程到这里就圆满结束,可以向目标发起请求了;但需要注意,逆向过程中访问过快可能会导致IP被封禁发生,为了避免这一问题需要使用代理ip来解决,于是我白嫖了6个小时“青果网络”的代理IP,效果真不错!它的纯净ip池和极速的响应模式(<1秒)极大地满足了我在逆向分析中的需求,关键试用期间不限次数,感兴趣的可以去试用下:
五、思路总结
本篇分享到这里就结束了,感谢大家的阅读和支持。如果你对爬虫逆向分析、验证码破解及其他技术话题感兴趣,记得关注我的公众号,不错过下一期的更新。我们将继续深入探讨各种技术细节和实用技巧,一起探索数字世界的奥秘。期待与你在下期文章中再见,一起学习,一起进步!☀️☀️✌️
往期推荐
Scrapy爬虫运行全流程深度剖析,让你轻松掌握高效爬取技巧!
非HTTP验证码别乱捅!一不小心就反爬了。
Scrapy结合MongoDB源码重构,打磨完美指纹存储机制!
用Scrapy爬取5秒盾站点,结果万万没想到,速度可以这么快!
某云滑块验证码别乱捅!一不小心就反爬了。
END
作者简介
原文始发于微信公众号(逆向与爬虫的故事):独家揭秘:X系列算法如何破解某站签名加密之谜
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论