 |
Инжект копания реса - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
12.10.2012, 15:16
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 24.11.2010
 Сообщений: 9
 Популярность: 10
 Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
|
Инжект копания реса
Вылетает клиент при вызове инжекта, я думаю что проблема в строках mov ecx, dword ptr [GAME_ADRESS]//B4F5FC
mov ecx, dword ptr [ecx+$34] , но я не знаю на что их менять
Код:
procedure PickWalkCall(aPParams: PParams); stdcall;
var
WID, Typ: DWord; // это WID нужного нам реса/лута и его тип
CallAddress: DWord; // это адрес функции сбора реса в клиенте
begin
CallAddress := $00471860; //sumikot Cтарый:$004656F0
WID := aPParams^.WID;
Typ := aPParams^.Typ;
// начало ассемблерной вставки(это копия куска кода из клиента
// но WID подставляем мы а не клиент
asm
pushad
// подготовка параметров (WID и Type)
mov ecx, dword ptr [GAME_ADRESS]//B4F5FC
mov ecx, dword ptr [ecx+$34] //старый 20
push Typ // 0 - Сбор лута, 1 - Сбор шахт
push WID // SN ресурса
call CallAddress // вызов клиентской функции с подготовленными нами параметрами
popad
end; // конец ассемблерной вставки
end; // конец нашей функции
// функция копания ботом(выполняется в нашей проге, вызывает функцию инжекта InjectFunc,
//которая в свою очередь "запихивает" вышеуказанную функцию в клиент, создаёт поток и ждёт окончания работы потока)
procedure PickWalk(WID, Typ: DWord); // получает 2 параметра, WID и Type
var
aParams: TParams;
begin
aParams.WID := WID;
aParams.Typ := Typ;
// InjectFunc() - это функция которая копирует наш код в клиент (инжектит). Она есть в теме Инжектов
InjectFunc(hProcess, @PickWalkCall, @aParams, sizeof(aParams));
// @PickWalkCall - указатель на адрес нашей функции которая выше
// hProcess - хэндл процесса клиента(чтобы знать в какой процесс копировать нашу функцию)
// @aParams параметры для функции
// sizeof(aParams) размер параметров в байтах
end;
Поиск WID:
Код:
function TBot.SearchRes(var Resurs: TResurs): boolean;
var
numberres: DWord;
res, nob: Dword;
i: integer;
wx, wy, wz, wdist: single;
typ: byte;
begin
setlength(Resurses, 0);
numberres := Read_32(BASE_ADRESS);
numberres := Read_32(numberres + $1C);
numberres := Read_32(numberres + $1C);
numberres := Read_32(numberres + $28);
numberres := Read_32(numberres + $14);
for i := 0 to 768 do
begin
res := Read_32(BASE_ADRESS);
res := Read_32(res + $1C);
res := Read_32(res + $1C);
res := Read_32(res + $28);
res := Read_32(res + $18);
res := Read_32(res + i * $4);
res := Read_32(res + $4);
ReadProcessMemory(hProcess, pointer(res + $3C), @wx, sizeof(wx), nob);
ReadProcessMemory(hProcess, pointer(res + $44), @wy, sizeof(wy), nob);
ReadProcessMemory(hProcess, pointer(res + $40), @wz, sizeof(wz), nob);
ReadProcessMemory(hProcess, pointer(res + $150), @typ, sizeof(typ), nob);
ReadProcessMemory(hProcess, pointer(res + $158), @wdist, sizeof(wdist), nob);
ReadProcessMemory(hProcess, pointer(res + $110), @res, sizeof(res), nob);
if res <> 0 then
begin
form1.memo1.Lines.Add(inttohex(res, 2) +
' X= ' + IntToStr(round(wx / 10 + 400)) + ' Y= ' + IntToStr(round(wy / 10 + 550)) + ' Z= ' +
IntToStr(round(wz / 10)) + ' ' + IntToStr(typ));
if typ = 2 then
begin
setlength(Resurses, length(Resurses) + 1);
Resurs.distanse := round(wdist);
Resurs.x := wx;
Resurs.y := wy;
Resurs.z := wz;
Resurs.nx := wx/10+400;
Resurs.ny := wy/10+550;
Resurs.nz := wz/10;
resurs.typ:=typ;
Resurs.id := res;
Resurses[length(resurses) - 1] := Resurs;
//status := getres;
//walk(wx, wy, wz, 0);
// break;
end;
end;
end;
if length(Resurses) > 0 then
begin
Resurs:= resurses[0];
wdist := Resurses[0].distanse;
for i := 0 to length(Resurses) - 1 do
begin
if Resurses[i].distanse < wdist then
begin
Resurs:= resurses[i];
wdist := Resurses[i].distanse;
end;
end;
if Resurs.distanse <= 60 then
Result := true
else
result:=false;
// BA +0x1C +0x1C +0x28 +0x14 Count, dword /Количество/
//BA +0x1C +0x1C +0x28 +0x18 +(i*0x4) +0x4 /i = 0 - 0x300/
end
else
result:=false;
end;
Последний раз редактировалось крас; 12.10.2012 в 15:55.
|
|
|
12.10.2012, 20:18
|
#2
|
|
|
|
Разведчик
|
 Регистрация: 23.06.2012
 Сообщений: 43
 Популярность: 427
 Сказал(а) спасибо: 18
