首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >我在Android应用中发现硬编码的Facebook和Google API密钥(以及为什么这是个坏主意)

我在Android应用中发现硬编码的Facebook和Google API密钥(以及为什么这是个坏主意)

原创
作者头像
qife122
发布2025-07-27 18:22:16
发布2025-07-27 18:22:16
1640
举报

🔐 我在Android应用中发现硬编码的Facebook和Google API密钥(以及为什么这是个坏主意)

☕ 逆向分析APK很有趣...直到你发现生产环境密钥就这么赤裸裸地躺在代码里。

🧠 内容提要

在分析一个公开的Android APK时,我直接在应用的strings.xml文件中发现了硬编码的Facebook和Google API凭证。这些凭证包括Facebook App ID、Facebook Client Token、Google API Key等敏感标识符。此类暴露可能导致API调用仿冒、配额滥用等风险——仅需反编译APK即可实现。

本文将带您了解:

  • 🔍 发现过程
  • 🧪 有效性验证
  • 🔥 潜在影响
  • 🛡️ 防护方案

📦 第一步:反编译APK

使用Apktool进行反编译:

代码语言:java
复制
java -jar apktool.jar d target.apk -o output_folder -f

该命令将应用解包为可读的目录结构,可访问资源文件、清单和smali代码。

🔍 第二步:检查strings.xml

res/values/strings.xml中发现以下内容:

代码语言:xml
复制
<string name="facebook_app_id">47711************</string>
<string name="facebook_client_token">ab3495bb67f3e*******************</string>
<string name="google_api_key">AIzaSyCc6**********************</string>
<string name="google_crash_reporting_api_key">AIzaSyCc6**********************</string>
<string name="google_app_id">1:16327*******:android:d2f5************</string>
<string name="google_storage_bucket">[redacted].firebasestorage.app</string>

🧠 重要提醒:任何硬编码在strings.xml中的内容都会编译到最终APK,且可通过apktool、jadx甚至grep等工具轻松获取。

🧪 第三步:利用验证(仅限道德测试)

✅ Facebook凭证验证

通过Graph API测试凭证有效性:

代码语言:bash
复制
curl "https://graph.facebook.com/app?access_token=47711************|ab3495bb67f3e*******************"

返回结果证实该凭证有效,攻击者可仿冒应用发起Graph API调用。

✅ Google API密钥验证

尝试使用该密钥调用地理编码API:

代码语言:bash
复制
curl "https://maps.googleapis.com/maps/api/geocode/json?address=New+York&key=AIzaSyCc6**********************"

由于开发者已在Google Cloud Console设置访问限制,密钥虽暴露但未被滥用。

🛡️ 开发者防护建议

❌ 禁止做法:

代码语言:xml
复制
<string name="facebook_client_token">ab3495bb67f3e*******************</string>

✅ 正确做法:

  1. 将密钥存储在服务端
  2. 必须客户端使用时:
    • 通过HTTPS端点动态获取
    • 使用NDK混淆并存入Android Keystore
  3. 对于Google API密钥:
    • 按应用包名和SHA-1指纹限制
    • 仅开放必要API权限

🔐 核心原则:只要存在于APK中的内容,就不算秘密。

👨‍💻 给漏洞赏金猎人的建议

分析APK时务必:

  • 检查strings.xml、AndroidManifest.xml和.smali文件
  • 关注AIzafacebook_client_token等特征字符串
  • 道德验证密钥有效性
  • 负责任披露并脱敏公开报告

🧠 最终思考

这类漏洞看似简单却在生产环境中异常普遍。通过负责任地披露,您正在帮助提升应用安全性。如果您是开发者——请立即轮换密钥并检查构建流程。

🙌 披露声明:已通过正规渠道通知受影响企业,本文所有数据均已脱敏处理。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 🔐 我在Android应用中发现硬编码的Facebook和Google API密钥(以及为什么这是个坏主意)
    • 🧠 内容提要
    • 📦 第一步:反编译APK
    • 🔍 第二步:检查strings.xml
    • 🧪 第三步:利用验证(仅限道德测试)
      • ✅ Facebook凭证验证
      • ✅ Google API密钥验证
    • 🛡️ 开发者防护建议
    • 👨‍💻 给漏洞赏金猎人的建议
    • 🧠 最终思考
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档