Lazy loaded image
Spider
Windows WX注入原理
字数 1658阅读时长 5 分钟
2021-12-22
2024-7-5
type
status
date
slug
summary
tags
category
icon
password

一、注入原理

  1. 在 Windows 系统中,每个 .exe 文件在双击打开时都会加载 kernel32.dll 这个系统模块,该模块中有一个 LoadLibrary() 函数,可以将DLL文件加载到自身进程中。
  1. 用 CreateRemoteThread() 函数创建一个远程线程,让目标进程调用LoadLibrary() 来加载我们自己写的DLL 。CreateRemoteThread() 有这几个参数比较关键:A:想要注入的进程的句柄,这里可以通过OpenProcess()得到; B:想要运行的函数,本例中当然是 LoadLibrary() 啦; C: 所运行函数的参数,本例中是自己写的DLL的存放路径。
  1. 这就需要在内存中开辟一块空间,把路径写入进去。这要先用 VirtualAllocEx()开辟一块空间,然后用WriteProcessMemory() 函数把DLL路径写进去。
总结:先在目标进程的内存空间里开辟一块新地方,往新地方里面写入DLL的路径,再创建远程线程找到LoadLibrary() 函数,并在刚才开辟的新地方中读取DLL路径,进而加载我们自己写的DLL。

二、构成

1、注入器

  1. 遍历系统中的进程,找到微信进程(CreateToolhelp32Snapshot、Process32Next)
  1. 打开微信进程,获得HANDLE(OpenProcess)
  1. 在微信进程中为DLL文件路径字符串申请内存空间(VirtualAllocEx)
  1. 把DLL文件路径字符串写入到申请的内存中(WriteProcessMemory)
  1. 从Kernel32.dll中获取LoadLibraryA的函数地址(GetModuleHandle、GetProcAddress)

2、Dll文件

  1. 获取WeChatWin.dll的基址
  1. hook指定地址改变函数
  1. 保存当前寄存器状况方便恢复现场
  1. 跳转至自己的逻辑
  1. 恢复现场
    1. notion image

三、wx多开

在Windows系统里面要实现单实例运行,基本都是用互斥体来实现的。互斥体,只能同时被一个线程持有, 只有拥有互斥对象的线程才有访问公共资源的权限。因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享。
微信的Mutex名字是:_WeChat_App_Instance_Identity_Mutex_Name

1、修改WeChatWin.dll

修改字节,改变Mutex名字。

2、Hook内存

上一篇
Tampermonkey油猴脚本安装及入门
下一篇
Scrapy使用FilesPipeline下载并读取Excel/Doc/Dox/Pdf内容

评论
Loading...