软件 vs2022 od ce
OD使用教程
- OD Attach WeChat进程,然后运行
- t 快捷键用于线程暂停激活,右键进行操作
- c 快捷键用于返回主界面
- b 快捷键查看所有断点
- dd 查看内存数据
dc 查看中文数据
du unicode编码 - F2 快捷键加断点
- Ctrl + g 搜索
- F8 步进
CE使用教程
- 附加WeChat进程
- Memory View中 Ctrl + g 搜索地址
汇编基础指令
- E8 call
- E9 jmp
- 指令 [要跳转的地址 - hook的地址 - 5]
注入器实现 (LoadLibraryAddress)
- 通过进程快照获取进程PID
CreateToolhelp32Snapshot()
Process32Next()
OpenProcess() - 申请内存
DllAddress = VirtualAllocEx() - 写入注入DLL路径
WriteProcessMemory() - 获取Kernel32基址
Kernem32_Address = GetModuleHandle("kernel32.dll") - 获取LoadLibrary函数的地址
LoadLibraryAddress = GetProcAddress(Kernem32_Address, "LoadLibaray(A or W)") - 在别人进程执行加载的DLL中的函数
CreateRemoteThread(LoadLibraryAddress , DllAddress)
卸载器实现 (FreeLibrary)
DLL编写
- 获取基址
WinAddress = LoadLibrary("WeChatWin.dll") - 根据偏移操作
读 地址类型*(* data)
写 WriteProcessMemory() - WriteProcessMemory()
- ReadProcessMemory()
微信多开 (互斥体 CreateMutex(A or W,WeChat use W))
- 左上窗口搜索 CreateMutexW,右下角查看三个参数获取name参数
- 修改name为不同即可
hook获取微信二维码 (获取二维码图片base64,返回原执行流程)
- 查找图片base64
or
- 根据二维码还原为url格式
- 组成为 url + 后缀,所以不能全部搜索,只搜索后缀即可
- 通过扫码取消登录的方式获取变更为新的后缀的地址,然后下断点获取基址
- 找到那个地址存放后缀,可能在断点上方一部分
- 填充要替换的指令
- 备份寄存器内容(asm 把寄存器中的值移出来)
- 执行要做的函数
- 回复寄存器内容(asm 把值放回寄存器)
- jmp到原来call之后的位置
发送文本消息
- 从wxid或者发送内容找对应call位置
- 根据id打内存访问断点,找到入口函数
接收消息
- 通过接收消息在CE中查找
- 查找未处理的数据,比较完整
- 下内存写入断点,在堆栈区附近找对应字符串
微信版本 3.6.0.18
基址 WeChatWin.dll
偏移
222EBB4 用户名
222F020 wxid 指针类型 or wxid
222EE94 头像 指针类型
222EBE8 电话号码
222F058 登录设备
22580A0 登录二维码 指针类型
2 条评论
od和ce都是什么软件?
可以去52破解看下,常用的反汇编工具