判断加密算法特征----AES算法

前言

1.总感觉不去分析加密算法流程而直接判断加密算法有点不可靠,所以这篇打算结合加密算法和反汇编代码分析
2.加密算法种类繁多,暂时打算只针对每种加密模式分析一种加密算法,233

对称加密算法

对称加密算法特征

对称加密算法的加密密钥和解密密钥完全相同,其安全性主要依赖于两个因素:
1.加密算法足够强,基于密文本身去解密信息不可能,至少在有限时间内不可能
2.加密的安全性依赖于密钥的秘密性,而不是算法的保密性

和非对称加密算法比较

非对称加密算法(如摘要算法)是不可逆的,目的是对信息的一致性和完整性进行验证
对称加密算法是可逆的,目的是保护隐私信息不被泄露

AES加密算法

算法描述
AES算法根据密钥的长度分为以下三种
AES密钥长度(Nk个32位双字)分组长度(Nb个32位双字)轮数(Nr)
AES-1284410
AES-1926412
AES-2568414
从安全性来看,AES-256安全性最高
从性能来看,AES-128性能最高
加密流程

加密流程大致为
在这里插入图片描述
轮函数又由4部分组成

void SubBytes(); //字节代替
void ShiftRows(); //行移位
void MixColumns(); //列混淆
void AddRoundKey(); //加轮密钥
SubBytes()函数

也就是将输入的密文(处理成16位,相当于一个4x4的矩阵)在一个S-box中进行替换
反汇编代码中跟踪出来的操作如下
在这里插入图片描述
可见S-box在004082DC到004083DB处共256字节,这可以作为判断程序是否为AES加密以及编写注册机的参考位置

shiftRows()函数
行移位函数

在这里插入图片描述

MixColumns()函数
列混淆函数,可以看作是输入矩阵和一个修补矩阵相乘

在这里插入图片描述

AddRoundKey()函数

加轮密钥函数,其操作是将状态中的函数和轮密钥通过简单的异或运算相加,这也是唯一一个需要用到密钥的地方

在这里插入图片描述

小小结
虽然看起来每次运算量都很大,但是如果将除最后一轮运算以外的轮次合并,不难发现

请添加图片描述
请添加图片描述

总的来说,每一轮运算也只是四次查表和3次异或运算而已
下面进行实列分析

AES反汇编实列分析

首先,先是aes函数的初始化等操作的函数的查看

extern BOOL  aes_init(aes *,int,int,char *,char *);
extern void  aes_getreg(aes *,char *);
extern mr_unsign32 aes_encrypt(aes *,char *);
extern mr_unsign32 aes_decrypt(aes *,char *);
extern void  aes_reset(aes *,int,char *);
extern void  aes_end(aes *);

由上面的加密算法分析可知,写出注册机最重要的是
1.通过加密轮次确定加密的函数是哪种AES加密(至于判断是否为AES加密可以通过分析软件或者反汇编代码是否频繁查表替换操作以及对输入密钥是否有长度要求或者对其进行了密钥扩展操作
2.AES加密使用的是哪种模式

代码

在这里插入图片描述之所以判断call 004012F0处为MD5初始化是因为跟进后可见在这里插入图片描述
在之前文章说过这是判断MD5加密的特征之一
然后由MD5加密的特性可知,会产生一个128位的散列
再由AES_init函数(压栈顺序和对应参数顺序相反),可以跟踪到AES密钥,得到
在这里插入图片描述和原代码szkey数组一致
在这里插入图片描述

分析结束

小结

1.AES加密最重要的特征还是它的S-box,反汇编代码中很明显,而且容易定位
2.没有根据代码加密轮数判断属于哪种AES加密是由于需要到处跟进,有点混乱
3.写这种博客工作量还是挺大的233,所以很慢
4.都看到这里了不给个三连吗?0.0

  • 14
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖半仙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值