关于“代码远程线程注入”的核心代码分享

本文分享了代码远程线程注入技术的核心代码,通过注入本进程的二进制代码到远程进程中执行。重点在于利用ntdll库中的ZwCreateThreadEx函数,以穿透session0隔离注入系统进程。作者强调此技术仅用于学习交流,非法使用后果自负。
摘要由CSDN通过智能技术生成

前言:
  “代码远程线程注入”是实现将本进程的一段二进制代码注入到另一个远程进程中,在被注入进程中运行指定代码的技术。“代码远程线程注入”的核心代码非常简炼且逻辑惊艳,不管是对c语言的语法还是对编译器编译顺序的了解都有很大帮助,因为从该代码中就可以大致猜测出编译器的部分编译规则和PE文件数据的放置格式,其中关于c代码的巧妙应用也值得借鉴。
  本文章的目的重在分享代码,而不是分享总结,因为作者并没有系统学习过PE文件格式、编译器原理和系统安全等相关知识,自学的一点奇技淫巧纯粹用于平日消遣,有限的知识量并不允许我在文章中分享更为专业和有价值的总结,否则有误人子弟之嫌。如果出现描述错误欢迎指正。
  以下分享的程序代码参考自文章https://www.cnblogs.com/freesec/p/6554518.html并在修复了该文章部分代码错误的基础上做了一点改进,主要改进是调用了ntdll文件中微软公司留下的后门函数ZwCreateThreadEx,该函数用于替代CreateRemoteThread,她的优点是更接近底层,可以穿透session0隔离将代码注入到系统进程中。但是由于session0隔离,系统进程和用户进程不会直接通过窗口进行交互,可能无法使用弹出对话框的方式来验证注入系统进程是否成功。
*注:本代码仅供学习交流,如果将本代码用于非法途径,后果自负。(2018.12.20)

头文件以及参数声明:

#include <stdio.h>
#include<Windows.h>

//声明需要用到的函数
typedef HMODULE(WINAPI *lpLoadLibraryA)(char* filename);
typedef FARPROC(WINAPI *lpGetProcAddress)(HMODULE hModule, char* funcName);
typedef int(WINAPI *lpMessageBoxA)(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType);
#ifdef _WIN64
typedef DWORD(WINAPI *typedef_ZwCreateThreadEx)(
	 PHANDLE ThreadHandle,
	 ACCESS_MASK DesiredAccess,
	 LPVOID ObjectAttributes,
	 HANDLE ProcessHandle,
	 LPTHREAD_START_ROUTINE lpStartAddress,
	 LPVOID lpParameter,
	 ULONG CreateThreadFlags,
	 SIZE_T ZeroBits,
	 SIZE_T StackSize,
	 SIZE_T MaximumStackSize,
	 LPVOID pUnkown);
#else
typedef DWORD(WINAPI *typedef_ZwCreateThreadEx)(
	 PHANDLE ThreadHandle,
	 ACCESS_MASK DesiredAccess,
	 LPVOID ObjectAttributes,
	 HANDLE ProcessHandle,
	 LPTHREAD_START_ROUTINE lpStartAddress,
	 LPVOID lpParameter,
	 BOOL CreateSuspended,
	 DWORD dwStackSize,
	 DWORD dw1,
	 DWORD dw2,
	 LPVOID pUnkown
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值