蒋阿君 发表于 2019-10-11 22:57

易语言超级模块中的进程隐藏


直接这样隐藏不了吗?

尛龍 发表于 2019-10-11 23:09

这个模块在32位系统可使用,64位就不行了

wxb519774317 发表于 2019-10-11 23:09

本帖最后由 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:20

尛龍 发表于 2019-10-11 23:09
这个模块在32位系统可使用,64位就不行了

谢谢老哥

蒋阿君 发表于 2019-10-11 23:22

wxb519774317 发表于 2019-10-11 23:09
早期的只能用于xp. 楼上正解

下面是隐藏进程的源代码 可自行分析


谢谢老哥

netCheney 发表于 2019-10-11 23:39

wxb519774317 发表于 2019-10-11 23:09
早期的只能用于xp. 楼上正解

下面是隐藏进程的源代码 可自行分析


厉害了,谢谢大佬分享

红尘情g 发表于 2019-10-12 00:27

厉害&#128077;,保存代码去试下,先谢谢了。

zhhayu 发表于 2019-12-7 17:59

能分享一下超级模块9.2吗?

zhhayu 发表于 2019-12-7 18:00

wxb519774317 发表于 2019-10-11 23:09
早期的只能用于xp. 楼上正解

下面是隐藏进程的源代码 可自行分析


能分享一下超级模块9.2吗?

zhhayu 发表于 2019-12-7 18:01

能分享一下超级模块9.2吗?
页: [1]
查看完整版本: 易语言超级模块中的进程隐藏