PDA

Просмотр полной версии : WalkCall (поправте)


krysun
24.05.2012, 05:39
procedure WalkCall(aPParams: PWalkParams);Stdcall;
var
GameAddr, CallAddress1,CallAddress2,CallAddress3: Pointer;
x,y,z: single;
flying: DWORD;
begin
GameAddr := aPParams.GameAddr;
CallAddress1:=aPParams.CallAddress1; // Pointer($00494620);
CallAddress2:=aPParams.CallAddress2; // Pointer($00498290);
CallAddress3:=aPParams.CallAddress3; // Pointer($00494EC0);
x:=aPParams.x;
y:=aPParams.y;
z:=aPParams.z;
flying:=aPParams.flying;
asm
pushad
mov eax, GameAddr //00A57ACC
mov eax, dword ptr [eax]
mov esi, dword ptr [eax+$20]
mov ecx, dword ptr [esi+$FF4]
push 1
call CallAddress1
mov edi, eax
lea eax, dword ptr [esp+$0C]
push eax
push flying
mov ecx, edi
call CallAddress2
mov ecx, dword ptr [esi+$FF4]
push 0
push 1
push edi
push 1
call CallAddress3
mov eax, GameAddr //00A57ACC
mov eax, dword ptr [eax]
mov eax, dword ptr [eax+$20]
mov eax, dword ptr [eax+$FF4]
mov eax, dword ptr [eax+$30]
mov ecx, dword ptr [eax+$4]
mov eax, x
mov dword ptr[ecx+$20], eax
mov eax, z
mov dword ptr[ecx+$24], eax
mov eax, y
mov dword ptr[ecx+$28], eax
popad
end;
end;

Интересует выделение зелёным. Если еще что не так, поправьте плиз.
А вообще инжект Walk'a не поменялся случайно? А то ну никак не робить =(

pwgamer
24.05.2012, 10:14
mov eax, dword ptr [eax+$20] смени на 34
mov eax, dword ptr [eax+$FF4] на 10BC
lea eax, dword ptr [esp+$0C] на 18

krysun
24.05.2012, 13:23
Поменял. Работает. Лови спасибку!
Вот мой код:
PParams = ^TParams;
TParams = packed record
Packet: array [0..100] of byte;
Param1,Param2,Param3: DWord;
x,y,z:single;
Param4: array [1..100] of widechar;
end;
CONST
GAME_ADD=$00A57ACC;

procedure WalkCall(aPParams:PParams);Stdcall;
var CallAddress1,CallAddress2,CallAddress3:Pointer;
x,y,z:single;
flying:DWORD;
begin
CallAddress1:=Pointer($00494620);
CallAddress2:=Pointer($00498290);
CallAddress3:=Pointer($00494EC0);
x:=aPParams^.x;
y:=aPParams^.y;
z:=aPParams^.z;
flying:=aPParams^.Param1;
asm
pushad
mov eax, dword ptr [GAME_ADD]
mov esi, dword ptr [eax+$34]
mov ecx, dword ptr [esi+$10BC]
push 1
call CallAddress1
mov edi, eax
lea eax, dword ptr [esp+$18]
push eax
push flying
mov ecx, edi
call CallAddress2
mov ecx, dword ptr [esi+$10BC]
push 0
push 1
push edi
push 1
call CallAddress3
mov eax, dword ptr [GAME_ADD]
mov eax, dword ptr [eax+$34]
mov eax, dword ptr [eax+$10BC]
mov eax, dword ptr [eax+$30]
mov ecx, dword ptr [eax+$4]
mov eax, x
mov dword ptr[ecx+$20], eax
mov eax, z
mov dword ptr[ecx+$24], eax
mov eax, y
mov dword ptr[ecx+$28], eax
popad
end;
end;

procedure Walk(aHandle:dword;x,y,z:single;WalkMode:dword);
var aParams: TParams;
begin
aParams.Param1:=WalkMode;
aParams.x:=x;
aParams.y:=y;
aParams.z:=z;
InjectFunc(aHandle,@WalkCall,@aParams,SizeOf(aPara ms));
end;
Вызываю так (перс взлетает на высоту +20, должен быть на крыльях).
Может кому и пригодится.
procedure PristWalkUp;
var x,y,z:single;
bc,temp:dword;
begin
readprocessmemory(hProcess1,ptr(game_add),@temp,si zeof(temp),bc);
readprocessmemory(hProcess1,ptr(temp+OfPersPtr),@t emp,sizeof(temp),bc);
readprocessmemory(hProcess1,ptr(temp+OfPersX),@x,s izeof(x),bc);
form1.sEdit1.Text:=formatfloat('0.0000',x);
readprocessmemory(hProcess1,ptr(temp+OfPersY),@y,s izeof(y),bc);
form1.sEdit2.Text:=formatfloat('0.0000',y);
readprocessmemory(hProcess1,ptr(temp+OfPersZ),@z,s izeof(z),bc);
form1.sEdit3.Text:=formatfloat('0.0000',z);
walk(hProcess1,x,y,z+20,1);
end;

