web白盒AES

admin 2024年12月18日13:01:30评论8 views字数 999阅读3分19秒阅读模式

    之前说过工作中近几个月遇到了好多个白盒AES,正好手上现在在做的也有白盒,但是他是js的,正好看看

    公司在跑的代码,就不放出来了,而且太简单了

加密代码:

    加密代码主要只有下面几行

web白盒AES

    下面是运行到此的变量赋值情况

web白盒AES  

    e 是明文四个单位切片分组后的一个小组,其他几个数组都是固定的

    for 循环可以很明显的看到

var s = this._nRounds, f = 1; s > f; f++

    this._nRounds 前面固定赋值了10,代表最大轮数,那么 f 就代表了轮数,而且这里s > f,没有等号,没有进行最后一轮循环

    那么循环结束后的运算就是最后一轮加密,这个for 循环结束的地方实际上就是我们DFA攻击的地方

    简直不要太easy~

DFA攻击:

    DFA攻击白盒主要是在最后一轮前修改sate,问题来了,我在循环里没看到有sate数组。。。。

web白盒AES  

    直到最后的赋值前,e数组的值都没有变,那几个大数组的值,也没有变

                  e[t] = g,                  e[t + 1] = b,                  e[t + 2] = m,                  e[t + 3] = h

    运算唯一变了的,只有 g, b, m, h 这几个变量的值,循环里一直在不断得对这几个值运算、重新赋值

web白盒AES
    可以看到只在最后将运算后的值赋值回了明文数组,那么这个e就当成sate数组
web白盒AES

最后将这几个参数回填给了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;                  }

直接跑一百轮尝尝咸淡

web白盒AES

同样的将故障文导入 phoenixAES

web白盒AES

aes_keyschedule 跑出初始key

web白盒AES

检验一下

web白盒AES

总体走下来感觉web端的强度比安卓端小好多,嘎嘎ez

原文始发于微信公众号(逆向成长日记):web白盒AES

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月18日13:01:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   web白盒AEShttps://cn-sec.com/archives/3522915.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息