易语言超级模块中的进程隐藏
直接这样隐藏不了吗? 这个模块在32位系统可使用,64位就不行了 本帖最后由 wxb519774317 于 2019-10-11 23:13 编辑
早期的只能用于xp. 楼上正解
下面是隐藏进程的源代码 可自行分析
.版本 2
.子程序 隐藏进程, 逻辑型, 公开, 隐藏自身进程(XP,XP2)
.局部变量 pid, 整数型
.局部变量 eprocess, 长整数型
.局部变量 hand, 整数型
.局部变量 temp, 字节集
.局部变量 fw_, 长整数型
.局部变量 bw_, 长整数型
.局部变量 fw, 字节集
.局部变量 bw, 字节集
提升进程权限 ()
hand = 用保护型打开进程 (2075311, 真, 取自进程ID ())
eprocess = 取进程EProcess (取自进程ID ())
关闭系统快照 (hand)
.如果真 (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)
返回 (假)
.如果真结束
返回 (真)
.子程序 用保护型打开进程, 整数型
.参数 dwDesiredAccess, 整数型
.参数 bInhert, 逻辑型
.参数 ProcessId, 整数型
.局部变量 st, 整数型
.局部变量 cid, CLIENT_ID
.局部变量 oa, OBJECT_ATTRIBUTES
.局部变量 NumOfHandle, 整数型
.局部变量 pbi, PROCESS_BASIC_INFORMATION
.局部变量 i, 整数型
.局部变量 hProcessToDup, 整数型
.局部变量 hProcessCur, 整数型
.局部变量 hProcessToRet, 整数型
.局部变量 h_info, SYSTEM_HANDLE_TABLE_ENTRY_INFO
.局部变量 retlen, 整数型
.局部变量 a, 字节集
.局部变量 b, 整数型
.局部变量 c, 字节集
.局部变量 ret, 整数型
oa.Length = 24
.如果真 (bInhert)
oa.Attributes = 位或 (oa.Attributes, 2)
.如果真结束
cid.UniqueProcess = ProcessId + 1
st = ZwOpenProcess (hProcessToRet, dwDesiredAccess, oa, cid)
.如果真 (st ≥ 0)
ret = hProcessToRet
返回 (ret)
.如果真结束
retlen = 1
.循环判断首 ()
a = 取空白字节集 (retlen)
ret = ZwQuerySystemInformation (16, a, retlen, 0)
.如果 (ret = -1073741820)
retlen = retlen × 2
a = 取空白字节集 (retlen)
.否则
跳出循环 ()
.如果结束
.循环判断尾 (ret = -1073741820)
b = 取字节集指针_ (a, a, 0)
RtlMoveMemory3 (NumOfHandle, b, 4)
b = b + 4
.计次循环首 (NumOfHandle, i)
RtlMoveMemory1 (h_info, b, 16)
.如果真 (h_info.ObjectTypeIndex = 5)
cid.UniqueProcess = h_info.UniqueProcessId
st = ZwOpenProcess (hProcessToDup, 64, oa, cid)
.如果真 (st ≥ 0)
st = ZwDuplicateObject (hProcessToDup, h_info.HandleValue, -1, hProcessCur, 2035711, 0, 4)
.如果真 (st ≥ 0)
st = ZwQueryInformationProcess (hProcessCur, 0, pbi, 24, 0)
.如果真 (st ≥ 0)
.如果真 (pbi.UniqueProcessId = ProcessId)
st = ZwDuplicateObject (hProcessToDup, h_info.HandleValue, -1, hProcessToRet, dwDesiredAccess, 2, 4)
.如果真 (st ≥ 0)
ret = hProcessToRet
.如果真结束
.如果真结束
.如果真结束
.如果真结束
st = ZwClose (hProcessCur)
.如果真结束
st = ZwClose (hProcessToDup)
.如果真结束
b = b + 16
.计次循环尾 ()
返回 (ret)
.子程序 提升进程权限, 逻辑型, , 成功返回真,把一个进程的权限提升到调试级权限
.参数 进程ID, 整数型, 可空, 欲提升权限的进程ID,若空为自进程,可以协助跨进程内存读写搜索时使用
.局部变量 进程句柄, 整数型
.局部变量 令牌句柄, 整数型
.局部变量 destLuid, LUID
.局部变量 进程权限, 进程权限
.局部变量 返回, 逻辑型
.如果真 (0 = 进程ID)
进程ID = 取自进程ID ()
.如果真结束
进程句柄 = 用保护型打开进程 (2035711, 真, 进程ID)
打开令牌对象 (进程句柄, 983551, 令牌句柄)
取权限令牌 (0, “SeDebugPrivilege”, destLuid)
进程权限.PrivilegeCount = 1
进程权限.Attributes = 2
进程权限.LowPart = destLuid.LowPart
进程权限.HighPart = destLuid.HighPart
返回 = 置进程权限 (令牌句柄, 假, 进程权限, 0, 0, 0)
关闭对象 (进程句柄)
返回 (返回)
.子程序 写物理内存, 整数型, , 失败返回-1,成功返回0
.参数 地址, 长整数型
.参数 数据, 字节集, , <=4096
.局部变量 MEMORY_CHUNKS, 字节集
.局部变量 ret, 整数型
.局部变量 retlen, 整数型
.局部变量 len, 整数型
len = 取字节集长度 (数据)
MEMORY_CHUNKS = 取字节集左边 (到字节集 (地址), 4) + 到字节集 (取字节集指针_ (数据, 数据, 0)) + 到字节集 (len)
NtSystemDebugControl (9, MEMORY_CHUNKS, 12, 0, 0, retlen)' 12为MEMORY_CHUNKS的长度
.如果真 (retlen ≤ 0)
ret = -1
.如果真结束
返回 (ret)
.子程序 读物理内存, 字节集, , 失败返回{},成功返回相应数据
.参数 地址, 长整数型
.参数 长度, 整数型, , <=4096
.局部变量 MEMORY_CHUNKS, 字节集
.局部变量 ret, 字节集
.局部变量 retlen, 整数型
ret = 取空白字节集 (长度)
MEMORY_CHUNKS = 取字节集左边 (到字节集 (地址), 4) + 到字节集 (取字节集指针_ (ret, ret, 0)) + 到字节集 (长度)
NtSystemDebugControl (8, MEMORY_CHUNKS, 12, 0, 0, retlen)' 12为MEMORY_CHUNKS的长度
.如果真 (retlen ≤ 0)
ret = {}
.如果真结束
返回 (ret)
.子程序 取进程EProcess, 长整数型, , 0为失败
.参数 pid, 整数型
.局部变量 ret
.局部变量 信息块, 字节集
.局部变量 retlen
.局部变量 temp, SYSTEM_HANDLE_INFORMATION
.局部变量 信息块指针偏移
.局部变量 number
.局部变量 结果, 长整数型
retlen = 1
.循环判断首 ()
信息块 = 取空白字节集 (retlen)
ret = ZwQuerySystemInformation (16, 信息块, retlen, 0)
.如果 (ret = -1073741820)
retlen = retlen × 2
信息块 = 取空白字节集 (retlen)
.否则
跳出循环 ()
.如果结束
.循环判断尾 (ret = -1073741820)
信息块指针偏移 = 取字节集指针_ (信息块, 信息块, 0)
复制内存整数 (number, 信息块指针偏移, 4)
信息块指针偏移 = 信息块指针偏移 + 4
.计次循环首 (number, )
RtlMoveMemory2 (temp, 信息块指针偏移, 16)
.如果真 (pid = temp.ProcessId 且 temp.ObjectTypeNumber = 5)
返回 (十六文本至长整数 (取十六进制文本 (temp.Object)))
.如果真结束
信息块指针偏移 = 信息块指针偏移 + 16
.计次循环尾 ()
返回 (0)
.子程序 十六文本至长整数, 长整数型
.参数 x, 文本型, , 要转换的十六进制文本
.局部变量 ret, 长整数型
StrToInt64ExA (“0x” + x, 1, ret)
返回 (ret) 尛龍 发表于 2019-10-11 23:09
这个模块在32位系统可使用,64位就不行了
谢谢老哥 wxb519774317 发表于 2019-10-11 23:09
早期的只能用于xp. 楼上正解
下面是隐藏进程的源代码 可自行分析
谢谢老哥 wxb519774317 发表于 2019-10-11 23:09
早期的只能用于xp. 楼上正解
下面是隐藏进程的源代码 可自行分析
厉害了,谢谢大佬分享 厉害👍,保存代码去试下,先谢谢了。 能分享一下超级模块9.2吗? wxb519774317 发表于 2019-10-11 23:09
早期的只能用于xp. 楼上正解
下面是隐藏进程的源代码 可自行分析
能分享一下超级模块9.2吗? 能分享一下超级模块9.2吗?
页:
[1]