AES加密

什么是aes加密

AES加密,即高级加密标准(Advanced Encryption Standard)加密,是一种对称密钥加密算法,广泛应用于现代密码学中

AES加密的特点如下:

  • 对称密钥:加密和解密过程使用相同的密钥。因此,密钥的安全性至关重要。

  • 密钥长度:AES支持128位、192位和256位三种密钥长度,安全性随密钥长度的增加而增加。

  • 分组长度:AES加密算法对数据进行分组,每个分组固定为128位(16字节)。

  • 加密过程:包括多轮(轮数与密钥长度有关,如AES-128需要10轮,AES-192需要12轮,AES-256需要14轮)的加密操作。每轮操作包括四个步骤:SubBytes(字节替换)、ShiftRows(行移位)、MixColumns(列混淆,最后一轮除外)和AddRoundKey(轮密钥加)

代码实现

这里直接使用乌鸦师傅的aes加密代码:https://cloud.tencent.com/developer/article/1939317,我将aes加密的函数封装在一个静态链接库项目里,再添加了密钥生成函数和shellcode数组转字符串函数,一共有四个函数

//AES加密
string EncryptionAES(const string& strSrc, const char* g_key, const char* g_iv);

//AES解密
string DecryptionAES(const string& strSrc, const char* g_key, const char* g_iv);

//生成随机密钥
string random_string(size_t length);

//将char类型的shellcode转换成string类型的
string toHexString(unsigned char* data, size_t len);

Shellcode_AesEncrypt.cpp对shellcode进行Aes加密

Shellcode_AesDecrypt.cpp用来解密shellcode并加载,此处还调用了lazy_importer库的函数:https://github.com/JustasMasiulis/lazy_importer,此库实现动态调用系统api函数, 只需在函数前面添加(LI_FN), 若此函数的某个参数需填NULL, 那么需要改成nullptr

运行测试

给aes加密项目添加引用,选择Shellcode加密库

image-20230516154853419

修改项目属性,在附加包含目录处添加上Shellcode加密库项目的路径

image-20230516155107883

使用Shellcode_AesEncryption.cpp进行加密, 随后控制台输出key值、iv值、以及加密后的shellcode

image-20230515195113865

打开Shellcode_AesDecrypt.cpp,填写上述生成的值, 随后生成可执行文件

image-20230515195404012

将生成的可执行文件放到火绒和360里测试,没有发现报毒

image-20230515201325408 image-20230515201541815

上传至VirusTotal检查,只有四个报毒,免杀效果还是可以的

image-20230516154122994

最后更新于