|
[Руоф] Код для инжекта в память. - Разработка ПО для Perfect World - Бюро разработчиков Zhyk.Ru: создание ботов, снифферов и прочих программ для Perfect World |
13.06.2012, 18:35
|
#196
|
|
|
|
Пехотинец
|
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
|
Re: [Руоф] Код для инжекта в память.
|
Цитата: |
|
|
|
|
|
|
|
|
|
перевожу в шестнадцатиричный,получается 115D
|
|
|
|
|
|
Зачем?
1)Берём ID nps из базы(оно там в десятичном виде) к примеру 4445
2) прямо так и подставляем 4445 без знака $
либо если это нужно(зачем не понятно) переводим в шестнадцатиричный вид - $115D и подставляем шестнадцатиричное значение, естественно со значком $, иначе ругаться будет на символы (A..F) без указания того, что это шеснадцатиричное значение.
Ид взят правильно, но проблема видимо теперь не в этом.. А расстояние до НПС соблюдаете? Нужно стоять рядом именно с этим НПС который в базе(не с другими).
Добавлено через 11 минут
|
Цитата: |
|
|
|
|
|
|
|
|
|
но тоже ничего не происходит
|
|
|
|
|
|
Не вылетов, ни зависов, ничего совсем?
Прошу прощения, нужно не ид а вид прописывать(( каюсь, запутал, сильно не бить. Просто нужно брать из базы ид, а потом в массиве мобов\нпс искать его ВИД, и его уже нужно в инжект.. ещё раз сорь, что сразу не проверил, смутило вот это NPC ID:=aPParams^.Param1;
________________
╔═╗
║ ˑ ˑ ╬ ╬
╚═╝
Последний раз редактировалось dwa83; 13.06.2012 в 19:03.
Причина: Добавлено сообщение
|
|
|
13.06.2012, 23:22
|
#197
|
|
|
|
Пехотинец
|
Регистрация: 29.05.2010
Сообщений: 58
Популярность: 10
Сказал(а) спасибо: 80
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: [Руоф] Код для инжекта в память.
|
Цитата: |
|
|
|
|
|
|
|
|
|
нужно не ид а вид прописывать(( каюсь, запутал, сильно не бить. Просто нужно брать из базы ид, а потом в массиве мобов\нпс искать его ВИД, и его уже нужно в инжект..
|
|
|
|
|
|
вид можно узнать с помощи консоли пв? вот к примеру это он? $801045de;и его вписать
TalkToNPC( $801045de);
так? но куда тогда вставлять ид ?
|
|
|
14.06.2012, 00:25
|
#198
|
|
|
|
Пехотинец
|
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
|
Re: [Руоф] Код для инжекта в память.
________________
╔═╗
║ ˑ ˑ ╬ ╬
╚═╝
Последний раз редактировалось dwa83; 14.06.2012 в 00:47.
|
|
|
Пользователь сказал cпасибо:
|
|
14.06.2012, 02:00
|
#199
|
|
|
|
Пехотинец
|
Регистрация: 29.05.2010
Сообщений: 58
Популярность: 10
Сказал(а) спасибо: 80
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: [Руоф] Код для инжекта в память.
всёравно ничего не происходит(((
Код:
procedure TalkToNPCCall(aPParams:PParams);Stdcall;
var NPCID:DWORD;
BaseAddress,CallAddress:Pointer;
begin
BaseAddress:=ptr($00A571E0);
NPCID:=aPParams^.Param1;//$801044b2; //aPParams^.Param1;//$801045de;
CallAddress:=ptr($00630B60);
asm
pushad
mov edx, dword ptr [BaseAddress]
mov ecx, dword ptr [edx+$20]
push NPCID
add ecx, $EC
call CallAddress
popad
end;
end;
procedure TalkToNPC(NPCID:Cardinal);
var aParams:TParams;
v:HWND;
Pid,hProcess:DWord;
begin
v:=FindWindow(nil,Pchar('Perfect World'));
if v <> 0
then
begin
GetWindowThreadProcessId(v,@PId);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,PId);
aParams.Param1:=NPCID;
InjectFunc(PId,@TalkToNPCCall,@aParams,1);
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
TalkToNPC($801045de); //4445
end;
end.
|
|
|
14.06.2012, 09:51
|
#200
|
|
|
|
Рыцарь-капитан
|
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 324 раз(а) в 104 сообщениях
|
Re: [Руоф] Код для инжекта в память.
|
Цитата: |
|
|
|
|
|
|
|
|
|
Хотя я на 100% не уверен что WID не меняется..
|
|
|
|
|
|
WID - World ID - мировой ID - или ID объекта (как вы помните GameObject разделяется по типу NPC, Mob, Pet).
WID не меняется в рамках данной локации у NPC и Mob т.к. WID назначается единожды при создании объекта, но у Pet меняется каждый раз при вызове и отзыве. Поэтому лучше всего находить WID каждый раз перед инжектом по постоянному параметру ID (или Name).
|
Цитата: |
|
|
|
|
|
|
|
|
|
всёравно ничего не происходит(((
|
|
|
|
|
|
На сколько я вижу - это функция не TolkToNpc, а FullTarget (на днях обновлял у себя ее), поэтому "должно происходить" лишь выделение объекта (NPC в данном случае).
Вот как вызов FullTarget выглядит для 1.4.5 на asm:
Код:
'Full Target 1.4.5 RuOff
'Address Hex dump Command Comments
'0048D555 |> \A1 E071A500 MOV EAX,DWORD PTR DS:[0A571E0] ; Base Address
'0048D55A |. 8B48 20 MOV ECX,DWORD PTR DS:[EAX+20] ; Host Player Action Offset
'0048D55D |. 57 PUSH EDI ; /Arg1, target WID
'0048D55E |. 81C1 EC000000 ADD ECX,0EC ; |
'0048D564 |. E8 27321A00 CALL 00630790 ; \elementclient.00630790, call Full Target Functions
Добавлено через 7 минут
А вызываю диалог с NPC я уже давно пакетами, потому что проще. Пакет для вызова диалога с NPC:
23 00 D1 3C 10 80 - открыть диалог с NPC. ( c 2 по 5 = 4 байта - WID NPC)
________________
--------------------------------------------
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; 14.06.2012 в 10:02.
Причина: Добавлено сообщение
|
|
|
14.06.2012, 10:38
|
#201
|
|
|
|
Пехотинец
|
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
|
Re: [Руоф] Код для инжекта в память.
|
Цитата: |
|
|
|
|
|
|
|
|
|
На сколько я вижу - это функция не TolkToNpc, а FullTarget
|
|
|
|
|
|
Возможно куски их вызова похожи(так как всё кроме адреса одинаково)? Я сейчас не могу проверить, так ли это, потому что Target делаю пакетом, но вот беру из своего рабочего бота функцию открытия диалога с NPC:
Код:
//______________________________________________________________________________
// Открытие диалога с НПС по WID
void INJECTOR::OpenDialog(DWORD wid)
{
char fdata[30]="\x60\x8B\x15\x00\x00\x00\x00\x8B\x4A\x20\x68\x11\x11\x11\x11\x81\xC1\xEC\x00\x00\x00\xBB\x22\x22\x22\x22\xFF\xD3\x61\xC3";
DWORD func=F_DIALOG;
DWORD ba=BA;
memcpy(fdata+3,&ba,4);
memcpy(fdata+11,&wid,4);
memcpy(fdata+22,&func,4);
InjectFunction(&fdata,30);
}
Если загнать массив опкодов в Olly то получится вот это:
Что соответствует:
Код:
PUSHAD
MOV EDX,DWORD PTR DS:[BA]
MOV ECX,DWORD PTR DS:[EDX+20]
PUSH WID
ADD ECX,0EC
MOV EBX,00630B60
CALL EBX
POPAD
RETN
строчку MOV EBX,00630B60 я сам уже добавлял, раньше было просто CALL addr
Пожоже всё, кроме адреса
Адрес у меня такой:
Код:
#define F_DIALOG 0x630B60
Потому наверное просто похожие куски кода вызова, но странно что не работает, а у меня всё гуд..
________________
╔═╗
║ ˑ ˑ ╬ ╬
╚═╝
Последний раз редактировалось dwa83; 14.06.2012 в 10:46.
|
|
|
14.06.2012, 11:11
|
#202
|
|
|
|
Рыцарь-капитан
|
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 324 раз(а) в 104 сообщениях
|
Re: [Руоф] Код для инжекта в память.
________________
--------------------------------------------
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 работающий с включенной игрой.
--------------------------------------------
|
|
|
14.06.2012, 15:58
|
#203
|
|
|
|
Пехотинец
|
Регистрация: 29.05.2010
Сообщений: 58
Популярность: 10
Сказал(а) спасибо: 80
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: [Руоф] Код для инжекта в память.
Последний раз редактировалось Meg(0); 14.06.2012 в 16:01.
|
|
|
14.06.2012, 15:59
|
#204
|
|
|
|
Рыцарь-капитан
|
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 324 раз(а) в 104 сообщениях
|
Re: [Руоф] Код для инжекта в память.
________________
--------------------------------------------
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 работающий с включенной игрой.
--------------------------------------------
|
|
|
14.06.2012, 16:16
|
#205
|
|
|
|
Пехотинец
|
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
|
Re: [Руоф] Код для инжекта в память.
|
Цитата: |
|
|
|
|
|
|
|
|
|
я не умею ими пользоваться..не разбираюсь что как и от кудого((
|
|
|
|
|
|
Тут ничего сложного. Есть хотя бы 1 функция для инжекта которая норм работает? Если так, то 90% уже готово.
Если такая функция есть, то она инжектится и получает в качестве параметра какое нибудь значение, например WID, и затем с этим параметром вызывает клиентскую функцию. Нам нужна ещё одна функция, для инжекта, которая так же будет инжектиться и вызывать КЛИЕНТСКУЮ ФУНКЦИЮ ОТПРАВКИ ПАКЕТА. А в качестве параметров она получает не какие-нибудь WID или ID, а адрес, где лежит пакет и его длину(пакет кстати перед инжектом функции тоже надо заинжектить, чтобы лежал в адресном пространстве клиента). И сама функция посылки пакета есть на форуме и новый адрес клиентской функции отправки тоже имеется. В первом посте этой же темы есть и инжектор и функция для инжекта, которая отправляет пакет, а в теме адреса и оффсеты есть актуальный адрес вызова.
________________
╔═╗
║ ˑ ˑ ╬ ╬
╚═╝
|
|
|
14.06.2012, 22:00
|
#206
|
|
|
|
Пехотинец
|
Регистрация: 29.05.2010
Сообщений: 58
Популярность: 10
Сказал(а) спасибо: 80
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: [Руоф] Код для инжекта в память.
Последний раз редактировалось Meg(0); 14.06.2012 в 22:05.
|
|
|
14.06.2012, 22:53
|
#207
|
|
|
|
Рыцарь-капитан
|
Регистрация: 07.10.2009
Сообщений: 496
Популярность: 2687
Сказал(а) спасибо: 64
Поблагодарили 324 раз(а) в 104 сообщениях
|
Re: [Руоф] Код для инжекта в память.
|
Цитата: |
|
|
|
|
|
|
|
|
|
ичего рабочего нету..кроме WALK он вроде работает..
|
|
|
|
|
|
Ты же вроде на Delphi пишешь.
Вот готовый инжект на Delphi и исходники.
Попробуй переделать его под свои нужды.
________________
--------------------------------------------
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 работающий с включенной игрой.
--------------------------------------------
|
|
|
15.06.2012, 01:37
|
#208
|
|
|
|
Пехотинец
|
Регистрация: 29.05.2010
Сообщений: 58
Популярность: 10
Сказал(а) спасибо: 80
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: [Руоф] Код для инжекта в память.
да,я смотрел,пытался....но ничего..в данном случае я не знаю,куда вписывать WID нпс ... ,
вот тут к примеру при нажатии баттона активируется процедура винклоуз, которая тянет за собой win close call и тогда закрывается диалог по офсету нажатия кнопки закрытия диалога 41С
Код:
WinClose($41C); //Закрыть окно Торговли и Ремоната.
talktoNPC($438)// поидее открытие диалога с НПС как там написанно...но с каким нпс..(
|
|
|
15.06.2012, 01:48
|
#209
|
|
|
|
Пехотинец
|
Регистрация: 21.03.2012
Сообщений: 83
Популярность: 1178
Сказал(а) спасибо: 18
Поблагодарили 101 раз(а) в 53 сообщениях
|
Re: [Руоф] Код для инжекта в память.
|
Цитата: |
|
|
|
|
|
|
|
|
|
но с каким нпс..(
|
|
|
|
|
|
С нпс у которого WID - $438)) Но это значение - пример, нормальные выглядят как раз вот так
alkToNPC( $801045de)
Добавлено через 20 минут
|
Цитата: |
|
|
|
|
|
|
|
|
|
InjectFunc(PId,@TalkToNPCCall,@aParams,1);
|
|
|
|
|
|
Ёшкин-кошкин, что это у вас?
(PId,@TalkToNPCCall,@aParams, 1)
Гляньте теперь в оригинал:
InjectFunc(aHandle,@TalkToNPCCall,@aParams, SizeOf(aParams));
Но ведь у нас параметр DWORD, и SizeOf(DWORD) будет 4 а не 1 байт. Не в этом ли проблема?
________________
╔═╗
║ ˑ ˑ ╬ ╬
╚═╝
Последний раз редактировалось dwa83; 15.06.2012 в 02:10.
Причина: Добавлено сообщение
|
|
|
Пользователь сказал cпасибо:
|
|
15.06.2012, 15:57
|
#210
|
|
|
|
Пехотинец
|
Регистрация: 29.05.2010
Сообщений: 58
Популярность: 10
Сказал(а) спасибо: 80
Поблагодарили 0 раз(а) в 0 сообщениях
|
Re: [Руоф] Код для инжекта в память.
исправил,но всё так же ничего не происходит...ведь должен хотя б вылететь клиент если что-то не так? а у меня просто ничего не происходит
Код:
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 PacketCall(aPParams:PParams); stdcall;
var
CallAddress,pPacket:pointer;
Len:DWord;
begin
CallAddress:=Pointer($0063DB70); // Старый адрес - $005D7C30
Len:=aPParams^.Param1;
pPacket:=@aPParams^.Packet;
asm
pushad
mov ecx, dword ptr [PW_BASE_ADDRESS]
mov ecx, dword ptr [ecx+$20]
push Len
push pPacket
call CallAddress
popad
end;
end;
procedure TalkToNPCCall(aPParams:PParams);Stdcall;
var NPCID:DWORD;
BaseAddress,CallAddress:Pointer;
begin
NPCID:=aPParams^.Param1;
CallAddress:=ptr($00630B60);
asm
pushad
mov edx, dword ptr [PW_BASE_ADDRESS]
mov ecx, dword ptr [edx+$20]
push NPCID
add ecx, $EC
call CallAddress
popad
end;
end;
procedure TalkToNPC(NPCID:Cardinal);
var aParams:TParams;
v:HWND;
Pid,hProcess:DWord;
begin
v:=FindWindow(nil,Pchar('Perfect World'));
if v <> 0
then
begin
GetWindowThreadProcessId(v,@PId);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,PId);
aParams.Param1:=NPCID;
InjectFunc(hProcess,@TalkToNPCCall,@aParams,4);//пробовал hpocess, pid, хэндл окна...
end;
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
TalkToNPC($801045de);
end;
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 20:02.
|
|