【24-09-02】 小H书X-s算法还原

【摸鱼–1】小H书X-s算法还原

摸鱼还原xhs X-s算法,之前核心是3des据说更新之后换到了AES算法。本文介绍一种取巧获取AES密钥的方法。

补环境实现

个人习惯使用nodejs配合chrome devtools调试,所以先简单的补充一下环境。xhs补充环境的文章很多随意找一个粘贴Proxy稍微补充一下环境,能跑出和浏览器抓包类似的结果就行。

简单总结补充的环境如下:

  1. window:[window, sdt_source_init, external]
  2. document: [createelement, documentElement, cookie, querySelectorAll]
  3. navigator: [appCodeName, appName, platform, userAgent, webdriver, cookieEnabled]
  4. localStorage: [getItem]
  5. location: [host]

大概就是上面这些简单的环境,然后运行:
在这里插入图片描述
如上图能大概得到差不多结果即可。

算法分析

因为去年分析过3des算法,所以这里省略前面输入参数计算md5以及拼接x1,x2,x3,x4等等,直接介绍取巧获取aes加密密钥的方式。

  1. 从上面补环境的脚本开始单步调试寻找有助于分析的日志断点,这里只是粗略查找了一个地方,凑合分析,如果有更精确到运算步骤的位置欢迎评论。
    在这里插入图片描述
    这里选择这个位置对o1 和 o2 进行输出,虽然缺少中间过程,但是可以看出部分逻辑,例如前面md5以及最后base64的踪迹,最关键的是可以看到aes加密过程中10轮运行的规律和iv计算的过程这部分和X音X-Argus AES部分只能说是一模一样。
  2. 取巧的方案则是实用dfa的方式得到第10轮轮钥,通过工具aesschedule还原每一轮的密钥,第一轮密钥则是初始密钥,此方法多用于白盒AES分析。
  3. 通过日志信息在代码中添加判断进入第9轮结果,接着每次随机修改第9轮结果一个字节收集数据,使用phoenixAES计算第10轮密钥。没修改一个字节应该会造成最后结果发生4字节变化,详细细节网上案例很多。
    在这里插入图片描述
  4. aes每组计算数据16字节,所以将第9轮结果挨个修改一个字节后就可以了,之所以可以这样做,是因为第一组数据是x1=md5Result,只要不修改输入数据那么aes第一组输入就是固定的,日志中一共计算了10轮也可以确定密钥的长度,并且输入数据也有和iv异或,可以确定算法是AES-128-CBC,但是初始向量是随每一组结果变化的。

测试

拿到密钥之后基本上所有算法就都明确了,写个python脚本随便测试一个接口。
在这里插入图片描述

总结

还是需要定位到能够输出计算的细节,本文使用dfa过于取巧,不具有普遍性。欢迎大佬评论能看到计算过程的断点位置。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值