京东h5st逆向分析(二)

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

上次我们讲到了日志生成了32位密文,看到32位密文我们就要想到md5加密了,这是md5的一个特征

我们从结果7这里进去,看看具体加密

然后发现进入了VM,可以看到在拼接字符串,最后生成要加密的明文。拼了五个数,ts就是前面的时间戳成的了,fp和ai好像没变过,其他的就没怎么注意了

拿着这个值我们随便去一个加密网址看看或者直接js调加密库

发现和网址的加密不一样,可能是魔改md5了,那我们得进去看看细节了,重新断到

然后一步一步走,走到一个_setData的控制流,看这个名字还拿了明文,我们分析分析,找call

发现在call3这里要进入_setData1跟进去

找call下断点,发现在对字符串 charCodeAt,得到了一些数字,看到数字,我们就要想到符号操作

给有+ - * &%等地方下上断点

看日志发现就是对要加密的字符串进行charCodeAt,然后对进行计算的结果再从nmlkjihgfedcbaZYXWVUTSRQPONMLKJIHGFEDCBA-_9876543210zyxwvutsrqpo字符串取出对应的值,得到一个盐,然后和明文拼接

这里盐怎么算出来的各位就自己下断点找规律了

然后我们出来发现又加盐了,这回直接固定死

往下走,得到了md5的加密结果,因为可能是加盐导致前面的md5不正确,所以我们用加盐后的值进行md5加密看看有没有魔改

md5加密

发现没有魔改

于是我们第一步就完成了

往下走我们发现开始拼接字符串了用我们的md5和请求参数里面的内容

然后出现了跟上面md5加密一样的加盐方式

然后得到了64位密文,64位,可能是sha256,去加密网址试试

发现确实一样

到现在为止,划红线上面的部分我们都得到了,今天我们就先发现到这里

### 京东 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、付费专栏及课程。

余额充值