浅谈老教程写微信HOOK的BUG
变量名 | 类 型 | 静态 | 数组 | 备 注 | V3a | 整数型 | | | V3b | 整数型 | | | V3c | 整数型 | | | Mess | 整数型 | | | Messa | 整数型 | | | Tya | 整数型 | | | Ebx_A | 整数型 | | | Ebx_x | 整数型 | | | Ebx_n | 整数型 | | | Ecx_A | 整数型 | | | Esi_A | 整数型 | | | Eax_A | 整数型 | | | Ecx_B | 整数型 | | | Calla | 整数型 | | | Callb | 整数型 | | | Callc | 整数型 | | | Calld | 整数型 | | | Calle | 整数型 | | |
V3a = 申请内存 (1024, 真)写到内存 (V3, V3a, 取字节集长度 (V3 )) V3b = 申请内存 (1024, 真)写到内存 (V3, V3b, 取字节集长度 (V3 )) V3c = 申请内存 (1024, 真)写到内存 (V3a, V3c, 4 )写到内存 (取文本长度 (编码_Unicode到Ansi (V3 )), V3c + 4, 4 )写到内存 (取文本长度 (编码_Unicode到Ansi (V3 )), V3c + 8, 4 )写到内存 (V3b, V3c + 12, 4 )写到内存 (取文本长度 (编码_Unicode到Ansi (V3 )) + 1, V3c + 16, 4 )Mess = 申请内存 (1024, 真)写到内存 (请求消息, Mess, 取字节集长度 (请求消息 )) Messa = 申请内存 (1024, 真)写到内存 (取文本长度 (编码_Unicode到Ansi (请求消息 )), Messa + 4, 4 )写到内存 (取文本长度 (编码_Unicode到Ansi (请求消息 )), Messa + 8, 4 )Tya = 类型 Ebx_A = 申请内存 (1024, 真)写到内存 (m_基址 + 34308180, Ebx_A, 4 )Ebx_x = 申请内存 (1024, 真)写到内存 (m_基址 + 34281536, Ebx_x, 4 )Ebx_n = 申请内存 (1024, 真)写到内存 (m_基址 + 32583620, Ebx_n, 4 )写到内存 (Ebx_A, Ebx_n + 4, 4 )写到内存 (Ebx_x, Ebx_n + 8, 4 )写到内存 (Ebx_n + 16, Ebx_n + 12, 4 )
这段代码举例 EBX一直有错误冲突找了几天也没发现问题,几天总算是给我找到了
发出来给刚学习的新手避个坑,大佬请无视 下面开始正题。。。。。
举例
Tya = 类型 Ebx_A = 申请内存 (1024, 真)写到内存 (m_基址 + 34308180, Ebx_A, 4 )Ebx_x = 申请内存 (1024, 真)写到内存 (m_基址 + 34281536, Ebx_x, 4 )Ebx_n = 申请内存 (1024, 真)写到内存 (m_基址 + 32583620, Ebx_n, 4 )写到内存 (Ebx_A, Ebx_n + 4, 4 )写到内存 (Ebx_x, Ebx_n + 8, 4 )写到内存 (Ebx_n + 16, Ebx_n + 12, 4 )
这段代码装到汇编是这么写的,lea ebx,[ebp-0x24]
但是到了OD里面调试的时候发现这些基址老是错误冲突 原因在于这个
首先变量Ebx_n=[ebp-0x24] 这个没错
但是 Ebx_x和Ebx_A这两条也申请了内存,因为我下面写了
写到内存 (Ebx_A, Ebx_n + 4, 4)
写到内存 (Ebx_x, Ebx_n + 8, 4)
写到内存 (Ebx_n + 16, Ebx_n + 12, 4)
这三条,所以冲突的地方就在这里了 因为Ebx_x的变量=[ebp-0x20],Ebx_A=[ebp-0x1c],然后我又申请的内存所以它本身就自己有一个地址
下面这边的 ”写到内存 (Ebx_A, Ebx_n + 4, 4)“ 因为Ebx_n=[ebp-0x24] 所以它在 +4的话也是= 我把Ebx_A这个地址写到了[ebp-0x20],所以冲突就是这么来的 [EBP-20]本来就有值,在写一条肯定冲突导致数据错乱,原因已经找到,解决方法也是各式各样,看看有没有大佬给个更简单的写法
|