下你所需,载你所想!
汇集开发技术源码资料

枚举进程句柄(支持32/64位进程)

:293.066KB :1 :2023-06-03 11:15:14

部分简介

以前的枚举只能支持32位进程,我封装了一下64的例程
用到了wow64_hook_3.02 模块。
.如果真 (X64_是否WOW64模式 () = 假 或 X64_是否64进程 (进程句柄) = 假 或 进程句柄 < 4 或 机器码字节集 = { } 或 取字节集长度 (机器码字节集) > 4048 或 X64_进程句柄到进程ID (进程句柄, ) < 4)
返回 (-1)
.如果真结束
.判断开始 (是否为空 (超时间隔))
超时间隔 = 8000
.判断 (超时间隔 ≤ 0)
超时间隔 = -1
.默认
.判断结束
局_申请内存指针 = X64_申请内存 (进程句柄, 0, 4096, 位或 (#MEM_COMMIT, #MEM_RESERVE), #PAGE_EXECUTE_READWRITE)
' *** 缩略程序块 ***
' '0000000000000000 | 48 83 EC 38 | sub rsp,0x38
' Machinecode = Machinecode + { 72, 131, 236, 56 }
' '0000000000000004 | E8 17 00 00 00 | call _转移
' Machinecode = Machinecode + { 232, 23, 0, 0, 0 }
' '0000000000000009 | 48 83 C4 38 | add rsp,0x38
' Machinecode = Machinecode + { 72, 131, 196, 56 }
' '000000000000000D | 48 89 05 DC 0F 00 00 | mov [rip+0xFDC],rax //4080
' Machinecode = Machinecode + { 72, 137, 5, 220, 15, 0, 0 }
' '0000000000000014 | C3 | ret
' Machinecode = Machinecode + { 195 }
' '0000000000000015 | 90 | nop
' Machinecode = Machinecode + { 144 }
' '0000000000000016 | 90 | nop
' Machinecode = Machinecode + { 144 }
' '0000000000000017 | 90 | nop
' Machinecode = Machinecode + { 144 }
' '0000000000000018 | 90 | nop
' Machinecode = Machinecode + { 144 }
' '0000000000000019 | 90 | nop
' Machinecode = Machinecode + { 144 }
' '000000000000001A | 90 | nop
' Machinecode = Machinecode + { 144 }
' '000000000000001B | 90 | nop
' Machinecode = Machinecode + { 144 }
' '000000000000001C | 90 | nop
' Machinecode = Machinecode + { 144 }
' '000000000000001D | 90 | nop
' Machinecode = Machinecode + { 144 }
' '000000000000001E | 90 | nop
' Machinecode = Machinecode + { 144 }
' '000000000000001F | 90 | nop
' Machinecode = Machinecode + { 144 }
局_穿插指令 = { 72, 131, 236, 56, 232, 23, 0, 0, 0, 72, 131, 196, 56, 72, 137, 5, 220, 15, 0, 0, 195, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144 } + 机器码字节集
.判断开始 (局_申请内存指针 < 65535)
返回 (-1)
.判断 (内存64_写字节集 (进程句柄, 局_申请内存指针, 局_穿插指令) = 0)
X64_释放内存 (进程句柄, 局_申请内存指针, 0, #MEM_RELEASE)
返回 (-1)
.默认
X64_创建远线程 (进程句柄, 0, 0, 0, 0, 0, 局_申请内存指针, 局_申请内存指针, 局_远线程句柄, 0)
.判断结束
.如果真 (局_远线程句柄 < 1)
X64_释放内存 (进程句柄, 局_申请内存指针, 0, #MEM_RELEASE)
返回 (-1)
.如果真结束
' 监测线程 按要求是必须等待线程结束的,否则提前释放内存会引起崩溃
' 258=等待超时,0=有信号线程已结束,-1出现错误
局部_Object = WaitForSingleObject (局_远线程句柄, 超时间隔)
' 关掉线程句柄,这里不关进程句柄,交给用户自己控制
X64_关闭句柄 (局_远线程句柄)
内存64_读长整数型 (进程句柄, ADD_64 (局_申请内存指针, 4080), 局_rax)
.判断开始 (局部_Object = 0) ' 如果是正常退出 就释放内存
X64_释放内存 (进程句柄, 局_申请内存指针, 0, #MEM_RELEASE)
.默认
返回 (-2) ' 返回超时
.判断结束
返回 (局_rax)

枚举进程句柄(支持32/64位进程)

热门推荐

相关文章