Поблагодарили 59 раз(а) в 35 сообщениях
|
Re: Инжект копания реса
крас, зачем изобретать велосипед, вот код
Mine_Drop (© gen-ostr, перенос на Delphi и "универсализация" - Dinmaite)
Адреса и офсеты я подправил для версии 1.4.5 Гнев Империи Руофф
Код:
procedure Mine_Drop(aPParams:PParams); stdcall;
var
addr,addr2:pointer;
x,y:dword;
begin
x:=aPParams^.param1; // param1 это WID реса
y:=aPParams^.param2; // param2 это _type реса
addr := Pointer($00471860); // $00471860 это PickWalk адрес
if y=2 then // если тип реса шахта то копать:
asm
pushad
mov ecx, dword ptr[$00B4EF34]; //$00B4EF34 это Base Address
mov ecx, dword ptr[ecx+$1C];
mov ecx, dword ptr[ecx+$34];
push 1
push x
CALL addr
popad
end
else //если иначе то собрать:
asm
pushad
mov ecx, dword ptr[$00B4EF34];
mov ecx, dword ptr[ecx+$1C];
mov ecx, dword ptr[ecx+$34];
push 0
push x
CALL addr
popad
end;
end;
почаще заходи сюда: http://zhyk.ru/forum/showthread.php?t=144558
и сюда: http://zhyk.ru/forum/showthread.php?t=287321
Последний раз редактировалось fds255; 12.10.2012 в 20:45.
|
|
|
14.10.2012, 16:55
|
#3
|
|
|
|
Рыцарь-лейтенант
|
 Регистрация: 31.01.2011
 Сообщений: 413
 Популярность: 14489
 Золото Zhyk.Ru: 300
 Сказал(а) спасибо: 77
Поблагодарили 361 раз(а) в 145 сообщениях
|
Re: Инжект копания реса
Зачем изобретать велосипед, если можно пакетом собрать?
________________
Больше не занимаюсь читами, ушёл в серверную часть. Новый ник - int 3.
P.S. Но я всё такой же добрый модератор раздела PW.
|
|
|
14.10.2012, 17:14
|
#4
|
|
|
|
Пехотинец
|
 Регистрация: 31.08.2010
 Сообщений: 64
 Популярность: 129
 Сказал(а) спасибо: 30
Поблагодарили 12 раз(а) в 7 сообщениях
|
Re: Инжект копания реса
________________
Спасибо.
|
|
|
15.10.2012, 09:46
|
#5
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 07.10.2009
 Сообщений: 496
 Популярность: 2687
 Сказал(а) спасибо: 64
Поблагодарили 325 раз(а) в 105 сообщениях
|
Re: Инжект копания реса
________________
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Совершенный автологин для Perfect World [RUOFF, PWI, Фришек 1.4.4 - 1.4.5]
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - Патч на Горны, Красный (да и любой) чат, Анфриз, Бесконечный зум, Моментальный разгон на полете для RUOFF, PWI и прочих 1.4.6 и фришек 1.4.4, 1.4.5.
--------------------------------------------
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). - патчер для серверов 1.4.5 и 1.4.4 работающий с включенной игрой.
--------------------------------------------
|
|
|
15.10.2012, 11:00
|
#6
|
|
|
|
Рыцарь-лейтенант
|
 Регистрация: 31.01.2011
 Сообщений: 413
 Популярность: 14489
 Золото Zhyk.Ru: 300
 Сказал(а) спасибо: 77
Поблагодарили 361 раз(а) в 145 сообщениях
|
Re: Инжект копания реса
________________
Больше не занимаюсь читами, ушёл в серверную часть. Новый ник - int 3.
P.S. Но я всё такой же добрый модератор раздела PW.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 13:25.
|
 |