type
status
date
slug
summary
tags
category
icon
password
😀
这是很早就想复现的一道题目,现在找到一个完整的时间可以将其好好复现一下,并且熟悉一下白盒AES的算法,最近发现AES在一些应用中的使用有点频繁。这个题目含有白盒AES和RC4,TEA这些加密算法以及反序列化数据恢复
根据查壳发现这是一个C#编写的程序,所以直接拉到dnSpy中查看具体逻辑
notion image
其中的一些函数方法我已经将其重命名了,可以发现他是先进行长度检验,然后一个白盒AES,然后是RC4,接下来对一个文件进行读写

1、白盒AES

白盒AES格式:

这个是C#编写的白盒AES的代码,这显而易见就是查表AES,因为我们可以看到他是从v11,v12,v13中去取值,然后去得到他的key
何为白盒AES,他与正常的AES又有什么不同,以我看来:白盒AES其实就是对key进行了隐藏,使得我们不能像普通的AES去找他的key去解密程序,对于这种对AESkey进行隐藏的,我们也有方法去解决它,那就是差分故障攻击,简单来说就是去修改他的最后二轮的密文,因为最后一轮是没有列混淆的,所以修改倒数第二轮的密文就会发生4字节的错误,我们可以得到16个这样的错误密文,然后就可以通过数学的方法进行解密,得到他的初始key
下面具体来看一下解决方法:

差分故障攻击:

右键编辑方法修改代码,C#可以直接修改代码
notion image
 
notion image
 
就是这样,在第9轮的时候去修改key值,然后修改16次,每次修改他的下标和值然和得到16组正确的值
这里我键入0123456789012345
得到正确的key密文是 40D2B369CDDE8B1FA4199E0D175415A0
然后通过差分故障法得到16个值,可以发现每次都会修改4个字节的数据,这说明我们插入的时机是正确的

phoenixAES求轮密钥

接下来就是我们使用数学方法的时候,使用python的一个解白盒AES的库得到最后一轮扩展密钥
使用pip install phoenixAES进行安装
notion image
将这个hex转换为字符就是最后一轮密钥扩展的
接下里使用

stark求key

进行密钥恢复:
'/home/xiaowaaa/Desktop/Stark-master/aes_keyschedule' EA9F6BE2DF5C358495648BEAB9FCFF81 10
格式是 应用+最后一轮密钥+轮数
notion image
 
得到初始密钥:
51574232303233486170707947616D65
把他转化成字符
QWB2023HappyGame
解AES:
接下来就直接解AES
这里的密文从ILSPy获得,记住要将未修改的代码放入才能显示
notion image
 
解出的值就是RC4的key:
WelcomeToQWB2023

RC4解密:

可以发现他把License.dat文件进行了RC4加密,所以进行RC4解密,他是对称密码,直接解
得到新的dat文件,010打开看看:
notion image

TEA解密:

调用了FFF函数,这个未改名之前是TEA函数,解一下TEA得到:
接下来就是我们调试函数,去查看dat文件有什么作用:

反序列化数据恢复:

notion image
修改一下代码,使其不再进行RC4加密:
notion image
发现有异常,是我们的dat文件出现了问题
我们需要进行修补,因为他缺少东西:
 
notion image
修改之后再进行运行:
notion image
 
 

🤗 总结归纳

复现这道题主要是为了复习一下加密算法的学习

📎 参考文章

 
攻防世界reverse_box题解—记录gdb限制脚本的编写与使用PE文件结构
Loading...