软件 vs2022 od ce

OD使用教程

  1. OD Attach WeChat进程,然后运行
  2. t 快捷键用于线程暂停激活,右键进行操作
  3. c 快捷键用于返回主界面
  4. b 快捷键查看所有断点
  5. dd 查看内存数据
    dc 查看中文数据
    du unicode编码
  6. F2 快捷键加断点
  7. Ctrl + g 搜索
  8. F8 步进

CE使用教程

  1. 附加WeChat进程
  2. Memory View中 Ctrl + g 搜索地址

汇编基础指令

  1. E8 call
  2. E9 jmp
  3. 指令 [要跳转的地址 - hook的地址 - 5]

注入器实现 (LoadLibraryAddress)

  1. 通过进程快照获取进程PID
    CreateToolhelp32Snapshot()
    Process32Next()
    OpenProcess()
  2. 申请内存
    DllAddress = VirtualAllocEx()
  3. 写入注入DLL路径
    WriteProcessMemory()
  4. 获取Kernel32基址
    Kernem32_Address = GetModuleHandle("kernel32.dll")
  5. 获取LoadLibrary函数的地址
    LoadLibraryAddress = GetProcAddress(Kernem32_Address, "LoadLibaray(A or W)")
  6. 在别人进程执行加载的DLL中的函数
    CreateRemoteThread(LoadLibraryAddress , DllAddress)

卸载器实现 (FreeLibrary)

DLL编写

  1. 获取基址
    WinAddress = LoadLibrary("WeChatWin.dll")
  2. 根据偏移操作
    读 地址类型*(* data)
    写 WriteProcessMemory()
  3. WriteProcessMemory()
  4. ReadProcessMemory()

微信多开 (互斥体 CreateMutex(A or W,WeChat use W))

  1. 左上窗口搜索 CreateMutexW,右下角查看三个参数获取name参数
  2. 修改name为不同即可

hook获取微信二维码 (获取二维码图片base64,返回原执行流程)

  1. 查找图片base64

or

  1. 根据二维码还原为url格式
  2. 组成为 url + 后缀,所以不能全部搜索,只搜索后缀即可
  3. 通过扫码取消登录的方式获取变更为新的后缀的地址,然后下断点获取基址
  4. 找到那个地址存放后缀,可能在断点上方一部分
  5. 填充要替换的指令
  6. 备份寄存器内容(asm 把寄存器中的值移出来)
  7. 执行要做的函数
  8. 回复寄存器内容(asm 把值放回寄存器)
  9. jmp到原来call之后的位置

发送文本消息

  1. 从wxid或者发送内容找对应call位置
  2. 根据id打内存访问断点,找到入口函数

接收消息

  1. 通过接收消息在CE中查找
  2. 查找未处理的数据,比较完整
  3. 下内存写入断点,在堆栈区附近找对应字符串

微信版本 3.6.0.18
基址 WeChatWin.dll

偏移
222EBB4 用户名
222F020 wxid 指针类型 or wxid
222EE94 头像 指针类型
222EBE8 电话号码
222F058 登录设备
22580A0 登录二维码 指针类型

最后修改:2022 年 06 月 05 日
如果觉得我的文章对你有用,请随意赞赏