郁金香初级班 5/22 29-30
目录:
29:分析角色对象属性
30:编写代码获取护甲值
29:内容 分析角色对象属性过程
1 //护甲值分析 2 EAX=25461348 3 EDX=00000000 4 指针基址可能是 =25461348 5 004F54DA - mov esi,[eax+edx*4+00000174] 6 7 查找25461348-查找访问过多 8 9 选择OD里面根跟 10 004F54DA - 8B B4 90 74010000 - mov esi,[eax+edx*4+00000174] 11 往上找 12 004F54 | 8B01 | mov eax,dword ptr ds:[ecx] | 13 14 15 [[ecx]+00000174] 16 17 006102 | 8D8E D0000000 | lea ecx,dword ptr ds:[esi+0xD0] | 18 19 20 [[esi+0xD0]+00000174] 21 22 23 24 006101 | 56 | push esi | 25 006101 | 57 | push edi | 26 006101 | 6A 00 | push 0x0 | 27 006101 | 6A 01 | push 0x1 | 28 006101 | 53 | push ebx | 29 006101 | E8 04DF2300 | call wow.84E0E0 | 30 006101 | 50 | push eax | 31 006101 | E8 0EC0FFFF | call wow.60C1F0 | 32 006101 | 6A 02 | push 0x2 | 33 006101 | 53 | push ebx | 34 006101 | 8BF0 | mov esi,eax | 35 36 重写汇编 获取eax 不向上找 37 参数一个 38 0489F61 1E36FC7C "player" 39 40 push eax | 41 call wow.60C1F0 | 42 add esp,4
30:编写代码
注意卡主线程
DWORD R4(UINT_PTR 地址) { __try { return *(DWORD*)地址;//ReadProcessMemory } __except (1) { return 0; } } // mzas 消息处理程序 VOID CALLBACK zhuxian(HWND h, UINT arg2, UINT_PTR arg3_id, DWORD time) { //每毫秒就要执行一次 无限次执行 KillTimer(h,10086); char* 参1 = "player"; DWORD call1= 0x60C1F0; int 返回值 = 0; _asm { push 参1 call call1 add esp, 4 mov 返回值,eax } DWORD hj= R4(R4(返回值 + 0xD0) + 0x174); char buf[299]; snprintf(buf, sizeof(buf), "%d", hj); if (hj != 0) { MessageBoxA(0, buf, "护甲", 0); } else { MessageBoxA(0, "获取失败", "护甲", 0); } } void mzas::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 HWND 游戏窗口句柄 = FindWindowA("GxWindowClassD3d", "魔兽世界"); ::SetTimer(游戏窗口句柄, 10086, 1, zhuxian); } void mzas::OnBnClickedButton2() { AllocConsole(); // TODO: 在此添加控件通知处理程序代码 } void mzas::OnBnClickedButton3() { FreeConsole();//关闭控制台 // TODO: 在此添加控件通知处理程序代码 }

浙公网安备 33010602011771号