|
发表于 2010-3-8 22:31:30
|
显示全部楼层
回 51楼(麦德三世) 的帖子
因为 native 函数没有提供 PlayerSetAlliance,所以楼主就邪恶地把 Get 变成 Set 了 =_=
不过我觉得用利用完以后应该复原的:
SetAlliance(1,2);
SetAlliance(2,1);
SetAlliance(3,4);
SetAlliance(4,3);
PlayerGetAlliance(0,0,0);
最后加的这一行 player=0,用于把 PlayerGetAlliance 复原。
需要提前 VirtualProtect 使 0AAA5FA 这个地址可写。
当然硬编码的地址也需要重定位的。
- BYTE PlayerSetAllianceCode[] = {
- 0x55, // 00401310 push ebp
- 0x8B, 0xEC, // 00401311 mov ebp, esp
- 0x56, // 00401313 push esi
- 0x85, 0xC9, // 00401314 test ecx, ecx
- 0x75, 0x0B, // 00401316 jnz short 00401323
- 0xB8, 0xFA, 0xA5, 0xAA, 0x00, // 00401318 mov eax, 0AAA5FA
- 0xC7, 0x00, 0x40, 0xE7, 0xD6, 0x00, // 0040131D mov dword ptr [eax], 0D6E740
- 0xC1, 0xE2, 0x04, // 00401323 shl edx, 4
- 0x03, 0xD1, // 00401326 add edx, ecx
- 0x33, 0xF6, // 00401328 xor esi, esi
- 0x46, // 0040132A inc esi
- 0x8A, 0x4D, 0x08, // 0040132B mov cl, byte ptr [ebp+8]
- 0xD3, 0xE6, // 0040132E shl esi, cl
- 0x8D, 0x04, 0x95, 0xA0, 0xE8, 0xA9, 0x01, // 00401330 lea eax, dword ptr [edx*4+1A9E8A0]
- 0x09, 0x30, // 00401337 or dword ptr [eax], esi
- 0x5E, // 00401339 pop esi
- 0x5D, // 0040133A pop ebp
- 0xC2, 0x04, 0x00, // 0040133B retn 4
- };
复制代码 |
|