GHunt请求签名算法:解析Google服务认证的核心加密机制
【免费下载链接】GHunt 🕵️♂️ Offensive Google framework. 项目地址: https://gitcode.com/GitHub_Trending/gh/GHunt
认证痛点与解决方案
你是否在开发Google服务集成时遇到过API认证失败?是否对"SAPISIDHASH"和"client_sig"等参数感到困惑?本文将深入解析GHunt框架中实现的Google服务认证加密机制,帮助你理解请求签名的生成原理与应用方法。读完本文,你将能够:
- 掌握Google服务认证的核心参数作用
- 理解请求签名算法的实现逻辑
- 学会在实际场景中应用签名机制
签名算法核心组件
签名密钥存储结构
GHunt将Google服务的签名密钥集中存储在ghunt/knowledge/sig.py文件中,采用字典结构管理不同服务的签名值:
sigs = {
"com.google.android.play.games": "38918a453d07199354f8b19af05ec6562ced5788",
"com.google.android.apps.docs": "38918a453d07199354f8b19af05ec6562ced5788",
"com.android.vending": "38918a453d07199354f8b19af05ec6562ced5788",
"com.google.android.youtube": "24bb24c05e47e0aefa68a58a766179d9b613a600",
# 更多服务...
}
这些签名值是Google为不同应用分配的唯一标识符,用于验证请求来源的合法性。
API密钥管理
除签名密钥外,ghunt/knowledge/keys.py文件存储了各Google服务的API密钥信息:
keys = {
"pantheon": {"key": "AIzaSyCI-zsRP85UVOi0DjtiCwWBwQ1djDy741g", "origin": "https://console.cloud.google.com"},
"photos": {"key": "AIzaSyAa2odBewW-sPJu3jMORr0aNedh3YlkiQc", "origin": "https://photos.google.com"},
"apis_explorer": {"key": "AIzaSyAa8yy0GdcGPHdtD083HiGGx_S0vMPScDM", "origin": "https://explorer.apis.google.com"},
# 更多服务...
}
每个API密钥都与特定的服务域名绑定,确保请求来源的合法性验证。
签名算法实现流程
认证流程概述
GHunt的签名认证流程主要通过ghunt/helpers/auth.py实现,包含以下关键步骤:
Android应用认证实现
在ghunt/helpers/auth.py中,android_oauth_app函数实现了使用主令牌获取应用特定访问令牌的逻辑:
async def android_oauth_app(as_client: httpx.AsyncClient, master_token: str,
package_name: str, scopes: List[str]) -> Tuple[str, List[str], int]:
client_sig = get_package_sig(package_name) # 获取应用签名
data = {
"app": package_name,
"service": f"oauth2:{' '.join(scopes)}",
"client_sig": client_sig, # 使用签名密钥
"Token": master_token
}
req = await as_client.post("https://android.googleapis.com/auth", data=data)
# 处理响应...
该函数通过get_package_sig方法从ghunt/knowledge/sig.py中获取对应应用的签名值,确保请求的合法性。
实际应用场景
People API请求示例
ghunt/apis/peoplepa.py中的people_lookup方法展示了签名机制在实际API调用中的应用:
async def people_lookup(self, as_client: httpx.AsyncClient, email: str, params_template="just_gaia_id") -> Tuple[bool, Person]:
endpoint = EndpointConfig(
name = inspect.currentframe().f_code.co_name,
verb = "GET",
authentication_mode = "sapisidhash", # 使用SAPISIDHASH认证
require_key = "photos", # 指定使用photos API密钥
)
# Android OAuth配置
self.api_name = "people"
self.package_name = "com.google.android.gms" # 应用包名
self.scopes = [
"https://www.googleapis.com/auth/profile.agerange.read",
"https://www.googleapis.com/auth/contacts",
# 更多作用域...
]
# 加载端点配置并发送请求...
这段代码展示了如何将签名密钥、API密钥和认证模式结合使用,实现对Google People API的安全访问。
签名验证失败的常见原因
- 签名密钥不匹配:使用了错误的应用签名值
- API密钥与服务不匹配:请求的服务与提供的API密钥不对应
- 作用域权限不足:请求的权限超出了令牌的授权范围
- 令牌过期:OAuth令牌或主令牌已过期
总结与展望
GHunt框架通过ghunt/knowledge/sig.py和ghunt/helpers/auth.py等核心文件,实现了对Google服务认证机制的完整模拟。理解这一签名算法不仅有助于正确使用GHunt框架,也为开发其他Google服务集成工具提供了宝贵参考。
随着Google认证机制的不断更新,签名算法也需要持续演进。GHunt项目将继续跟踪最新的认证变化,为开发者提供稳定可靠的Google服务访问方案。
希望本文能帮助你更好地理解Google服务认证的核心加密机制。如果觉得有价值,请点赞收藏,关注项目更新获取更多技术解析。
【免费下载链接】GHunt 🕵️♂️ Offensive Google framework. 项目地址: https://gitcode.com/GitHub_Trending/gh/GHunt
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



