收藏 分享(赏)

011-C,C++xdbg条件断点,修改遍历代码【瑞客论坛 www.ruike1.com】.txt

上传人:a****2 文档编号:3402478 上传时间:2024-04-28 格式:TXT 页数:7 大小:9.39KB
下载 相关 举报
011-C,C++xdbg条件断点,修改遍历代码【瑞客论坛 www.ruike1.com】.txt_第1页
第1页 / 共7页
011-C,C++xdbg条件断点,修改遍历代码【瑞客论坛 www.ruike1.com】.txt_第2页
第2页 / 共7页
011-C,C++xdbg条件断点,修改遍历代码【瑞客论坛 www.ruike1.com】.txt_第3页
第3页 / 共7页
011-C,C++xdbg条件断点,修改遍历代码【瑞客论坛 www.ruike1.com】.txt_第4页
第4页 / 共7页
011-C,C++xdbg条件断点,修改遍历代码【瑞客论坛 www.ruike1.com】.txt_第5页
第5页 / 共7页
011-C,C++xdbg条件断点,修改遍历代码【瑞客论坛 www.ruike1.com】.txt_第6页
第6页 / 共7页
亲,该文档总共7页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、011-C,C+xdbg条件断点,修改遍历代码 2021在线班郁金香灬老师 QQ 150330575交流群:158280115学习目标: 调试器条件断点 链表指针偏移测试修改遍历代码 对象+0x20 对象指针+0x28 对象指针? +0x30 ID1+0x34 ID2 怪对象+964+5c /怪物名字 fs:2C+0+8+1C=2C1DDFF0 2C1DDFF0+2*0C+8+964+5C #includepch.h/*对象+0x20 链表指针+0x30 ID1+0x34 ID2 怪对象+964+5c /怪物名字 fs:2C+0+8+1C=2C1DDFF0 2C1DDFF0+下标*0x0C+8

2、 +964+5C /怪对象名字 */ fs:2C+0+8+1C=2C1DDFF0 int 遍历计数 = 0;DWORD R4(UINT_PTR 地址)_tryreturn *(DWORD*)地址;/ReadProcessMemory_except (1)return 0;UINT_PTR 怪物数组地址()/读取 fs:2C+0+8+1CDWORD fs2C = 0;_asmmov eax,dword ptr fs:0x2Cmov fs2C,eaxDWORD 数组地址 = R4(R4(R4(fs2C + 0) + 8) +0x1C);return 数组地址;/fs:2c+0+8+24 =0x1F

3、DWORD 怪物数组结点数量()/读取 fs:2C+0+8+24DWORD fs2C = 0;_asmmov eax, dword ptr fs : 0x2Cmov fs2C, eaxDWORD 数量 = R4(R4(R4(fs2C + 0) + 8) + 0x24);return 数量;/ 获取结点对象 2C1DDFF0+下标*0x0C+8 UINT_PTR 获取结点对象(int 下标) /0.31 0.1F/ 怪物数组地址+下标*0x0C+8 UINT_PTR 怪物地址 = 怪物数组地址();/fs:2C+0+8+1Creturn R4(怪物地址 + 下标 * 0x0C + 8);/打印怪

4、物对象信息void 打印怪物对象信息(UINT_PTR 对象)UINT32 vftable = R4(对象 + 0);if (vftable = 0) return; /如果对象是 空对象 直接返回遍历计数 = 遍历计数 + 1;UINT32 ID1 = R4(对象 + 0x30);UINT32 ID2 = R4(对象 + 0x34);/怪对象+964+5c /怪物名字char* utf8怪物名字 =(char*)R4( R4(对象 + 0x964) + 0x5C);if(utf8怪物名字=NULL) return; /如果对象是 空对象 直接返回char 多字节怪物名字256 = 0 ;ut

