U盘PE| w764位旗舰版下载 | U盘装win7系统 | U盘启动 |win7pe | win10下载 |加入收藏土豆PE官网U盘PE,U盘装win7系统,win7pe,U盘启动,U盘装系统,w764位旗舰版下载站!
当前位置:主页 > 帮助中心 > 帮助中心 >

Windows程序设计学习笔记——线程(三)线程注入

来源:http://www.tudoupe.com时间:2022-08-01

1.C语言创建了一个线程:

頭部文件process.h

使用:

运行结果:

2.C++11线程

C++11将多个线程引入标准库,无需使用 CreateThread函数创建线程

参考 thread::thread - C++ Reference

线程构造函数如下:

等待线程结束:

std::thread::join()         类型void join()

注意:不能直接调system("pause")因为thread对象是一个与线程相关的对象,存储线程相关信息,所以析构时会认为绑定的线程没有结束而抛出异常

未绑定的线程对象到创建的线程中:

std:: thread ::detach() typevoid detach()

thread头文件的this_thread命名空间提供了其他一些访问和操作线程的相关函数,参考 this_thread - C++ Reference

获取线程id:

sleep

chrono是C++的事件库,duration是与时间有关的对象,参考 <chrono> - C++ Reference

使用示例:

其他时间度量如下:

全球变量和调制函数可以分类如下

使用 std::thread的优点是它可以跨平台,所以代码也运行在Linux上

3.远程线程注入

远程线程注入是其他进程中创建我们的线程,我们的线程将载入线程注入过程

创建远程线程API:

与CreateThread函数相比只是多了第一个参数进程句柄,比较如下两个函数

我们可以发现这两个功能形式基本上是相同的,所以我们可以用LoadLibrary作为调用线程的功能,但是我们不能直接通过LoadLibrary作为参数给CreateThread,然而,这是由于系统DLL(如内核32)。所有进程的地址是相同的(可能在重新启动后改变),我们可以使用下列函数来获取 LoadLibrary函数地址

注: LoadLibrary实际上是LoadLibraryA和LoadLibraryW,对于分别的ANSI和Unicode代码,当您得到函数地址时,您需要根据在DLL文件名中存储的编码格式选择哪一个 LoadLibrary函数才能得到

另一个问题是,指针到DLL文件路径是本地进程,而不是远程进程,我们把它作为参数传递到远程线程上,将远程线程转向负载库,因为每个过程都有自己的独立的虚拟内存空间,因此 loadlibrary无法从远程线程传递的参数地址中找到DLL文件路径,并可能导致远程进程因非法访问而崩溃,所以我们需要在远程进程的地址空间中存储DLL路径字符串,windows提供了下列功能,以便在其他进程中打开内存空间:

从上面可以看出,我们用远程线程将DLL注入分为以下步骤:

1.在远程过程的地址空间中打开一个内存空间

2.把DLL的路径写入打开的内存

3.获取 LoadLibraryW或LoadLibraryW函数地址(通过内核32)。(dll)

4.为输入参数创建远程线程

5.释放内存

6.使用GetProcAddress来获取在Kernel32.Addresses中的FreeLibrary功能

创建一个远程线程调用FreeLibrary来释放我们的DLL

示例:

cpp:

dll:

在实例中,DLL被注射到anantconc中,成功注射将在DLL主接收DLL_PROCESS_ATTACH之后执行

运行结果:

Copyright © 2012-2014 Www.tudoupe.Com. 土豆启动 版权所有 意见建议:tdsky@tudoupe.com

土豆系统,土豆PE,win7系统下载,win7 64位旗舰版下载,u盘启动,u盘装系统,win10下载,win10正式版下载,win10 RTM正式版下载,win8下载,电脑蓝屏,IE11修复,网络受限,4K对齐,双系统,隐藏分区,系统安装不了,U盘装系统,笔记本装系统,台式机装系统,diskgenius运用,GHSOT装系统,U盘修复,U盘技巧,U盘速度,U盘不能格式化,U盘复制发生错误,U盘加密,U盘选购,开机黑屏,蓝屏,进不了系统,上不了网,打不开程序,点击无反应,系统设置,PE个性化,PE添加网络,PE维护系统

点击这里给我发消息