之前说过工作中近几个月遇到了好多个白盒AES,正好手上现在在做的也有白盒,但是他是js的,正好看看
公司在跑的代码,就不放出来了,而且太简单了
加密代码:
加密代码主要只有下面几行
下面是运行到此的变量赋值情况
e 是明文四个单位切片分组后的一个小组,其他几个数组都是固定的
for 循环可以很明显的看到
var s = this._nRounds, f = 1; s > f; f++
this._nRounds 前面固定赋值了10,代表最大轮数,那么 f 就代表了轮数,而且这里s > f,没有等号,没有进行最后一轮循环
那么循环结束后的运算就是最后一轮加密,这个for 循环结束的地方实际上就是我们DFA攻击的地方
简直不要太easy~
DFA攻击:
DFA攻击白盒主要是在最后一轮前修改sate,问题来了,我在循环里没看到有sate数组。。。。
直到最后的赋值前,e数组的值都没有变,那几个大数组的值,也没有变
e[t] = g, e[t + 1] = b, e[t + 2] = m, e[t + 3] = h
运算唯一变了的,只有 g, b, m, h 这几个变量的值,循环里一直在不断得对这几个值运算、重新赋值
最后将这几个参数回填给了e,那就攻击这几个参数
if (f === this._nRounds-1) { const faultIndex = getRandomInt(0, 3); const faultValue = getRandomInt(0, 255); if (faultIndex === 0) l ^= faultValue; if (faultIndex === 1) p ^= faultValue; if (faultIndex === 2) d ^= faultValue; if (faultIndex === 3) h ^= faultValue; }
直接跑一百轮尝尝咸淡
同样的将故障文导入 phoenixAES
aes_keyschedule 跑出初始key
检验一下
总体走下来感觉web端的强度比安卓端小好多,嘎嘎ez
原文始发于微信公众号(逆向成长日记):web白盒AES
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论