5、f8ToAscii(utf8怪物名字, 多字节怪物名字);printf(首对象信息 vftable=%X ID1=%X ID2=%X 名字=%sn, vftable,ID1,ID2, 多字节怪物名字);void 结点信息(UINT_PTR 对象)UINT32 vftable = R4(对象 + 0);if (vftable = 0) return; /如果对象是 空对象 直接返回UINT32 ID1 = R4(对象 + 0x30);UINT32 ID2 = R4(对象 + 0x34);/怪对象+964+5c /怪物名字char* utf8怪物名字 = (char*)R4(R4(对象 + 0x9

6、64) + 0x5C);if (utf8怪物名字 = NULL) return; /如果对象是 空对象 直接返回char 多字节怪物名字256 = 0 ;utf8ToAscii(utf8怪物名字, 多字节怪物名字);printf(结点信息 vftable=%X ID1=%X ID2=%X 名字=%sn, vftable, ID1, ID2, 多字节怪物名字);/遍历链表void 遍历链表(UINT_PTR 怪物对象首结点)/*对象+0x20 链表指针+0x30 ID1+0x34 ID2*/BOOL 是偶数 = (怪物对象首结点 % 2 =0);UINT_PTR 对象 = R4(怪物对象首结点

7、+ 0x20);while (对象 & 是偶数)/打印此结点信息结点信息(对象);/访问下一个结点对象对象 = R4(对象 + 0x20);是偶数 = (怪物对象首结点 % 2=0);return;/遍历数组void 遍历对象数组() /0.1F 0.怪物数组结点数量()int 数量 = 怪物数组结点数量();printf(遍历对象数组 数量=%dn, 数量);for (int i = 0; i 数量; i+)UINT_PTR 怪物对象首结点=获取结点对象(i);打印怪物对象信息(怪物对象首结点);遍历链表(怪物对象首结点);VOID CALLBACK 主线_遍历对象数组(HWND h, UI

8、NT arg2, UINT_PTR arg3_id, DWORD time)遍历计数 = 0;KillTimer(h, arg3_id);遍历对象数组(); 004D4BAE | CC | int3 |004D4BAF | CC | int3 |004D4BB0 | 55 | push ebp |004D4BB1 | 8BEC | mov ebp,esp | ecx=fs:2c+0+8004D4BB3 | 8B41 24 | mov eax,dword ptr ds:ecx+24 | eax=ecx+24=fs:2c+0+8+24004D4BB6 | 83F8 FF | cmp eax,FFF

9、FFFFF |004D4BB9 | 75 06 | jne wow.4D4BC1 |004D4BBB | 33C0 | xor eax,eax |004D4BBD | 5D | pop ebp |004D4BBE | C2 0800 | ret 8 |004D4BC1 | 8B51 1C | mov edx,dword ptr ds:ecx+1C | edx=fs:2c+0+8+1c004D4BC4 | 56 | push esi |004D4BC5 | 8B75 08 | mov esi,dword ptr ss:ebp+8 | 参数1004D4BC8 | 23C6 | and eax,es

10、i | 31数组上限=0x1F004D4BCA | 8D0440 | lea eax,dword ptr ds:eax+eax*2 | eax=eax*3004D4BCD | 8D4482 04 | lea eax,dword ptr ds:edx+eax*4+4 | eax=edx+4+参数1*0x0C /12=0x0C004D4BD1 | 8B40 04 | mov eax,dword ptr ds:eax+4 | eax=edx+4+参数1*0x0C+4004D4BD4 | A8 01 | test al,1 | eax=edx+8+参数1*0x0C004D4BD6 | 75 04 |

11、jne wow.004D4BDC | fs:2c+0+8+1c+8+0*0C /可能是怪物数组004D4BD8 | 85C0 | test eax,eax | 2C1DDFF0+下标*0C+8+964+5C /0.31/0.0x1F004D4BDA | 75 02 | jne wow.004D4BDE | eax=2C1DDFF0+00*0C+8+964+5C /对象004D4BDC | 33C0 | xor eax,eax | eax=0004D4BDE | 57 | push edi |004D4BDF | 8B7D 0C | mov edi,dword ptr ss:ebp+C | 参数

