000nico/process-proxy-hijacking
GitHub: 000nico/process-proxy-hijacking
进程内存读写注入工具
Stars: 8 | Forks: 0
# 进程代理
## 概述
此项目将有效负载注入到进程中,以便它可以为我们读取和写入内存,
因此您可以在不打开或复制新句柄的情况下与内存进行工作。
## 使用方法:
- 使用 ```proxy::init(READ | WRITE, "Your target window", FALSE)``` 加载有效负载
- 使用 ```proxy::write(0x1234, 1337, sizeof(int))``` 和 ```proxy::read(0x1234, sizeof(float))``` 进行读取和写入
## 工作流程
- 启用调试权限
- 查找已经具有目标句柄的进程
- 定位句柄在内存中的存储位置
- 在目标进程中分配内存
- 注入有效负载 + shellcode
- 与有效负载通信以读取/写入内存
proxy::init
int proxy::init(ULONG accessMask, LPCSTR windowName, bool debug) 主入口点。执行完整链。 参数
accessMask: 我们正在寻找的权限windowName: 句柄应指向的窗口debug: true 或 false,取决于我们是否想看到程序正在做什么
1→ 成功2→ 启用 SeDebugPrivilege 失败3→ 找不到具有句柄的进程4→ 找不到句柄地址5→ 分配内存失败6→ 注入有效负载失败
proxy::enableSeDebugPrivilege
bool proxy::enableSeDebugPrivilege() 启用 SeDebugPrivilege 以允许与外部进程交互。 ###proxy::findProcessWithHandleint proxy::findProcessWithHandle( ULONG accessMask, LPCSTR windowName, DWORD* processPIDBuffer, HANDLE* duplicatedHandleBuffer, USHORT* originalHandleValue ) 查找已经具有目标窗口句柄的进程。 参数
accessMask: 设置您正在寻找的权限windowName: "Counter - Strike 2"processPIDBuffer: 指向将接收持有句柄的进程 PID 的 DWORD 的指针duplicatedHandleBuffer: 指向将接收复制句柄的 HANDLE 的指针(可选)originalHandleValue: 指向将接收原始句柄值的 USHORT 的指针
proxy::findAddressWithHandle
int proxy::findAddressWithHandle(
HANDLE handle,
DWORD pid,
uintptr_t* foundAtAddress,
LPCSTR windowName
)
在进程内存中搜索以找到句柄的存储位置。
参数
handle: 我们正在寻找的句柄pid: 我们正在搜索的进程的 PIDfoundAtAddress: 指向将包含句柄存储地址的 uintptr_t 的指针windowName: 句柄应指向的窗口
proxy::prepareCodeInjection
int proxy::prepareCodeInjection(
DWORD pid,
LPVOID* rShellCodeBaseAddress,
LPVOID* wShellCodeBaseAddress,
LPVOID* rBufferBaseAddress,
LPVOID* wBufferBaseAddress,
LPVOID* structBaseAddress
)
在目标进程中分配内存。
参数
pid: 拥有句柄的目标进程的 PIDrShellCodeBaseAddress: 将接收读取 shellcode 分配的基地址的指针wShellCodeBaseAddress: 将接收写入 shellcode 分配的基地址的指针rBufferBaseAddress: 将接收读取值存储的基地址的指针wBufferBaseAddress: 将接收要写入的值存储的基地址的指针structBaseAddress: 将接收有效负载结构存储的基地址的指针
payload::load
int payload::load(
DWORD pid,
uintptr_t readShellCodeBaseAddress,
uintptr_t handleAddress,
uintptr_t readBufferAddress,
uintptr_t structBaseAddress
)
将有效负载注入到目标进程中。
参数
pid: 拥有句柄的目标进程的 PIDreadShellCodeBaseAddress: shellcode 分配的地址handleAddress: 存储所需句柄的进程的地址readBufferAddress: 存储读取值的地址structBaseAddress: 有效负载结构分配的地址
- 使用未记录的 NT API(《NtQuerySystemInformation》)
- 需要 SeDebugPrivilege
- 假设目标窗口存在
- 不要用于您不拥有或没有分析权限的软件
标签:高性能