.子程序 隱藏進程, 邏輯型, 公開
.參數 pid, 整數型, 可空, 空為隱藏本進程,可輸入其它進程PID
.局部變量 eprocess, 長整數型
.局部變量 hand, 整數型
.局部變量 temp, 字節集
.局部變量 fw_, 長整數型
.局部變量 bw_, 長整數型
.局部變量 fw, 字節集
.局部變量 bw, 字節集
.如果 (是否為空 (pid))
hand = OpenProcess (2075311, 0, GetCurrentProcessId ())
eprocess = 取進程EProcess (GetCurrentProcessId ())
CloseHandle (hand)
.否則
eprocess = 取進程EProcess (pid)
.如果結束
.如果真 (eprocess = 0)
返回 (假)
.如果真結束
temp = 讀物理內存 (eprocess + 136, 4)
.如果真 (temp = { })
返回 (假)
.如果真結束
fw_ = 取字節集數據 (temp, #長整數型, )
fw = temp
temp = 讀物理內存 (eprocess + 140, 4)
.如果真 (temp = { })
返回 (假)
.如果真結束
bw_ = 取字節集數據 (temp, #長整數型, )
bw = temp
.如果真 (寫物理內存 (fw_ + 4, bw) = -1)
返回 (假)
.如果真結束
.如果真 (寫物理內存 (bw_, fw) = -1)
返回 (假)
.如果真結束
返回 (真)
//讀物理內存
.版本 2
.子程序 讀物理內存, 字節集
.參數 地址, 長整數型
.參數 長度, 整數型, , <=4096
.局部變量 MEMORY_CHUNKS, 字節集
.局部變量 ret, 字節集
.局部變量 retlen, 整數型
ret = 取空白字節集 (長度)
MEMORY_CHUNKS = 取字節集左邊 (到字節集 (地址), 4) + 到字節集 (取指針_字節集 (ret, ret, 0)) + 到字節集 (長度)
NtSystemDebugControl (#SysDbgReadVirtualMemory, MEMORY_CHUNKS, 12, 0, 0, retlen) ' 12為MEMORY_CHUNKS的長度
.如果真 (retlen ≤ 0)
ret = { }
.如果真結束
返回 (ret)
//寫物理內存
.版本 2
.子程序 寫物理內存, 整數型
.參數 地址, 長整數型
.參數 數據, 字節集, , <=4096
.局部變量 MEMORY_CHUNKS, 字節集
.局部變量 ret, 整數型
.局部變量 retlen, 整數型
.局部變量 len, 整數型
len = 取字節集長度 (數據)
MEMORY_CHUNKS = 取字節集左邊 (到字節集 (地址), 4) + 到字節集 (取指針_字節集 (數據, 數據, 0)) + 到字節集 (len)
NtSystemDebugControl (#SysDbgWriteVirtualMemory, MEMORY_CHUNKS, 12, 0, 0, retlen) ' 12為MEMORY_CHUNKS的長度
.如果真 (retlen ≤ 0)
ret = -1
.如果真結束
返回 (ret)
//取進程EProcess
.版本 2
.子程序 取進程EProcess, 長整數型
.參數 pid, 整數型
.局部變量 ret
.局部變量 信息塊, 字節集
.局部變量 retlen
.局部變量 temp, SYSTEM_HANDLE_INFORMATION
.局部變量 信息塊指針偏移
.局部變量 number
.局部變量 結果, 長整數型
retlen = 1
.循環判斷首 ()
信息塊 = 取空白字節集 (retlen)
ret = ZwQuerySystemInformation (#system_handle_infomation, 信息塊, retlen, 0)
.如果 (ret = #STATUS_INFO_LENGTH_MISMATCH)
retlen = retlen × 2
信息塊 = 取空白字節集 (retlen)
.否則
跳出循環 ()
.如果結束
.循環判斷尾 (ret = #STATUS_INFO_LENGTH_MISMATCH)
信息塊指針偏移 = 取指針_字節集 (信息塊, 信息塊, 0)
RtlMoveMemory3 (number, 信息塊指針偏移, 4)
信息塊指針偏移 = 信息塊指針偏移 + 4
.計次循環首 (number, )
RtlMoveMemory2 (temp, 信息塊指針偏移, 16)
.如果真 (pid = temp.ProcessId 且 temp.ObjectTypeNumber = 5)
返回 (十六文本至長整數 (取十六進制文本 (temp.Object)))
.如果真結束
信息塊指針偏移 = 信息塊指針偏移 + 16
.計次循環尾 ()
返回 (0)