type
status
date
slug
summary
tags
category
icon
password
我们将dotdot.exe拖到dnspy里面分析一下
我们对函数逐个分析
BBB函数是对字符串的检验,长度为16
这个函数是基于查表法实现的AES,很明显他没有让你输入密钥的过程
那我们该如何对它进行分析呢,这个时候我们就要使用DFA 差分故障攻击的方法
什么是差分故障攻击呢,简单来说就是插入故障数据,然后导致最后生成密文改变,从而推导出最后一轮密钥
由于dnspy是可以直接在上面修改源码的,所以我们直接在上面修改源码,然后重新编译。
右键选择编辑方法,修改之后选择编辑,这个时候我们还不能调
需要保存模块,点击全部保存,它会将这些的修改全都保存在新的exe里面,默认是覆盖原文件,这里我选择默认
我们首先先来测试一下,没有插入故障数据的时候,第十轮的密文是什么样的
我们在进行最后一轮之前插入一个字节的故障数据,然后看密文是什么样子
我们发现有四个字节不一样,说明我们插入的地方是正确的,我们多记录几个数据aaa[index]=x,index和x的值是要发生变化的
然后这里有个非常好用的库,phoenixAES,可以帮我们恢复最后一轮的密钥
然后我们再用GitHub上面的starkhttps://github.com/SideChannelMarvels/Stark/blob/master/aes_keyschedule.c
自己生成exe
我们可以得到最初始的密钥
得到密钥是QWB2023HappyGame
然后我们解密AES
我们往下面分析,我们发现它经过字符串对比之后还有RC4加密,但是RC4同时也可以解密,然后我们可以先把License.dat给解密一下
我们把新生成的new.dat拖到010eidtor里面看一下
我们发现他调用了FFF方法
我们回到dnspy看FFF方法
发现是tea加密,然后加密的密钥就是我们的输入
然后我们还发现后面有比较的地方,密文在v28里面
但是由于程序经过了优化,所以我们在dnspy中无法看到v28的变量
我们需要去到ILspy里面查看v28,这里注意一定要用原程序进行查看
进行tea解密
然后我们还要去改一下程序
然后我们开始调试
发现有异常,是我们的dat文件出现了问题
这里贴一下出题人的样例代码
然后可以找到异常的位置
然后06,06 , 06,07是len
其实FFF函数这里也有提示,FFF的两个参数是string类型的,然后我们就是把刚才的两个的string,填进去
然后我们直接运行就行了
📎 参考文章
- Author:5m10v3
- URL:https://5m10v3.top/article/20a454f2-87f2-423b-9ff4-fb210c6334a7
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts