Спс, люди, со своими ошибками разобрался) но возник новый вопрос:
Для написания автособирателя ресов (копание киркой) можно обойтись просто работой с памятью или надо писать инжекты? а если надо то что мне почитать на этот случай?)
и еще, лазил в инете, нашел инъекции, но у меня не получилось их использовать:
Код:
//Стандартная функция для применения инжекта (ошибок не выдает)
procedure InjectFunc (ProcessID:Cardinal;Func:Pointer;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 MiningCall(aPParams:PParams);Stdcall;
var Pos,ItemSn:dword;
CallAddress:pointer;
begin
CallAddress:=ptr($005F5B40);
Pos:=aPParams^.Param1;
ItemSn:=aPParams^.Param2;
asm
pushad
push 0
push $C01 //ID Кирки (статический)
push Pos
push 0
push ItemSn
call CallAddress
add esp, $14
popad
end;
end;
procedure Mining(Pos,ItemSn:dword);
var aParams:TParams;
begin
aParams.Param1:=Pos; //Позиция кирки в инвентаре [0..N]
aParams.Param2:=ItemSn; //Серийный номер ресурса
InjectFunc(aHandle,@MiningCall,@aParams,SizeOf(aParams));
end;
Там, где выделено красным выдает ошибку. Помогите плиз
источник [Ссылки могут видеть только зарегистрированные пользователи. ]
Добавлено через 22 часа 55 минут
ап, проблема все еще не решена(. Помогите, пожалуйста)
Последний раз редактировалось 777gamer777; 15.11.2010 в 16:23.
Причина: Добавлено сообщение
а у меня проблемка с воллхаком.
если менять не только (в случае движения по х) [ba]+$1c+$20+$3c (положение камеры), а [ba]+$1c+$20+$638 (надпись над головой), то вполне себе перемещается, если зажимать пробел. даже можно перемещаться через пропасть - если зажимать пробел и постоянно напоминать высоте, что она не менялась.
чуть менее ректальный способ найти не удалось. как-нибудь ещё ведь можно дать серверу знать, что перемещение имело место быть, кроме как подпрыгнуть?
к сожалению, не получается фкурить, в каком месте ассемблер отправляет данные на сервер. конкретно то, что выдаётся на Find out what writes to this address -
004767D7 - d9 9e 38 06 00 00 - fstp dword ptr [esi+00000638]
но вот что с этим делать дальше - не слишком понятно. нагуглить тоже толком ничего не вышло.
Ну что ж, велосипед успешно изобретён! http://zhyk.ru/forum/showthread.php?t=133265
И самое главное – никаких еретических Framework’ов, только идеологически верный Delphi! Как говорится, скажи .NET Си Шарпу...
Добавлено:
Расковырял аук, там всё довольно просто. Собираюсь набросать нечто вроде "спутника барыги", который бы анализировал цены на выбранные товары.
Последний раз редактировалось Virial; 27.11.2010 в 21:25.
Ещё вопрос.
При работе с ботами и сканерами раздражает, что приходится запускать вместе с ними тормознутый клиент PW. Даже на 3ГГц-машине с 4 Гб памяти сложно запустить свыше 8 экземпляров клиента. Пока приходит на ум как-либо пропатчить его, чтоб убить нафиг весь графический движок, проигрывание звука и всё прочее, что жрёт ресурсы, оставив только собственно работу с сетью и памятью.
Конечно, удобнее было бы сделать аутгем-сканеры, но реально ли это вообще? Протокол обмена клиента с сервером известен или его расшифровка - нечто из области фантастики?