远程线程注入(简单样例以及原理)

远程线程注入(简单样例以及原理)

注入的目标是将我们的代码注入到目标进程的地址空间中

注入通常可以根据注入的内容分为两种类型:

  1. shellcode注入
    :这种注入是将我们的代码直接注入到目标内存中,这就要保证我们的代码在贴到其他地址上后仍然能够正常执行
    :这种方式优点是不容易检测,因为他的特征并不明确,缺点也很明显就是代码比较麻烦也不容易维护
  2. 模块注入
    :模块注入的原理是通过在目标进程中创建一个新的线程让他帮我们执行loadlibrary的方式去加载一个新的模块到地址空间中
    优点就是这种代码很好写,并且不需要我们自己做重定位等pe文件的加载动作,缺点则是特征比较明显

我们今天通过一个简单的测试代码来了解一下模块注入的大体流程

  1. 找到目标进程
  2. 获取目标进程的handle
  3. 在目标进程的地址空间中写入我们要加载的模块的文件名
  4. 为目标进程创建新的线程

下面来看一下我们要注入的模块代码
这个模块中主要是创建了一个静态线程对象,循环打印内容

// pch.cpp: 与预编译标头对应的源文件#include "pch.h"
#include <stdio.h>DWORD WINAPI threadProc(LPVOID lpThreadParameter
) {for (size_t i = 0; i < 10; i++){printf("%d", i);Sleep(1000);}return 0;
}class MyClass
{
public:MyClass();~MyClass();private:HANDLE t = { 0 };
};MyClass::MyClass()
{DWORD threadid;t = CreateThread(NULL, 0, threadProc, NULL, 0, &threadid);
}MyClass::~MyClass()
{CloseHandle(t);
}static MyClass c;

然后是我们要注入的目标进程的代码
这个代码也很简单,就是循环打印

#include <Windows.h>
#include <stdio.h>int main() {//LoadLibrary(L"Dll1.dll");for (size_t i = 0; i < 1000; i++){printf("-------%d-------\n", i);Sleep(1000);}return 0;
}

然后是存放我们的注入动作的代码

int main() {UINT PID = 10744;// 这边可以通过tlhelp32或者psapi.dll提供的函数来找到pid//这边暂时不做提权,正常的话应该通过processtoken提权一下,可以查msdn上有详细说明HANDLE h = OpenProcess(PROCESS_ALL_ACCESS, FALSE, PID);const WCHAR* dllName = L"Dll1.dll";LPVOID addr = VirtualAllocEx(h, NULL, 0x100, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);if (addr == NULL) return -1;DWORD realBytes = 0;WriteProcessMemory(h, addr, dllName, MAX_PATH + 1, &realBytes);DWORD threadId;// 这边简单说一下,能够直接将loadlibrary函数作为线程的起始地址有三个原因// 1:loadlibrary这个函数是kernel32.dll中的基本所有的win32进程都会存在这个dll// 2:因为kernel32.dll这类的win32dll都是提前做了地址绑定并且imagebase都是在比较高的位置基本上不会触发重定位,// 所以在每个进程内的函数地址都是一样的// 3:可以发现loadlibrary的函数的声明结构跟createthread所需的函数结构是一样的所以可以直接用HANDLE hThread = CreateRemoteThread(h, NULL, 0, (LPTHREAD_START_ROUTINE)LoadLibrary, addr, 0, &threadId);if (hThread == NULL) return -1;WaitForSingleObject(hThread, -1);VirtualFreeEx(h, addr, NULL, MEM_RELEASE);CloseHandle(h);CloseHandle(hThread);system("pause");return 0;
}

接下来我们来看一下注入的效果
首先是没有注入的时候就是一直在打印
在这里插入图片描述
这是注入后的进程控制台打印效果:
在这里插入图片描述

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

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

相关文章

VBA技术资料MF44:VBA_把数据从剪贴板粘贴到Excel

【分享成果&#xff0c;随喜正能量】人皆知以食愈饥&#xff0c;莫知以学愈愚,生命中所有的不期而遇都是你努力的惊喜.人越纯粹&#xff0c;就越能感受到美。大江、大河、大海、大山、大自然&#xff0c;这些风景从来都不会受“属于谁”的污染&#xff0c;人人都感受到它们的美…

Linux内核学习(四)—— 系统调用(基于Linux 2.6内核)

在现代操作系统中&#xff0c;内核提供了用户进程与内核进行交互的一组接口&#xff0c;这些接口在应用程序和内核之间扮演了使者的角色。这些接口保证了系统的稳定可靠&#xff0c;避免应用程序肆意妄行。 一、与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中…

ModStartBlog v8.0.0 博客归档页面,部分组件升级

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场&#xff0c;后台一键快速安装会…

Harvard transformer NLP 模型 openNMT 简介入门

项目网址&#xff1a; OpenNMT - Open-Source Neural Machine Translation logo&#xff1a; 一&#xff0c;从应用的层面先跑通 Harvard transformer GitHub - harvardnlp/annotated-transformer: An annotated implementation of the Transformer paper. ​git clone https…

在思科(Cisco)路由器中使用 SNMP

什么是SNMP SNMP&#xff0c;称为简单网络管理协议&#xff0c;被发现可以解决具有复杂网络设备的复杂网络环境&#xff0c;SNMP 使用标准化协议来查询网络上的设备&#xff0c;为网络管理员提供保持网络环境稳定和远离停机所需的重要信息。 为什么要在思科设备中启用SNMP S…

使用docker-maven-plugin插件构建镜像并推送至私服Harbor

前言 如下所示&#xff0c;建议使用 Dockerfile Maven 插件&#xff0c;但该插件也停止维护更新了。因此先暂时使用docker-maven-plugin插件。 一、开启Docker服务器的远程访问 1.1 开启2375远程访问 默认的dokcer是不支持远程访问的&#xff0c;需要加点配置&#xff0c;开…

docker的资源控制及docker数据管理

目录 一.docker的资源控制 1.CPU 资源控制 1.1 资源控制工具 1.2 cgroups有四大功能 1.3 设置CPU使用率上限 1.4 进行CPU压力测试 1.5 设置50%的比例分配CPU使用时间上限 1.6 设置CPU资源占用比&#xff08;设置多个容器时才有效&#xff09; 1.6.1 两个容器测试cpu 2&…

使用python读Excel文件并写入另一个xls模版

效果如下&#xff1a; 原文件内容 转化后的内容 大致代码如下&#xff1a; 1. load_it.py #!/usr/bin/env python import re from datetime import datetime from io import BytesIO from pathlib import Path from typing import List, Unionfrom fastapi import HTTPExcep…

vue3组件多个根节点报错

打开扩展商店搜索下载 vetur 打开设置命令面板 搜索eslint 将下面的勾选取消

Maven之Servlet 版本问题

maven-archetype-webapp 骨架的 Servlet 版本问题 通过 maven-archetype-webapp 骨架去创建 java web 项目时&#xff0c;自动生成的 web.xml 配置文件所使用的 Servlet 的版本比较低&#xff08;2.3&#xff09;&#xff0c;而在低版本的 Servlet 中 EL 表达式默认是关闭的。…

计算机竞赛 python的搜索引擎系统设计与实现

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; python的搜索引擎系统设计与实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;5分创新点&#xff1a;3分 该项目较为新颖&#xff…

快速学会创建uni-app项目并了解pages.json文件

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 前言 创建 uni-app 项目 通过 HBuilderX 创建 pages.json pages style globalStyle tabBar 前言…