12、2004D4BE2 | 53 | push ebx |004D4BE3 | A8 01 | test al,1 | 循环开始 11111101 and 1 =1004D4BE5 | 75 2F | jne wow.004D4C16 | 判断eax是否是单数 /奇数 哪果eax是单数则跳出循环004D4BE7 | 85C0 | test eax,eax |004D4BE9 | 74 2B | je wow.004D4C16 | 判断eax=0则退出循环004D4BEB | 3970 18 | cmp dword ptr ds:eax+18,esi | 对象+18与 参数1比较004D4BEE |

13、 75 0F | jne wow.004D4BFF |004D4BF0 | 8B50 30 | mov edx,dword ptr ds:eax+30 | 对象+30 与 ID1 比较004D4BF3 | 3B17 | cmp edx,dword ptr ds:edi |004D4BF5 | 75 08 | jne wow.004D4BFF | 不相等 进入下一次循环004D4BF7 | 8B50 34 | mov edx,dword ptr ds:eax+34 | 对象+30 与ID1 比较 相等走到这里004D4BFA | 3B57 04 | cmp edx,dword ptr ds:ed

14、i+4 |004D4BFD | 74 19 | je wow.004D4C18 | 对象+30 对象+34 与ID1,ID2分别比较 如果相等 则返回对象004D4BFF | 8B59 1C | mov ebx,dword ptr ds:ecx+1C | 下一次循环004D4C02 | 8BD6 | mov edx,esi | edx=0C,1D004D4C04 | 2351 24 | and edx,dword ptr ds:ecx+24 | ecx+24=1F / edx=edx and 1F004D4C07 | 8D1452 | lea edx,dword ptr ds:edx+edx*

15、2 | edx=edx*3004D4C0A | 8D1493 | lea edx,dword ptr ds:ebx+edx*4 | edx=ebx+下标2*0x0C004D4C0D | 8B12 | mov edx,dword ptr ds:edx | edx=edx=ebx+下标2*0x0C004D4C0F | 03D0 | add edx,eax | edx=1C+对象004D4C11 | 8B42 04 | mov eax,dword ptr ds:edx+4 | 对象=1C+对象+4=对象+1C+4=对象+0x20004D4C14 | EB CD | jmp wow.004D4BE3

16、| 循环结束004D4C16 | 33C0 | xor eax,eax | eax=NULL /eax=0004D4C18 | 5B | pop ebx | 返回值 eax004D4C19 | 5F | pop edi |004D4C1A | 5E | pop esi | 角色对象,怪物对象,其它对象?004D4C1B | 5D | pop ebp | 2C318C50 角色对象004D4C1C | C2 0800 | ret 8 | eax+D0+174004D4C1F | CC | int3 | 2CFD05C8+D0+174004D4C20 | 56 | push esi |004D4B

17、FF | 8B59 1C | mov ebx,dword ptr ds:ecx+1C | 下一次循环004D4C02 | 8BD6 | mov edx,esi | edx=0C,1D004D4C04 | 2351 24 | and edx,dword ptr ds:ecx+24 | ecx+24=1F / edx=edx and 1F004D4C07 | 8D1452 | lea edx,dword ptr ds:edx+edx*2 | edx=edx*3004D4C0A | 8D1493 | lea edx,dword ptr ds:ebx+edx*4 | edx=ebx+下标2*0x0C004D4C0D | 8B12 | mov edx,dword ptr ds:edx | edx=edx=ebx+下标2*0x0C004D4C0F | 03D0 | add edx,eax | edx=1C+eax004D4C11 | 8B42 04 | mov eax,dword ptr ds:edx+4 eax=1C+eax+4mov eax, dword ptr ds:eax+0x20

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教育教学 > 教案课件

copyright@ 2008-2023 wnwk.com网站版权所有

经营许可证编号:浙ICP备2024059924号-2