|
发表于 2022-4-14 20:56:26
|
显示全部楼层
四川省成都市
.版本 2
.子程序 _启动子程序2, 整数型
PatchWxWork ()
OpenWxWork ()
返回 (0) ' 可以根据您的需要返回任意数值
.子程序 PatchWeChat, 整数型
.局部变量 dwSize, 整数型
.局部变量 pNameInfo, POBJECT_NAME_INFORMATION
.局部变量 pNameType, POBJECT_NAME_INFORMATION
.局部变量 pbuffer, 整数型
.局部变量 Status, 长整数型
.局部变量 nIndex, 整数型
.局部变量 dwFlags, 整数型
.局部变量 szType, 字节型, , "128"
.局部变量 szName, 字节型, , "512"
.局部变量 Pids, 整数型, , "0"
.局部变量 Num, 整数型
.局部变量 pHandleInfo, SYSTEM_HANDLE_INFORMATION1
.局部变量 pInfo, SYSTEM_HANDLE_TABLE_ENTRY_INFO
.局部变量 pCount, 整数型
.局部变量 i, 整数型
.局部变量 hHandle, 整数型
.局部变量 TypName, 文本型
.局部变量 Name, 文本型
.局部变量 p_Tag, 整数型
ElevatePrivileges ()
Num = GetProcIds (“WeChat.exe”, Pids)
.如果真 (Num = 0)
返回 (0)
.如果真结束
pbuffer = VirtualAlloc (0, 4096, #MEM_COMMIT, #PAGE_READWRITE)
.如果真 (pbuffer = 0)
返回 (0)
.如果真结束
Status = _ToLong (ZwQuerySystemInformation (#SystemHandleInformation, pbuffer, 4096, dwSize))
VirtualFree (pbuffer, 0, #MEM_RELEASE)
.如果真 (#STATUS_INFO_LENGTH_MISMATCH ≠ Status)
返回 (0)
.如果真结束
.如果真 (dwSize × 2 > 67108864)
返回 (0)
.如果真结束
pbuffer = VirtualAlloc (0, dwSize × 2, #MEM_COMMIT, #PAGE_READWRITE)
.如果真 (pbuffer = 0)
返回 (0)
.如果真结束
Status = _ToLong (ZwQuerySystemInformation (#SystemHandleInformation, pbuffer, dwSize × 2, 0))
.如果真 (Status < 0)
VirtualFree (pbuffer, 0, #MEM_RELEASE)
返回 (0)
.如果真结束
pCount = 指针到整数 (pbuffer)
.变量循环首 (0, pCount - 1, 1, i)
RtlMoveMemory_INFO (pInfo, pbuffer + 4 + i × 16, 16)
' 调试输出 (pInfo.UniqueProcessId)
' 调试输出 (pInfo.CreatorBackTraceIndex)
' 调试输出 (pInfo.ObjectTypeIndex)
' 调试输出 (pInfo.HandleAttributes)
' 调试输出 (pInfo.HandleValue)
' 调试输出 (pInfo.Object)
' 调试输出 (pInfo.GrantedAccess)
.如果真 (IsTargetPid (pInfo.UniqueProcessId, Pids, Num))
hHandle = DuplicateHandleEx (pInfo.UniqueProcessId, pInfo.HandleValue, #DUPLICATE_SAME_ACCESS)
.如果真 (hHandle = 0)
到循环尾 ()
.如果真结束
' 获取对象类型名
Status = _ToLong (NtQueryObject (hHandle, #ObjectTypeInformation, szType, 128, dwFlags))
.如果真 (Status < 0)
CloseHandle (hHandle)
到循环尾 ()
.如果真结束
RtlMoveMemory_NAME (pNameType, szType, 8)
TypName = _fun_pw2a (pNameType.Name.Buffer)
' 调试输出 (TypName)
.如果真 (TypName = “Mutant”)
' 获取对象名
Status = NtQueryObject (hHandle, #ObjectNameInformation, szName, 512, dwFlags)
.如果真 (Status < 0)
CloseHandle (hHandle)
到循环尾 ()
.如果真结束
' 找到微信的标志找到微信标志
RtlMoveMemory_NAME (pNameInfo, szName, 8)
Name = _fun_pw2a (pNameInfo.Name.Buffer)
.如果真 (寻找文本 (Name, “_WeChat_App_Instance_Identity_Mutex_Name”, , 假) ≠ -1)
CloseHandle (hHandle)
hHandle = DuplicateHandleEx (pInfo.UniqueProcessId, pInfo.HandleValue, #DUPLICATE_CLOSE_SOURCE) ' 关闭Mutant对象
.如果真 (hHandle ≠ 0)
p_Tag = 1
CloseHandle (hHandle)
.如果真结束
跳出循环 ()
.如果真结束
.如果真结束
CloseHandle (hHandle)
.如果真结束
.变量循环尾 ()
VirtualFree (pbuffer, 0, #MEM_RELEASE)
返回 (p_Tag)
.子程序 OpenWeChat, , , 打开微信
.局部变量 hKey, 整数型
.局部变量 Type, 整数型
.局部变量 Path, 字节型, , "260"
.如果真 (#ERROR_SUCCESS ≠ RegOpenKey (#HKEY_CURRENT_USER, “Software\Tencent\WeChat”, hKey))
返回 ()
.如果真结束
Type = #REG_SZ
.如果真 (#ERROR_SUCCESS ≠ RegQueryValueEx (hKey, “InstallPath”, 0, Type, Path, 260))
返回 ()
.如果真结束
PathAppend (Path, “WeChat.exe”)
ShellExecute (0, “Open”, Path, 0, 0, #SW_SHOW)
.子程序 PatchWxWork, 整数型
.局部变量 dwSize, 整数型
.局部变量 pNameInfo, POBJECT_NAME_INFORMATION
.局部变量 pNameType, POBJECT_NAME_INFORMATION
.局部变量 pbuffer, 整数型
.局部变量 Status, 长整数型
.局部变量 nIndex, 整数型
.局部变量 dwFlags, 整数型
.局部变量 szType, 字节型, , "128"
.局部变量 szName, 字节型, , "512"
.局部变量 Pids, 整数型, , "0"
.局部变量 Num, 整数型
.局部变量 pHandleInfo, SYSTEM_HANDLE_INFORMATION1
.局部变量 pInfo, SYSTEM_HANDLE_TABLE_ENTRY_INFO
.局部变量 pCount, 整数型
.局部变量 i, 整数型
.局部变量 hHandle, 整数型
.局部变量 TypName, 文本型
.局部变量 Name, 文本型
.局部变量 p_Tag, 整数型
ElevatePrivileges ()
Num = GetProcIds (“WXWork.exe”, Pids)
.如果真 (Num = 0)
返回 (0)
.如果真结束
pbuffer = VirtualAlloc (0, 4096, #MEM_COMMIT, #PAGE_READWRITE)
.如果真 (pbuffer = 0)
返回 (0)
.如果真结束
Status = _ToLong (ZwQuerySystemInformation (#SystemHandleInformation, pbuffer, 4096, dwSize))
VirtualFree (pbuffer, 0, #MEM_RELEASE)
.如果真 (#STATUS_INFO_LENGTH_MISMATCH ≠ Status)
返回 (0)
.如果真结束
.如果真 (dwSize × 2 > 67108864)
返回 (0)
.如果真结束
pbuffer = VirtualAlloc (0, dwSize × 2, #MEM_COMMIT, #PAGE_READWRITE)
.如果真 (pbuffer = 0)
返回 (0)
.如果真结束
Status = _ToLong (ZwQuerySystemInformation (#SystemHandleInformation, pbuffer, dwSize × 2, 0))
.如果真 (Status < 0)
VirtualFree (pbuffer, 0, #MEM_RELEASE)
返回 (0)
.如果真结束
pCount = 指针到整数 (pbuffer)
.变量循环首 (0, pCount - 1, 1, i)
RtlMoveMemory_INFO (pInfo, pbuffer + 4 + i × 16, 16)
' 调试输出 (pInfo.UniqueProcessId)
' 调试输出 (pInfo.CreatorBackTraceIndex)
' 调试输出 (pInfo.ObjectTypeIndex)
' 调试输出 (pInfo.HandleAttributes)
' 调试输出 (pInfo.HandleValue)
' 调试输出 (pInfo.Object)
' 调试输出 (pInfo.GrantedAccess)
.如果真 (IsTargetPid (pInfo.UniqueProcessId, Pids, Num))
hHandle = DuplicateHandleEx (pInfo.UniqueProcessId, pInfo.HandleValue, #DUPLICATE_SAME_ACCESS)
.如果真 (hHandle = 0)
到循环尾 ()
.如果真结束
' 获取对象类型名
Status = _ToLong (NtQueryObject (hHandle, #ObjectTypeInformation, szType, 128, dwFlags))
.如果真 (Status < 0)
CloseHandle (hHandle)
到循环尾 ()
.如果真结束
RtlMoveMemory_NAME (pNameType, szType, 8)
TypName = _fun_pw2a (pNameType.Name.Buffer)
' 调试输出 (TypName)
.如果真 (TypName = “Mutant”)
' 获取对象名
Status = NtQueryObject (hHandle, #ObjectNameInformation, szName, 512, dwFlags)
.如果真 (Status < 0)
CloseHandle (hHandle)
到循环尾 ()
.如果真结束
' 找到微信的标志找到微信标志
RtlMoveMemory_NAME (pNameInfo, szName, 8)
Name = _fun_pw2a (pNameInfo.Name.Buffer)
.如果真 (寻找文本 (Name, “Tencent.WeWork.ExclusiveObject”, , 假) ≠ -1)
CloseHandle (hHandle)
hHandle = DuplicateHandleEx (pInfo.UniqueProcessId, pInfo.HandleValue, #DUPLICATE_CLOSE_SOURCE) ' 关闭Mutant对象
.如果真 (hHandle ≠ 0)
p_Tag = 1
CloseHandle (hHandle)
.如果真结束
跳出循环 ()
.如果真结束
.如果真结束
CloseHandle (hHandle)
.如果真结束
.变量循环尾 ()
VirtualFree (pbuffer, 0, #MEM_RELEASE)
返回 (p_Tag)
.子程序 OpenWxWork, , , 打开微信
.局部变量 hKey, 整数型
.局部变量 Type, 整数型
.局部变量 Path, 字节型, , "260"
.如果真 (#ERROR_SUCCESS ≠ RegOpenKey (#HKEY_CURRENT_USER, “Software\Tencent\WXWork”, hKey))
返回 ()
.如果真结束
Type = #REG_SZ
.如果真 (#ERROR_SUCCESS ≠ RegQueryValueEx (hKey, “Executable”, 0, Type, Path, 260))
返回 ()
.如果真结束
PathAppend (Path, “”)
ShellExecute (0, “Open”, Path, 0, 0, #SW_SHOW)
|
|