找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

3262

积分

0

好友

451

主题
发表于 11 小时前 | 查看: 1| 回复: 0

观鸟平台记录查询界面截图

在分析某个观鸟平台的数据接口时,发现其通信过程经过了多重加密处理。本文将通过一次完整的实战,拆解其请求与响应数据的加密逻辑。

1. 网络抓包分析

首先通过浏览器开发者工具进行抓包,发现核心数据接口为:https://api.birdreport.cn/front/record/activity/search

该请求存在明显的加密特征:

  1. 请求头包含三处加密参数
    • requestId
    • sign (疑似MD5)
    • timestamp (时间戳)

请求头加密参数截图

  1. POST请求的表单数据被整体加密,为一长串密文。

表单数据加密截图

  1. 服务器返回的响应数据同样被加密data字段为一串无法直接识别的字符串。

响应数据加密截图

面对这种“全方位”的加密,常见的思路是寻找其共同的加密入口。在Web前端中,JSON.stringify 常被用于将数据对象转换为字符串以便加密,因此我们可以从这里入手设置断点。

2. 逆向分析加密逻辑

2.1 Hook 关键函数定位加密点

为了拦截并分析数据转换过程,我们向浏览器控制台注入一段 Hook JSON.stringify 的代码。

(function() {
    var stringify = JSON.stringify;
    JSON.stringify = function(params) {
        console.log('Hook JSON.stringify ——> ', params);
        debugger;
        return stringify(params);
    };
})();

注入代码后,在网页上进行翻页操作触发数据请求,代码会自动断住。

Hook JSON.stringify 触发断点

在调试器中查看调用堆栈(Call Stack),逐步向上一个栈帧追溯,即可找到网站自身的加密代码逻辑。

通过调用堆栈定位加密函数

2.2 解析请求参数生成逻辑

在加密函数内部,我们可以清晰地看到三个请求头参数的生成方式:

  • requestId: 由一个名为 getUuid() 的函数生成。
    requestId生成逻辑
  • sign: 由 MD5(e + d + c) 计算得出,其中 e, d, c 为特定变量。
    sign生成逻辑
  • timestamp: 由 Date.parse(new Date()) 生成,即当前时间戳。
    timestamp生成逻辑

2.3 解析请求体(表单)加密逻辑

继续分析代码,发现请求体(表单数据)的加密使用了非对称加密。代码中实例化了一个 JSEncrypt 对象,并通过 setPublicKey 方法设置了RSA公钥。随后,使用 encryptUnicodeLong 方法对参数 e(经过处理的请求参数JSON字符串)进行加密,最终赋值给 b.data

请求体RSA加密逻辑

2.4 解析响应数据解密逻辑

请求的加密分析清楚后,接下来需要破解返回数据的解密方式。我们采用同样的思路, Hook JSON.parse 方法。

(function() {
    var parse = JSON.parse;
    JSON.parse = function(params) {
        console.log('Hook JSON.parse ——> ', params);
        debugger;
        return parse(params);
    };
})();

触发断点后,我们成功拦截到了待解析的密文字符串。

Hook JSON.parse 拦截响应密文

顺着调用栈回溯,很快找到了负责解密的函数入口。

定位响应数据解密函数

进入该函数详细分析,确认其使用了 AES 算法进行解密,并找到了关键的密钥(Key)和初始化向量(IV)。

AES解密逻辑代码

3. 代码还原与实现

分析清楚所有加密解密流程后,下一步就是将关键的JavaScript代码“扣”下来,并在本地Node.js环境中补全其依赖的辅助函数(如 getUuid, sort_ASCII 等),进行复现。

本地Node.js还原加密参数生成

成功复现后,便能够生成有效的加密请求参数,并解密服务器返回的数据。

AES解密函数还原

最终,我们能够获取到明文的观鸟活动记录数据,其格式如下所示:

解密后的JSON格式数据

总结

本次逆向分析过程展示了一个典型的前后端交互加密场景:请求使用RSA加密敏感参数并附加MD5签名,响应使用A加密保护核心数据。通过系统性地运用抓包、Hook关键函数、调试追踪等技术手段,可以层层剥开加密外壳,理解其设计逻辑。这类分析对于学习前端安全机制、进行合规的安全测试具有重要意义。如果你对更多安全技术实操感兴趣,欢迎在云栈社区交流探讨。




上一篇:英伟达黄仁勋:AI基建投入合理,计算范式已根本改变
下一篇:PHP Webshell 免杀构造:5种绕过检测的恶意函数获取方法
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-2-10 18:07 , Processed in 0.386069 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

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