|
Оффсет для SkillCall в переменной - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
29.09.2012, 09:20
|
#16
|
|
|
|
Рыцарь-капитан
|
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
|
Re: Оффсет для SkillCall в переменной
1097 "Печать бешеного волка" - это чей скилл?
Добавлено через 1 минуту
Код:
mov eax, CallAddress
call eax
Давай вернем это взад. Запишем так:
Остальное без изменений пока оставь.
________________
--------------------------------------------
PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
[for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
Последний раз редактировалось krukovis; 29.09.2012 в 09:23.
Причина: Добавлено сообщение
|
|
|
Пользователь сказал cпасибо:
|
|
29.09.2012, 09:40
|
#17
|
|
|
|
Пехотинец
|
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
|
Re: Оффсет для SkillCall в переменной
krukovis, Скилл сина, увеличивает урон от крит. ударов. При call CallAddress, опять же происходит краш.
|
|
|
29.09.2012, 10:57
|
#18
|
|
|
|
Рыцарь-капитан
|
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
|
Re: Оффсет для SkillCall в переменной
|
Цитата: |
|
|
|
|
|
|
|
|
|
[phallic],
Код:
var PWBA, PWHPS1, PWHPS2:dword;
begin
PWSkillCall:=StrToInt('$'+Ini.ReadString('Offsets', 'SkillCall', '492A90'));
PWHPS1:=StrToInt('$'+Ini.ReadString('Offsets', 'HostPlayerStructure1', '1C'));
PWHPS2:=StrToInt('$'+Ini.ReadString('Offsets', 'HostPlayerStructure2', '34'));
end;
Таким образом задаются оффсеты, перепроверил несколько раз, выводил в ShowMessage, они верны.
|
|
|
|
|
|
А че это за хрень:
Код:
var PWBA, PWHPS1, PWHPS2:dword;
Они у тебя должны глобально объявлятся, а не в теле процедуры.
И соответственно их asm функция не подтягивает и крашит клиент.
А точнее она берет такие же (видимо глобально объявленные) переменные, а они = 0, т.к. не переназначаются.
________________
--------------------------------------------
PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
[for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
|
|
|
29.09.2012, 10:58
|
#19
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: Оффсет для SkillCall в переменной
а теперь так пробуй
Код:
procedure SkillCall(aPParams:PParams); stdcall;
var CallAddress:pointer;
P1,P2:DWord; // В P2 пишешь PWSkillCall, записан в PParams, как Param2
begin
P2:=aPParams^.Param2;
P1:=aPParams^.Param1;
asm
pushad
mov ecx, dword ptr [PWBA]
mov ecx, dword ptr [ecx+PWHPS1]
mov ecx, dword ptr [ecx+PWHPS2]
push $FFFFFFFF
push $00
push $00
mov edx, P1
push edx
mov eax, dword ptr [P2]
call eax
popad
end;
end;
\\Upd: Поправил некоторые моменты
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.
Последний раз редактировалось VeTaL_UA; 29.09.2012 в 11:11.
Причина: поправил
|
|
|
Пользователь сказал cпасибо:
|
|
29.09.2012, 11:09
|
#20
|
|
|
|
Пехотинец
|
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
|
Re: Оффсет для SkillCall в переменной
krukovis, Нет-нет, это просто пример, каким образом я задаю оффсеты, естественно они у меня лежат в глобальных переменных и не задаются в теле процедуры.
VeTaL_UA, Краш.
|
|
|
29.09.2012, 11:12
|
#21
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: Оффсет для SkillCall в переменной
Поправил код же
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.
|
|
|
Пользователь сказал cпасибо:
|
|
29.09.2012, 11:25
|
#22
|
|
|
|
Пехотинец
|
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
|
Re: Оффсет для SkillCall в переменной
VeTaL_UA, И с поправленным кодом, тоже самое. \=
|
|
|
29.09.2012, 11:57
|
#23
|
|
|
|
Лейтенант-командор
|
Регистрация: 12.08.2010
Сообщений: 727
Популярность: 30569
Золото Zhyk.Ru: 1
Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: Оффсет для SkillCall в переменной
Тогда либо инжект кривой, либо руки, ну что-то из них двух явно спиралевидное...
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.
|
|
|
Пользователь сказал cпасибо:
|
|
29.09.2012, 12:39
|
#24
|
|
|
|
Пехотинец
|
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
|
Re: Оффсет для SkillCall в переменной
VeTaL_UA, Возможно, но проблему все-таки решить хочется. Не подскажете где ошибка?
Код:
var PWBA, PWHPS1, PWHPS2, PWSkillCall:dword;
hProcessGlob:integer;
procedure TMainForm.FormCreate(Sender: TObject);
var Ini:TIniFile;
begin
Ini:=TIniFile.Create(ExtractFilePath(ParamStr(0))+'Config.ini');
PWBA:=StrToInt('$'+Ini.ReadString('Offsets', 'BaseAddress', '00A571E0'));
PWSkillCall:=StrToInt('$'+Ini.ReadString('Offsets', 'SkillCall', '492A90'));
PWHPS1:=StrToInt('$'+Ini.ReadString('Offsets', 'HostPlayerStructure1', '1C'));
PWHPS2:=StrToInt('$'+Ini.ReadString('Offsets', 'HostPlayerStructure2', '34'));
Ini.Free;
end;
procedure InjectFunc(ProcessID: Cardinal; Func, aParams: Pointer;
aParamsSize: DWord);
var
hThread: THandle;
lpNumberOfBytes: DWord;
ThreadAddr, ParamAddr: Pointer;
begin
if ProcessID<>0 then
begin
ThreadAddr := VirtualAllocEx(ProcessID, nil, 256, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(ProcessID, ThreadAddr, Func, 256, lpNumberOfBytes);
ParamAddr := VirtualAllocEx(ProcessID, nil, aParamsSize, MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(ProcessID, ParamAddr, aParams, aParamsSize, lpNumberOfBytes);
hThread := CreateRemoteThread(ProcessID, nil, 0, ThreadAddr, ParamAddr, 0, lpNumberOfBytes);
WaitForSingleObject(hThread, INFINITE);
CloseHandle(hThread);
VirtualFreeEx(ProcessID, ParamAddr, 0, MEM_RELEASE);
VirtualFreeEx(ProcessID, ThreadAddr, 0, MEM_RELEASE);
end
end;
procedure SkillCall(aPParams:PParams); stdcall;
var P1,P2:DWord;
begin
P2:=aPParams^.Param2;
P1:=aPParams^.Param1;
asm
pushad
mov ecx, dword ptr [PWBA]
mov ecx, dword ptr [ecx+PWHPS1]
mov ecx, dword ptr [ecx+PWHPS2]
push $FFFFFFFF
push $00
push $00
mov edx, P1
push edx
mov eax, dword ptr [P2]
call eax
popad
end;
end;
procedure Skill(SkillID:DWord);
var aParams:TParams;
begin
aParams.Param1:=SkillID;
aParams.Param2:=PWSkillCall;
InjectFunc(hProcessGlob,@SkillCall,@aParams,SizeOf(aParams));
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
Skill(StrToInt(edit1.text));
end;
Последний раз редактировалось Zo_Om4eG; 29.09.2012 в 16:37.
|
|
|
29.09.2012, 16:30
|
#25
|
|
|
|
Рыцарь-капитан
|
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
|
Re: Оффсет для SkillCall в переменной
А где код чтения из ini файла?
________________
--------------------------------------------
PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
[for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
|
|
|
29.09.2012, 16:38
|
#26
|
|
|
|
Пехотинец
|
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
|
Re: Оффсет для SkillCall в переменной
krukovis, Добавил.
|
|
|
30.09.2012, 19:47
|
#27
|
|
|
|
Рыцарь-капитан
|
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
|
Re: Оффсет для SkillCall в переменной
________________
--------------------------------------------
PerfectAutoLogin v 7.4 - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
[for 1.4.6] PW Patcher 12.0 - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
InGamePatcher 1.2 - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
|
|
|
Пользователь сказал cпасибо:
|
|
30.09.2012, 19:56
|
#28
|
|
|
|
Пехотинец
|
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
|
Re: Оффсет для SkillCall в переменной
krukovis, Данные полноценно доходят из ини файла в программу, по скольку чтение памяти работает, да и проверял уже, выводил значение переменной SkillCall. В последнем коде я брал пример VeTaL_UA, потому как с твоим тоже происходил краш.(Только что попробывал еще раз)
Добавлено через 39 минут
Ну вообщем сам поэкспериментировал немного по процедурам, которые дали. Все вышло однако! Спасибо всем за помощь, довольно затянулось решение этой проблемы. Рабочий код:
Код:
procedure SkillCall(aPParams:PParams); stdcall;
var SCFI:pointer;
P1, BAFI, HPS1FI, HPS2FI:DWord;
begin
P1:=aPParams^.Param1;
BAFI:=aPParams^.Param2;
HPS1FI:=aPParams^.Param3;
HPS2FI:=aPParams^.Param5;
SCFI:=Pointer(aPParams^.Param6);
asm
pushad
mov eax, BAFI
mov ecx, dword ptr [eax]
mov eax, HPS1FI
mov ecx, dword ptr [ecx+eax]
mov eax, HPS2FI
mov ecx, dword ptr [ecx+eax]
push $FFFFFFFF
push $00
push $00
mov edx, P1
push edx
call SCFI
popad
end;
end;
procedure Skill(SkillID:DWord);
var aParams:TParams;
begin
aParams.Param1:=SkillID;
aParams.Param2:=PWBA;
aParams.Param3:=PWHPS1;
aParams.Param5:=PWHPS2;
aParams.Param6:=PWSkillCall;
InjectFunc(hProcessGlob,@SkillCall,@aParams,SizeOf(aParams));
end;
Последний раз редактировалось Zo_Om4eG; 30.09.2012 в 20:46.
Причина: Добавлено сообщение
|
|
|
02.10.2012, 21:09
|
#29
|
|
|
|
Разведчик
|
Регистрация: 27.05.2012
Сообщений: 7
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: Оффсет для SkillCall в переменной
А что изменилось? Ты просто засунул в параметры все переменные? Ничего больше не менял?
|
|
|
03.10.2012, 09:19
|
#30
|
|
|
|
Пехотинец
|
Регистрация: 20.12.2010
Сообщений: 58
Популярность: 50
Сказал(а) спасибо: 22
Поблагодарили 36 раз(а) в 15 сообщениях
|
Re: Оффсет для SkillCall в переменной
[phallic], Ну сравни 2 различных кода и увидишь разницу.
Старый:
Код:
procedure SkillCall(aPParams:PParams); stdcall;
var CallAddress:pointer;
P1:DWord;
begin
CallAddress:=Pointer(PWSkillCall);
P1:=aPParams^.Param1;
asm
pushad
mov ecx, dword ptr [PWBA]
mov ecx, dword ptr [ecx+PWHPS1]
mov ecx, dword ptr [ecx+PWHPS2]
push $FFFFFFFF
push $00
push $00
mov edx, P1
push edx
call CallAddress
popad
end;
end;
Новый:
Код:
procedure SkillCall(aPParams:PParams); stdcall;
var SCFI:pointer;
P1, BAFI, HPS1FI, HPS2FI:DWord;
begin
P1:=aPParams^.Param1;
BAFI:=aPParams^.Param2;
HPS1FI:=aPParams^.Param3;
HPS2FI:=aPParams^.Param5;
SCFI:=Pointer(aPParams^.Param6);
asm
pushad
mov eax, BAFI
mov ecx, dword ptr [eax]
mov eax, HPS1FI
mov ecx, dword ptr [ecx+eax]
mov eax, HPS2FI
mov ecx, dword ptr [ecx+eax]
push $FFFFFFFF
push $00
push $00
mov edx, P1
push edx
call SCFI
popad
end;
end;
procedure Skill(SkillID:DWord);
var aParams:TParams;
begin
aParams.Param1:=SkillID;
aParams.Param2:=PWBA;
aParams.Param3:=PWHPS1;
aParams.Param5:=PWHPS2;
aParams.Param6:=PWSkillCall;
InjectFunc(hProcessGlob,@SkillCall,@aParams,SizeOf(aParams));
end;
Записал в параметры глобальные переменные с оффсетами, передал значения из параметров в локальные переменные, помещал локальные переменные в регистр и использовал.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 21:56.
|
|