|
Инжект таргета и др. - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
21.01.2012, 12:20
|
#1
|
|
|
|
Пехотинец
|
Регистрация: 17.05.2010
Сообщений: 53
Популярность: 204
Сказал(а) спасибо: 11
Поблагодарили 15 раз(а) в 6 сообщениях
|
Инжект таргета и др.
Обьясните на пальцах почему когда я ставлю вместо $B27A04 переменную которая содержит этот адрес, клиент вылетает (выделяет и вылетает)
Код:
MOV EDI, P1 // ?????? WID ???? ? ??????? EDI
MOV EBX,$006686E0
MOV EAX,DWORD PTR DS:[$B27A04] //
PUSH EDI // ; /Arg1
MOV ECX,DWORD PTR DS:[EAX+$20] // ; |
ADD ECX,$0EC // ; |
CALL EBX
Не могу одуплить, никак блин .
|
|
|
21.01.2012, 13:15
|
#2
|
|
|
|
Сержант
|
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
|
Re: Инжект таргета и др.
Потому что переменная находится вне зоны видимости потока, созданного в процессе игры. Если используешь инжектор кода, то юзай конкретные числа (в C++ для этого очень хорошо подходит #define, если в дельфи есть его аналоги - смело дерзай).
|
|
|
21.01.2012, 14:41
|
#3
|
|
|
|
Пехотинец
|
Регистрация: 17.05.2010
Сообщений: 53
Популярность: 204
Сказал(а) спасибо: 11
Поблагодарили 15 раз(а) в 6 сообщениях
|
Re: Инжект таргета и др.
|
|
|
21.01.2012, 15:20
|
#4
|
|
|
|
Разведчик
|
Регистрация: 09.06.2010
Сообщений: 4
Популярность: 119
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
|
Re: Инжект таргета и др.
1. Зачем тебе локальная переменная P2, если ты ее не используешь?
2. ИмяКакойтоПеременной.BA И BA - это разные вещи. СОВСЕМ разные.
Первое - описание поля в записи, у тебя может быть 100500 типов записей в каждом из которых есть поле .BA.
Второе - отдельная переменная (ну или константа). В пределах ее "области видимости" она уникальна.
3. Зачем тебе вообще использовать BA как переменную? Определи константу. При каком-нибудь глобальном обновлении поменяешь.
И, наконец,
4. То что процедура выделяет таргет НЕ значит что она "видит" ВА.
За выделение таргета отвечает код, на который ты переходишь по команде CALL EBX, причем EBX содержит уже готовый статический адрес $006686E0, никак не связанный с ВА.
А [ВА+20] - это _thiscall. В тех кусках кода что ты показал абсолютно не видно где определена эта переменная/константа с именем ВА, и что в ней находится.
|
|
|
21.01.2012, 15:52
|
#5
|
|
|
|
Пехотинец
|
Регистрация: 17.05.2010
Сообщений: 53
Популярность: 204
Сказал(а) спасибо: 11
Поблагодарили 15 раз(а) в 6 сообщениях
|
Re: Инжект таргета и др.
|
Цитата: |
|
|
|
|
|
|
|
|
|
1. Зачем тебе локальная переменная P2, если ты ее не используешь?
2. ИмяКакойтоПеременной.BA И BA - это разные вещи. СОВСЕМ разные.
Первое - описание поля в записи, у тебя может быть 100500 типов записей в каждом из которых есть поле .BA.
Второе - отдельная переменная (ну или константа). В пределах ее "области видимости" она уникальна.
3. Зачем тебе вообще использовать BA как переменную? Определи константу. При каком-нибудь глобальном обновлении поменяешь.
И, наконец,
4. То что процедура выделяет таргет НЕ значит что она "видит" ВА.
За выделение таргета отвечает код, на который ты переходишь по команде CALL EBX, причем EBX содержит уже готовый статический адрес $006686E0, никак не связанный с ВА.
А [ВА+20] - это _thiscall. В тех кусках кода что ты показал абсолютно не видно где определена эта переменная/константа с именем ВА, и что в ней находится.
|
|
|
|
|
|
извинтиляюсь, вместо ba в асме стоит P2 в которую помещается ba
вот так делал:
Код:
Procedure WithCat(hprocess:dword; id:integer);
var
aParams:tParams;
begin
aParams.WID:= id;
aParams.BA:= Base_addr; /// $B27A04
InjectFunc(hProcess, @TargetCall, @aParams, SizeOf(aParams ) );
.....
end;
procedure TargetCall(aPParams:PParams);Stdcall;
var
P1,P2: DWord;
begin
P1:=aPParams^.WID;
P2:=aPParams^.BA;
asm
MOV EDI, P1
MOV EBX, $006686E0
MOV EAX,DWORD PTR DS:[P2]
PUSH EDI
MOV ECX,DWORD PTR DS:[EAX+$20]
ADD ECX,$0EC
CALL EBX
end;
end;
Вот как то так...
|
|
|
21.01.2012, 16:24
|
#6
|
|
|
|
Сержант
|
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
|
Re: Инжект таргета и др.
Попробуй заключить ассемблерный код в команды pushad и popad:
Код:
asm
PUSHAD
MOV EDI, P1
MOV EBX, $006686E0
MOV EAX,DWORD PTR DS:[P2]
PUSH EDI
MOV ECX,DWORD PTR DS:[EAX+$20]
ADD ECX,$0EC
CALL EBX
POPAD
end;
|
|
|
21.01.2012, 16:50
|
#7
|
|
|
|
Разведчик
|
Регистрация: 09.06.2010
Сообщений: 4
Популярность: 119
Сказал(а) спасибо: 0
Поблагодарили 1 раз в 1 сообщении
|
Re: Инжект таргета и др.
1. Согласен с BritishColonist по поводу заключения ассемблерного кода в команды pushad и popad.
2. Так и не понял - ну зачем делать изврат с передачей константы через aParams.
Код:
procedure TargetCall(PParams: TPParams);Stdcall;
var WID: DWORD;
begin
WID := PParams^.dwP1;
asm
pushad
mov ecx, dword ptr [BaseAddress]
mov ecx, dword ptr [ecx+$20]
add ecx, $EC
mov edx, WID
push edx
mov eax, $006686E0
call eax
popad
end;
end;
Здесь BaseAddress определен выше как константа.
Зачем тебе передавать два параметра вместо одного? Создать трудности и героически их преодолеть?
Собственно и указание ds: в твоем коде лишнее, хотя и безвредное
|
|
|
21.01.2012, 17:43
|
#8
|
|
|
|
Сержант
|
Регистрация: 18.12.2009
Сообщений: 152
Популярность: 1075
Сказал(а) спасибо: 45
Поблагодарили 204 раз(а) в 67 сообщениях
|
Re: Инжект таргета и др.
procedure TargetCall(aPParams:PParams);Stdcall;
var
P1,P2: DWord;
begin
P1:=aPParams^.WID;
P2:=aPParams^.BA;
asm
MOV EDI, P1
MOV EBX, $006686E0
MOV EAX,DWORD PTR DS:[P2]
PUSH EDI
MOV ECX,DWORD PTR DS:[EAX+$20]
ADD ECX,$0EC
CALL EBX
end;
end;
так у меня тоже вылетает, я делаю так
procedure TargetCall(aPParams:PParams);Stdcall;
var
P1,P2: DWord;
begin
P1:=aPParams^.WID;
P2:=aPParams^.BA;
asm
MOV EDI, P1
MOV EBX, $006686E0
MOV EAX, P2
MOV EAX,DWORD PTR DS:[EAX]
PUSH EDI
MOV ECX,DWORD PTR DS:[EAX+$20]
ADD ECX,$0EC
CALL EBX
end;
end;
З.Ы. константы конечно хороши, но охота смещения из файла читать
|
|
|
21.01.2012, 20:16
|
#9
|
|
|
|
Пехотинец
|
Регистрация: 17.05.2010
Сообщений: 53
Популярность: 204
Сказал(а) спасибо: 11
Поблагодарили 15 раз(а) в 6 сообщениях
|
Re: Инжект таргета и др.
|
|
|
21.01.2012, 22:40
|
#10
|
|
|
|
Сержант
|
Регистрация: 11.12.2010
Сообщений: 110
Популярность: 541
Сказал(а) спасибо: 5
Поблагодарили 66 раз(а) в 39 сообщениях
|
Re: Инжект таргета и др.
пусть P3 - твоя переменная.
Код:
asm
pushad
...
mov eax,dword ptr ds:[P2] // base
add eax,P3
mov ecx,dword ptr ds:[eax]
...
end;
либо так (если тот код не сработает):
Код:
asm
pushad
...
mov eax,dword ptr ds:[P2] // base
mov edx,P3
mov ecx,dword ptr ds:[eax+edx]
...
end;
|
|
|
15.01.2015, 22:24
|
#11
|
|
|
|
Разведчик
|
Регистрация: 11.05.2014
Сообщений: 6
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Инжект таргета и др.
Подскажите пожалуйста новый инжект на таргет
|
|
|
19.01.2015, 06:43
|
#12
|
|
|
|
Пехотинец
|
Регистрация: 02.01.2010
Сообщений: 95
Популярность: 1542
Сказал(а) спасибо: 110
Поблагодарили 460 раз(а) в 288 сообщениях
|
Re: Инжект таргета и др.
var
P1: DWord;
begin
P1:=aPParams^.WID;
asm
MOV EDI, P1 // Вносим WID моба в регистр EDI
MOV EBX, $00746BD0 //Call Targeta
MOV EAX,DWORD PTR DS:[$CCEFAC]
PUSH EDI
MOV ECX,DWORD PTR DS:[EAX+$20]
ADD ECX,$0F4
CALL EBX
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 10:25.
|
|