热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

DLL注入之CreateRemoteThread

0x00背景知识及测试环境了解C语言基本语法以及对WIN32编程有一定的了解,了解进程运行时的虚拟地址空间的概念,还要了解进程PID。本文的测试环境为VS2019(Debugx

0x00 背景知识及测试环境

了解C语言基本语法以及对WIN32编程有一定的了解,了解进程运行时的虚拟地址空间的概念,还要了解进程PID。
本文的测试环境为VS2019(Debug x86)+Windows XP (不知道什么原因win10上搞不了,等等在研究研究) 我还是太菜了。


0x01 主要用到的API

OpenProcess(); VirtualAllocEx();
WriteProcessMemory(); GetModuleHandle();
GetProcAddress(); CreateRemoteThread();

0x02 基本思路

1.获取目标进程句柄
2.在目标进程中开辟空间,将DLL路径写入
3.获取LoardLibrary() API地址
4.创建远程线程DLL注入


0x03 具体代码

声明所需的基本参数

LPCTSTR DllPath = "";
DWORD PID = ;

获得目标进程句柄

HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS,FALSE,PID);if (hProc == NULL) {printf("OpenProcess:%d\n", GetLastError());return 0;}

向目标进程中开辟空间并写入Dll文件路径

LPTSTR psLibFileRemote = NULL;psLibFileRemote = (LPTSTR)VirtualAllocEx(hProc,NULL,lstrlen(DllPath) + 1,MEM_COMMIT,PAGE_READWRITE);if (psLibFileRemote == NULL){printf("VirtualAllocEx:%d\n", GetLastError());return FALSE;}WriteProcessMemory(hProc, psLibFileRemote, (LPCVOID)DllPath, lstrlen(DllPath) + 1, NULL);

获取LoadLibrary的地址

HMODULE hMod = GetModuleHandle(TEXT("KERNEL32.dll"));
LPTHREAD_START_ROUTINE pfnStartAddr = (LPTHREAD_START_ROUTINE)GetProcAddress(hMod, "LoadLibraryW");

利用CreateRemoteThread函数创建远程线程

//CreateThreadThreadHANDLE hThread;if ((hThread = CreateRemoteThread(hProc,NULL,0,pfnStartAddr,psLibFileRemote,0,NULL)) == NULL){printf("Error");return FALSE;}

0x04 总结

看到网络上说RtlCreateUserThread是CreateRemoteThread的底层实现,下次在试一试,这个寒假学点算法,尝试逆向一下,BUUOJ的题目也要提上议程了。自己还是比较菜的,还有好多东西不懂,什么时候才能像大佬一样摸鱼呀


推荐阅读
  • 线程漫谈——线程基础
    本系列意在记录Windwos线程的相关知识点,包括线程基础、线程调度、线程同步、TLS、线程池等。进程与线程理解线程是至关重要的,每个进程至少有一个线程,进程是线程的容器,线程才是真正的执行体,线程必 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 主线:设计窗口类注册窗口类产生窗口显示窗口更新窗口消息循环(将消息路由到窗口中去处理)。APPMODUL.CPP源文件被编译链接进入项目,从APPMOD ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • UNIX高级环境编程 第11、12章 线程及其属性
    第11章线程11.2线程概念线程资源:线程ID,一组寄存器,栈,调度优先级和策略,信号屏蔽字,e ... [详细]
  • 浅解XXE与Portswigger Web Sec
    XXE与PortswiggerWebSec​相关链接:​博客园​安全脉搏​FreeBuf​XML的全称为XML外部实体注入,在学习的过程中发现有回显的XXE并不多,而 ... [详细]
  • Linux线程的同步和互斥
    目录1、线程的互斥2、可重入VS线程安全3、线程的同步1、线程的互斥 ... [详细]
  • 【BP靶场portswigger服务端10】XML外部实体注入(XXE注入)9个实验(全)
    前言:介绍:博主:网络安全领域狂热爱好者(承诺在CSDN永久无偿分享文章)。殊荣:CSDN网络安 ... [详细]
  • 作者一直强调的一个概念叫做oneloopperthread,撇开多线程不谈,本篇博文将学习,怎么将传统的IO复用pollepoll封装到C++类中。1.IO复用复习使用p ... [详细]
author-avatar
鐘彦璋864175
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有