能力值:
( LV3,RANK:30 )
|
-
-
7 楼
应该符合你的要求吧
.版本 2
.支持库 spec
.子程序 子程序1
.局部变量 nt64, 长整数型
.局部变量 p, 长整数型
.局部变量 lRet
.局部变量 dqRet, 长整数型
.局部变量 retaddr, 长整数型
.局部变量 dqLen, 长整数型
.局部变量 old, 长整数型
.局部变量 bRet, 逻辑型
.局部变量 szText, 文本型
.局部变量 lpBin, 字节集
.局部变量 len
.局部变量 pid
.局部变量 hp
.局部变量 m
.局部变量 info, MEMORY_BASIC_INFORMATION64
.局部变量 info2, MEMORY_BASIC_INFORMATION32
.如果 (fn_WOW64Enabled ())
调试输出 (“64位函数可用”)
nt64 = GetNtdll64 ()
调试输出 (nt64)
p = GetModuleHandleEx64 (1023043677)
调试输出 (p, len)
p = GetModuleHandle64 (“ntdll.dll”)
调试输出 (p, len)
p = GetProcAddressEx64 (nt64, -718276507)
调试输出 (p, len)
p = GetProcAddress64 (nt64, “NtQueryVirtualMemory”)
调试输出 (p, len)
p = NtQuerySystemInformation64 (5, 0, 0, len)
调试输出 (p, len)
GetWindowThreadProcessId (330344, pid) ' 这里是随意找的一个 64 程序窗口句柄作为第一参数
调试输出 (“pid”, pid)
hp = OpenProcess (位或 (8, 16, 32, 1024), 假, pid)
调试输出 (“hp”, hp, “ProcessIsX64”, fn_ProcessIsX64 (hp))
p = VirtualAllocEx64 (hp, 0, 1024, 位或 (#MEM_COMMIT, #MEM_RESERVE), #PAGE_READWRITE)
lRet = VirtualQueryEx64 (hp, p, 指针到整数 (取变量数据地址 (info)), 48)
调试输出 (lRet, info.BaseAddress, info.AllocationBase, info.AllocationProtect, info.RegionSize, info.State, info.Protect, info.Type, info.__alignment2)
bRet = VirtualProtectEx64 (hp, p, 1024, #PAGE_EXECUTE_READWRITE, lRet)
调试输出 (“VirtualProtectEx64”, bRet, lRet)
szText = “本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。”
调试输出 (取文本长度 (szText))
bRet = WriteProcessMemory64 (hp, p, 取变量数据地址 (szText), 取文本长度 (szText), dqRet)
调试输出 (“WriteProcessMemory64”, bRet, dqRet)
lpBin = 取空白字节集 (dqRet)
bRet = ReadProcessMemory64 (hp, p, 取变量数据地址 (lpBin), dqRet, dqRet)
调试输出 (“ReadProcessMemory64”, bRet, dqRet)
调试输出 (取字节集数据 (lpBin, #文本型, ))
dqRet = NtQueryProcessPEB64 (hp)
调试输出 (“NtQueryProcessPEB64”, dqRet)
bRet = VirtualFreeEx64 (hp, p, 0, #MEM_RELEASE)
调试输出 (p, bRet)
CloseHandle (hp)
' X64Call 测试,每个函数如何使用及参数如何自行查阅
' 1944646861 1497890193 1772103807 -718276507 307609691 -919857027 1261240470 865864187 (2001885035 -145598612) 1797126944
szText = “NtQuerySystemInformation”
len = 取文本长度 (szText)
lpBin = 到字节集 (len)
len = len + 1
lpBin = lpBin + 到字节集 (len)
lpBin = lpBin + 到字节集 (到长整数 (取变量数据地址 (szText)))
p = GetProcAddressEx64 (nt64, 1944646861)
dqRet = X64Call (p, nt64, 取变量数据地址 (lpBin), 0, 取变量数据地址 (retaddr))
调试输出 (dqRet, retaddr)
GetWindowThreadProcessId (330344, pid) ' 这里是随意找的一个 64 程序窗口句柄作为第一参数
调试输出 (“pid”, pid)
hp = OpenProcess (位或 (8, 16, 32, 1024), 假, pid)
调试输出 (“hp”, hp, “ProcessIsX64”, fn_ProcessIsX64 (hp))
p = GetProcAddressEx64 (nt64, 1497890193)
retaddr = 0
dqLen = 1024
dqRet = X64Call (p, hp, 取变量数据地址 (retaddr), 0, 取变量数据地址 (dqLen), 位或 (#MEM_COMMIT, #MEM_RESERVE), #PAGE_READWRITE)
调试输出 (dqRet, retaddr, dqLen)
p = GetProcAddressEx64 (nt64, -718276507)
dqRet = X64Call (p, hp, retaddr, 0, 指针到整数 (取变量数据地址 (info)), 48)
调试输出 (“VirtualQueryEx64”, dqRet, info.BaseAddress, info.AllocationBase, info.AllocationProtect, info.RegionSize, info.State, info.Protect, info.Type, info.__alignment2)
p = GetProcAddressEx64 (nt64, 307609691)
dqLen = 1024
dqRet = X64Call (p, hp, 取变量数据地址 (retaddr), 取变量数据地址 (dqLen), #PAGE_EXECUTE_READWRITE, 取变量数据地址 (old))
调试输出 (“VirtualProtectEx64”, dqRet, retaddr, dqLen, old)
p = GetProcAddressEx64 (nt64, 1772103807)
dqLen = 0
dqRet = X64Call (p, hp, 取变量数据地址 (retaddr), 取变量数据地址 (dqLen), #MEM_RELEASE)
调试输出 (dqRet, retaddr, dqLen)
CloseHandle (hp)
.否则
调试输出 (“64位函数不可用”)
.如果结束
lRet = GetModuleHandleEx86 (1023043677)
调试输出 (lRet, GetNtdll86 (), GetKernel32 ())
hp = GetNtdll86 ()
lRet = GetProcAddressEx86 (hp, -718276507)
调试输出 (lRet, hp)
lRet = GetProcAddress86 (hp, “NtQueryVirtualMemory”)
调试输出 (lRet, hp)
GetWindowThreadProcessId (858388, pid) ' 这里是随意找的一个 32 程序窗口句柄作为第一参数
调试输出 (“pid”, pid)
hp = OpenProcess (位或 (8, 16, 32, 1024), 假, pid)
调试输出 (“hp”, hp, “ProcessIsX64”, fn_ProcessIsX64 (hp))
m = VirtualAllocEx86 (hp, 0, 1024, 位或 (#MEM_COMMIT, #MEM_RESERVE), #PAGE_READWRITE)
lRet = VirtualQueryEx86 (hp, m, 指针到整数 (取变量数据地址 (info2)), 24)
调试输出 (lRet, info2.BaseAddress, info2.AllocationBase, info2.AllocationProtect, info2.RegionSize, info2.State, info2.Protect, info2.Type)
bRet = VirtualProtectEx86 (hp, m, 1024, #PAGE_EXECUTE_READWRITE, lRet)
调试输出 (“VirtualProtectEx86”, bRet, lRet)
szText = “本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。”
调试输出 (取文本长度 (szText))
bRet = WriteProcessMemory86 (hp, m, 取变量数据地址 (szText), 取文本长度 (szText), lRet)
调试输出 (“WriteProcessMemory86”, bRet, lRet)
lpBin = 取空白字节集 (dqRet)
bRet = ReadProcessMemory86 (hp, m, 取变量数据地址 (lpBin), lRet, lRet)
调试输出 (“ReadProcessMemory86”, bRet, lRet)
调试输出 (取字节集数据 (lpBin, #文本型, ))
dqRet = NtQueryProcessPEB86 (hp)
调试输出 (“NtQueryProcessPEB86”, dqRet)
bRet = VirtualFreeEx86 (hp, m, 0, #MEM_RELEASE)
调试输出 (m, bRet)
CloseHandle (hp)
lRet = NtQuerySystemInformation86 (5, 0, 0, len)
调试输出 (lRet, len)
' 调试输出 (g_Mods)
' 调试输出 (指针到整数 (指针到整数 (g_Mods)))
调试输出 (111)
|