标签:
喊话功能VC++实现
(a)、分析喊话CALL的参数基址+偏移
(b)、VC++代码实现
【03:45】先找 ESI的来源
【04:20】用CE来搜索一下 当前 ESI的值
【05:08】会直接找到 基址 + 非基址。可以直接用这个基址(ZC: 也不需要验证一下的?),等会再调试一下 看看会不会变
【06:53】试着用 非基址 找一下 ESI的来源
【07:03】下一个 内存访问 断点
【08:30】这个方式的查找就比较复杂了
【09:20】找 第2个参数,就是我们输入的字符串的发送时候的地址
【09:30】CE搜索 输入的文本的子集
【09:50】修改一下,再扫描
【10:15】看到和上节课一样的现象,基址 是用于输入框显示的,非基址 是用于发送网络数据的。测试验证一下(CE修改文本内容,游戏中直接按回车,看角色头顶出现什么内容)
【10:49】上面找到的非基址,OD中内存写入断点 (ZC: 为何是 写入断点?发送网络数据时 应该是 读取断点 啊... 这里的目的是 找这段内存的起始来源,并不一样非要定位到 发送网络数据,定位到写入数据时 照样可以啊...! !)
【11:25】上面找到的非基址,OD中内存访问断点 (ZC: -.-)
【12:26】"repne scas"命令 (ZC: 默认是用 EAX、ECX)
【16:00】该命令 OD按F7的话,会一次一次的循环执行
【17:11】此时 EDI值为0x065EF2AB,减7之后 来到0x065EF2A4 指向字符串头部(ZC: 如果EDI指向一个结构体指针的话,怎么感觉这个结构体这么怪啊...)
【17:20】ZC: 这里 他说的没错,这里是在恢复EDI原来的值。【15:58】处 "repne scas"开始前 EDI就是0x065EF2A4 指向字符串开始处,随着每次"repne scas"的执行 EDI的值+1(相当于char*指针依次后移),∵ 指令中明确指定了使用EDI(是否一般该命令也是默认使用EDI?∵字符串操作一般是使用esi/edi)。EDI并非指向结构体指针,而是char*
1、
2、
标签:
原文地址:http://www.cnblogs.com/debugskill/p/5494664.html