`

《Windows API巡礼》--CreateRemoteThread和WriteProcessMemory

 
阅读更多

CreateRemoteThread函数用于为指定进程创建线程,该线程将会在其他进程的地址空间中执行,访问其他进程的资源:

HANDLE WINAPI CreateRemoteThread(

__in HANDLE hProcess, //需要为其创建线程的目标进程句柄,该目标进程需要具有如下权限:

//PROCESS_CREATE_THREADPROCESS_QUERY_INFORMATION

//PROCESS_VM_OPERATIONPROCESS_VM_WRITEPROCESS_VM_READ

__in LPSECURITY_ATTRIBUTES lpThreadAttributes, //指向安全描述符的指针,NULL为默认

__in SIZE_T dwStackSize, //线程堆栈大小,0表示使用默认值

__in LPTHREAD_START_ROUTINE lpStartAddress, //函数指针,指向存在与目标进程中的线程函数

__in LPVOID lpParameter, //传给线程函数的参数

__in DWORD dwCreationFlags, //0---线程创建后立即运行;

//CREATE_SUSPENDED---线程创建后挂起,知道ResumeThread函数调用才开始运行;

//STACK_SIZE_PARAM_IS_A_RESERVATION---dwStackSize参数指定初始保留的堆栈大小

//不指定该标志时,dwStackSize表示提交的大小(commit size

__out LPDWORD lpThreadId //指向存放线程ID的缓冲区的指针,为NULL表示不保存线程ID

);

返回值:

成功时,返回新线程的句柄;

失败时,返回NULL

WriteProcessMemory函数用于将数据写入到目标进程的虚拟地址空间中:

BOOL WINAPI WriteProcessMemory(

__in HANDLE hProcess, //目标进程句柄,操作进程需要有目标进程的PROCESS_VM_WRITE

//PROCESS_VM_OPERATION权限

__in LPVOID lpBaseAddress, //写入数据的地址,目标进程虚拟地址空间中的地址

__in LPCVOID lpBuffer, //指向需要写入的数据

__in SIZE_T nSize, //写入数据的字节大小

__out SIZE_T *lpNumberOfBytesWritten //用于保存实际写入的数据的大小

);

返回值:

成功时,返回非零值;

失败时,返回零值。

实例代码:直接将远程进程地址空间中的API函数LoadLibraryW作为线程函数调用:

#include <windows.h>

/***********************************************************

* 功能:通过创建远程线程给其他进程加载DLL

* 参数:dwProcessId--目标进程PID

* lpszLibName--DLL的路径

* 返回值:是否成功

***********************************************************/

BOOL LoadRemoteDll(DWORD dwProcessId, LPTSTR lpszLibName)

{

BOOL bResult = FALSE;

HANDLE hProcess = NULL;

HANDLE hThread = NULL;

PTSTR pszLibFileRemote = NULL;

DWORD cch;

PTHREAD_START_ROUTINE pfnThreadRtn;

__try

{

//获得想要注入代码的进程的句柄

hProcess = OpenProcess(PROCESS_ALL_ACCESS,

FALSE, dwProcessId);

if(hProcess == NULL)

{

__leave;

}

//计算DLL路径名需要的字节数

cch = lstrlen(lpszLibName) + 1;

//在远程线程中为路径名分配空间

pszLibFileRemote = (PTSTR)VirtualAllocEx(

hProcess, NULL, cch,

MEM_COMMIT, PAGE_READWRITE);

if(pszLibFileRemote == NULL)

{

__leave;

}

//DLL的路径名复制到远程进程的内存空间

if(!WriteProcessMemory(hProcess,

(PVOID)pszLibFileRemote,

(PVOID)lpszLibName,

cch,

NULL))

{

__leave;

}

//获得LoadLibraryKernel32.dll中的真实地址

pfnThreadRtn = (PTHREAD_START_ROUTINE)GetProcAddress(

GetModuleHandle(TEXT("Kernel32")), TEXT("LoadLibraryW"));

if(pfnThreadRtn == NULL)

{

__leave;

}

//创建远程线程,并通过远程线程调用用户的DLL文件

hThread = CreateRemoteThread(hProcess, NULL,

0, pfnThreadRtn, (PVOID)pszLibFileRemote,

0, NULL);

if(hThread == NULL)

{

__leave;

}

//等待远程线程终止

WaitForSingleObject(hThread, INFINITE);

bResult = TRUE;

}

__finally

{

//关闭句柄

if(pszLibFileRemote != NULL)

{

VirtualFreeEx(hProcess, (PVOID)pszLibFileRemote, 0, MEM_RELEASE);

pszLibFileRemote = NULL;

}

if(hThread != NULL)

{

CloseHandle(hThread);

hThread = NULL;

}

if(hProcess != NULL)

{

CloseHandle(hProcess);

hProcess = NULL;

}

}

return bResult;

}

分享到:
评论

相关推荐

    WINDOWS API拦截技术

    DLL注入技术有多种,例如,SetWindowsHookEx()函数、CreateRemoteThread()函数和WriteProcessMemory()函数等。API Hooking技术则是通过修改目标进程的代码来实现API拦截的。 WINDOWS API拦截技术广泛应用于各个领域...

    Windows API监视程序

    Windows API(应用程序编程接口)是微软操作系统提供的一系列函数和过程,供开发者在编写应用程序时使用。这些API提供了操作系统的核心功能,包括文件操作、图形绘制、用户界面交互等。Windows API监视程序是一个...

    Windows程序设计-进程线程模块查看器

    Windows API提供了`CreateThread`和`CreateRemoteThread`函数用于创建线程,`GetThreadContext`和`SetThreadContext`用于获取和设置线程上下文,`SuspendThread`和`ResumeThread`用于暂停和恢复线程。 **模块** 在...

    CreateRemoteThread注入API函数代码

    在IT领域,尤其是在系统编程和逆向工程中,"CreateRemoteThread注入API函数代码"是一个重要的技术主题。这个过程涉及到操作系统级别的编程,主要用于在其他进程上下文中执行代码,通常是为了解决某些特定的需求,...

    CreateRemoteThread 使用,源代码例子,还有说明。

    `CreateRemoteThread`是Windows API中的一个重要函数,用于在另一个进程的上下文中创建一个新的线程。这个函数在系统级编程、进程间通信(IPC)以及安全审计等方面有广泛应用。下面,我们将深入探讨`...

    Windows API HOOK通用框架的实现论文

    DLL注入可以通过多种方式实现,如CreateRemoteThread、VirtualAllocEx等API,它们允许我们向远程进程写入和执行代码。 论文中提到了DLL文件加载模块,这一模块负责将钩子函数加载到目标进程中。这通常需要创建一个...

    监视exe调用了哪些api函数的vc++源码

    1. **Windows API**: 包括各种系统函数,如CreateProcess、OpenProcess、ReadProcessMemory、WriteProcessMemory等,这些API用于进程管理和内存操作,以实现监视目标exe。 2. **钩子技术**:通过设置钩子(Hook),...

    hook_delphi_remote_createremotethread_hook_

    CreateRemoteThread是Windows API中的一个关键函数,它允许程序在另一个进程的上下文中执行新线程。这个功能在多进程通信、调试、注入代码等场景下极其有用。当我们谈论"remote createremotethread hook",就是指...

    代码注入的三种方法

    本文将介绍三种方法: 1、Windows 钩子 2、CreateRemoteThread 和 LoadLibrary 技术 ——进程间通信 3、CreateRemoteThread 和WriteProcessMemory 技术 ——如何用该技术子类化远程控件 ——何时使用该技术

    API Hook完全手册.doc

    API Hook是一种技术,用于拦截和控制其他程序对特定API(应用程序接口)的调用。它在软件开发、调试和安全领域中有广泛应用。本手册将详细阐述API Hook的基本原理和技术难点。 1. API Hook的实现难点: - **代码...

    VB 远线程注入技术

    在Windows操作系统环境下,这种技术利用了API函数来实现在一个进程(注入者)中创建的代码在另一个进程中(目标进程)运行。 远线程注入的基本步骤包括: 1. **获取目标进程信息**:首先,我们需要获取到目标进程...

    windows-DLL注入

    2. **定位DLL**:确定要注入的DLL在内存中的位置,这可以通过`VirtualAllocEx`和`WriteProcessMemory`函数实现。 3. **加载DLL**:新创建的线程执行`LoadLibrary`或`LoadLibraryEx`函数,使目标进程加载指定的DLL。 ...

    API Hook 源代码 vc ++

    API Hook是一种技术,用于在应用程序调用特定API(应用程序编程接口)时进行拦截,...理解并熟练运用API Hook技术,可以帮助开发者更好地控制和扩展Windows应用程序的行为,同时也能提升对系统级编程的理解和实践能力。

    Windows api dll 注入 简单例子 超详细注释

    以上就是Windows API DLL注入的基本流程和一个简单的示例。在实际应用中,需要注意安全性和兼容性问题,避免对目标进程造成意外影响。此外,DLL注入可能被用于恶意目的,因此在开发过程中应遵循合法和道德的编程原则...

    CreateRemoteThread DLL源码

    总之,“CreateRemoteThread DLL源码”涉及了C++和C#之间的跨语言交互、Windows API的使用,特别是DLL注入和远程线程创建,这些都是系统编程和逆向工程中的重要概念。理解和掌握这些技术对于提升系统级编程能力具有...

    windows-CODE注入(远程线程注入)

    1. **获取目标进程信息**:首先,我们需要知道目标进程的进程ID和模块基地址,这可以通过Windows API函数如`OpenProcess`和`EnumProcessModules`来实现。 2. **分配内存**:在目标进程中分配一段内存空间,通常使用...

    常用API,记住这些就可以搞定一般的windows程序了

    ### 常用API知识点详解 #### 一、OpenProcess函数 ...以上四个函数是Windows编程中非常重要的API,掌握它们对于实现进程间的交互、内存操作等功能至关重要。希望这些详细的知识点能够帮助你更好地理解和应用这些API。

    ff.rar_The Process_WriteProcessMemory_dll memory

    在这个上下文中,这些文件可能包含了实现WriteProcessMemory和DLL注入的代码逻辑。 总的来说,这个主题涵盖了Windows API中的核心内存操作技术,以及利用DLL进行进程间操作的方法。理解这些概念对于进行系统级编程...

    Winwdos 系统API 拦截

    在VC++中,可以利用CreateRemoteThread函数将DLL注入到目标进程,并通过WriteProcessMemory函数修改目标进程内存中的API地址。 在"HookSelf"这个项目中,很可能是一个用于自我API拦截的示例程序。它可能展示了如何...

    Windows-DLL-Injector:为x86和x64 Windows OS进程实现的C ++中的某些DLL注入技术

    在滥用情况下,它可以用于隐藏另一个进程中的恶意活动,并以某种方式绕过防病毒检测每个人都有其优点和缺点在这里,我们已经实现了5/7技术 CreateRemoteThread(通过windows.h通过Windows Win32 API) ...

Global site tag (gtag.js) - Google Analytics