Meg(0)
24.05.2012, 17:11
почему персонаж делает вид,что бежит,но остаётся на своём месте??procedure WalkCall(aPParams:PParams);Stdcall;
var CallAddress1,CallAddress2,CallAddress3:Pointer;
x,y,z:single;
flying:DWORD;
begin
CallAddress1:=Pointer($00494620);
CallAddress2:=Pointer($00498290);
CallAddress3:=Pointer($00494EC0);
x:=aPParams^.x;
y:=aPParams^.y;
z:=aPParams^.z;
flying:=aPParams^.Param1;
asm
pushad
mov eax, dword ptr [PW_GAMERUN_ADDR]
mov esi, dword ptr [eax+$34]
mov ecx, dword ptr [esi+$10BC]
push 1
call CallAddress1
mov edi, eax
lea eax, dword ptr [esp+$18]
push eax
push flying
mov ecx, edi
call CallAddress2
mov ecx, dword ptr [esi+$10BC]
push 0
push 1
push edi
push 1
call CallAddress3
mov eax, dword ptr [PW_GAMERUN_ADDR]
mov eax, dword ptr [eax+$34]
mov eax, dword ptr [eax+$10BC]
mov eax, dword ptr [eax+$30]
mov ecx, dword ptr [eax+$4]
mov eax, x
mov dword ptr[ecx+$20], eax
mov eax, z
mov dword ptr[ecx+$24], eax
mov eax, y
mov dword ptr[ecx+$28], eax
popad
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
FlyPar:Dword;
X:Single;
Y:Single;
Z:Single;
v:HWND;
ProcessId:integer;
aparams:TParams;
begin
v:=FindWindow(nil, PChar(edit1.text));
GetWindowThreadProcessId(v,@ProcessId);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,false,pro cessid);
aparams.X:=20;
aParams.Y:=54;
aParams.Z:=36;
InjectFunc(hProcess,@WalkCall,@aParams,SizeOf(aPar ams));
end;

pwgamer
24.05.2012, 17:28
Потому что, не в полете.

Meg(0)
24.05.2012, 17:36
Потому что, не в полете.

у меня ж в коде просто передвижение к координатам вписаным,хоть в полёте хоть на земле,он имитирует полёт или бег,но остаётся на своём прежнем месте

vogel
24.05.2012, 22:39
Имитировать полёт нельзя - это не оргазм. Нужно чётко передавать флаг - на крыльях/под водой перс или стоит на земле.
Это важно, потому что в воде/в воздухе движение по Z - свободно, при движении по земле, клиент сам "прибивает" твою Z координату к нужному уровню высоты, соответственно передав своё Z в этм случае движения не будет.

Добавлено через 2 минуты
lea eax, dword ptr [esp+$18]

Не удивляйтесь потом, если у вас клиент будет внезапно выбивать...
Почему будет выбивать - спросите у гугла зачем используется регистр esp. =)))

Meg(0)
24.05.2012, 23:00
он как раз ИМИТИРУЕТ бежит просто на месте или летит на месте...

vogel
24.05.2012, 23:14
Ещё раз ВНИМАТЕЛЬНО прочитай мой пост - там написано почему такое происходит.

Meg(0)
24.05.2012, 23:28
я убрал Z всёравно тоже самое происходит

vogel
25.05.2012, 02:31
Какое слово в фразе "Нужно чётко передавать флаг - на крыльях/под водой перс или стоит на земле" тебе не понятно ?

krysun
25.05.2012, 03:20
При вызове walk(hProcess1,x,y,z+20,1);
1 - Лететь (если на крыльях)
0 - Плыть, бежать (если стоит на ногах, или в воде)

Kitsune
25.05.2012, 09:54
Какое слово в фразе "Нужно чётко передавать флаг - на крыльях/под водой перс или стоит на земле" тебе не понятно ?
Там все предложение непонятное /dgs

P.S. Они ведь читать не умеют, то что хочешь донести надо выделять очень жирным шрифтом и подсвечивать обязательно, и то не факт, что заметят /dgs

Meg(0)
25.05.2012, 23:36
krysun, я поставил "1" и он у меня и в полёте и на земле работает))

$maile
31.05.2012, 02:03
WalkCall/dgs