软件 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破解看下,常用的反汇编工具