京东h5st逆向分析(一)

声明:本文章中所有内容仅供学习交流使用,不用于其他任何目的,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!

直接关键词定位搜索h5st

有15个,一个一个打上断点就好,

然后点击翻页

下面图片中的就是入口了

可以看到入口传了一个参数colorParamSign

这个可以往上追溯它里面的body用了一个sha256加密而成的

接下来单步调试点一下,进入了下图的一个js文件,可以看到从这里开始代码就混淆了

图片中打断点的地方就是h5st生成的地方了

单步进入,发现进入控制流了,这种时候我们就要找call或者apply了

在这个控制流找到对应的call关键字,打上断点这时就别单步了,不然点到手累

点击下图中的运行按钮,

看控制台,发现打印了一个字符串,这个字符串是用浏览器指纹生成出来,我直接写死了,感兴趣的可以自己下断点跟进去看,我这里就不跟进去了,这个字符串是构成h5st的一部分。

下面可以看到直接生成了h5st,这个控制流就只能看到这些信息了。

从日志可以看到h5st是在call 4这里生成的,接下来就要跟进去看了

当断点断到call 4的时候,跟进去

发先又到了一个控制流,老样子,找call

运行看控制台

发现生成 20250218201740774 这个是h5st的头部,这个是由前面的时间戳生成的,在它的下面,发现生成了一个32位的密文这个跟 20250218201740774 是有关系的,但不是由 20250218201740774直接生成的

这篇我们就先分析到这里

### 京东 H5ST 逆向分析技术与方法 H5ST(HTML5 Security Token)是京东在移动端和Web端用于保护接口安全的种机制。它通过加密参数、时间戳以及密钥等方式,确保接口请求的合法性与安全性。以下是对京东 H5ST 逆向分析的技术与方法的详细说明: #### 1. H5ST 的基本结构 H5ST 请求通常由头部和加密参数组成。头部部分包含时间戳生成的信息,而加密参数则通过特定算法对请求数据进行加密处理[^3]。例如: - 时间戳:`20250218201740774` 是由时间戳生成的头部信息。 - 加密参数:生成的 32 位密文与时间戳相关联,但并非直接由时间戳生成。 #### 2. 参数加密过程 加密参数的生成涉及多个步骤,其中包括对明文字符串进行字符编码转换,并结合特定的盐值进行计算[^4]。以下是具体过程: - **字符编码**:对要加密的字符串使用 `charCodeAt` 方法获取字符的 ASCII 编码值。 - **盐值生成**:从预定义的字符集 `nmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA-_9876543210zyxwvutsrqpo` 中提取对应的值。 - **拼接操作**:将生成的盐值与明文拼接,形成最终的加密参数。 #### 3. 身份验证与签名 在请求中,`body` 参数会经过 SHA-256 哈希算法处理,生成加密后的值 `r`。这个值会被附加到请求头中作为签名的部分[^2]。例如: ```javascript var s = "example_body_parameter"; var r = P(s); // P 函数实现 SHA-256 加密 ``` #### 4. 工具与方法 进行 H5ST 逆向分析时,可以借助以下工具和技术: - **抓包工具**:如 Fiddler 或 Charles,用于捕获和分析网络请求。 - **调试工具**:如 Chrome DevTools 或 Burp Suite,用于动态调试 JavaScript 代码。 - **逆向工程**:通过反编译前端代码或 APK 文件,找到加密逻辑的具体实现。 #### 5. 注意事项 逆向分析应仅限于学习与研究目的,不得用于任何商业或非法用途。否则可能引发法律风险和道德问题[^1]。 ### 示例代码 以下是个简单的示例,展示如何通过 JavaScript 实现类似的加密逻辑: ```javascript function generateSalt(str) { const charset = "nmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA-_9876543210zyxwvutsrqpo"; let salt = ""; for (let i = 0; i < str.length; i++) { const code = str.charCodeAt(i); salt += charset[code % charset.length]; } return salt; } function encryptBody(body) { const salt = generateSalt(body); return body + salt; // 拼接盐值与明文 } const body = "example_body"; const encryptedBody = encryptBody(body); console.log("Encrypted Body:", encryptedBody); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值