PwRuf3dn.ru
Меню сайта |
Категории раздела |
Гайды [4] |
Полезное для PW [4] |
Создание ботов [1] |
Разное [0] |
Баги/Хаки [38] |
Новости игрового мира [0] |
Мини-чат |
Наш опрос |
Поиск |
Последние файлы |
Последние статьи |
[06.04.2013] | [Гайды] |
Гайд по PwRuf – Точер (78) |
[23.03.2013] | [Гайды] |
Регистрация бота PwRuf-Crafter (492) |
[19.03.2013] | [Баги/Хаки] |
x2 фишки в кубе (0) |
[19.03.2013] | [Баги/Хаки] |
Как сохранить модель внешности без свитка перемен (0) |
Наша группа |
Главная » Статьи » Полезное для PW |
В категории материалов: 4 Показано материалов: 1-4 |
В полной теме вы найдете оффсеты для версии клиентов: Flugel PW, клиент 1.3.4 версии, сборка 2265, версия обновления 50 <Эпоха Генезиса, клиент 1.4.4 версии, сборка 2305, версия обновления 189-205 Extreme Phoenix, клиент 1.4.5 версии, сборка 2305, версия обновления 48 PW Пять стихий, UA, клиент 1.4.5 версии, сборка 2305, версия обновления 29 RUOFF Земли духов, клиент 1.4.5 версии, сборка 2305, версия обновления 207-221 PWI клиент 1.4.5 версии, сборка 2305, версия обновления 657-659 RUOFF Гнев Империи, клиент 1.4.5 версии, сборка 2305, версия обновления 237 RUOFF Возрождение династий, клиент 1.4.6 версии, сборка 2305, версия обновления 240-243 |
ItemGshop=record shop_id:integer; cat_index:integer; sub_cat_index:integer; surface_path:array[0..63] of wideChar; item_id:integer; item_amount:integer; sale_options:array [0..3] of record price:integer; expire_date:integer; duration:integer; start_date:integer; control_type:integer; day:integer; status:integer; flags:integer; end; description:array[0..63] of wideChar; name:array[0..63] of wideChar; gift_id:integer; gift_amount:integer; gift_duration:integer; log_price:integer; end; var MyArray: array of ItemGshop; /чытаем gshop.dat и получаем id в шопе и записываем в виде пакета procedure readelements; var elements: File of byte; buf:integer; i,j,intzn:integer; Path:String; begin Path:=Application.ExeName; Path:=ExtractFileDir(Path); if Path[Length(Path)]<>'\' then Path:=Path+'\'; AssignFile(elements,'gshop.data'); Reset(elements); blockRead(elements,buf,sizeof(buf)); blockRead(elements,intzn,sizeof(intzn)); SetLength(MyArray,intzn); for i:=0 to intzn-1 do begin blockRead(elements,MyArray[i].shop_id,sizeof(MyArray[i].shop_id)); blockREad(elements,MyArray[i].cat_index,sizeof(MyArray[i].cat_index)); blockREad(elements,MyArray[i].sub_cat_index,sizeof(MyArray[i].sub_cat_index)); blockREad(elements,MyArray[i].surface_path,128); blockREad(elements,MyArray[i].item_id,sizeof(MyArray[i].item_id)); blockREad(elements,MyArray[i].item_amount,sizeof(MyArray[i].item_amount)); for j:=0 to 3 do begin blockRead(elements,MyArray[i].sale_options[j].price,sizeof(MyArray[i].sale_options[j].price)); blockRead(elements,MyArray[i].sale_options[j].expire_date,sizeof(MyArray[i].sale_options[j].expire_date)); blockRead(elements,MyArray[i].sale_options[j].duration,sizeof(MyArray[i].sale_options[j].duration)); blockRead(elements,MyArray[i].sale_options[j].start_date,sizeof(MyArray[i].sale_options[j].start_date)); blockRead(elements,MyArray[i].sale_options[j].control_type,sizeof(MyArray[i].sale_options[j].control_type)); blockRead(elements,MyArray[i].sale_options[j].day,sizeof(MyArray[i].sale_options[j].day)); blockRead(elements,MyArray[i].sale_options[j].status,sizeof(MyArray[i].sale_options[j].status)); blockRead(elements,MyArray[i].sale_options[j].flags,sizeof(MyArray[i].sale_options[j].flags)); end; blockREad(elements,MyArray[i].description,1024); blockREad(elements,MyArray[i].name,64); blockREad(elements,MyArray[i].gift_id,sizeof(MyArray[i].gift_id)); blockREad(elements,MyArray[i].gift_amount,sizeof(MyArray[i].gift_amount)); blockREad(elements,MyArray[i].gift_duration,sizeof(MyArray[i].gift_duration)); blockREad(elements,MyArray[i].log_price,sizeof(MyArray[i].log_price)); end; CloseFile(elements); end; |
PParams = ^TParams; TParams = packed record WID: DWord; Packet: array [0..256] of byte; Param1,Param2,Param3: DWord; Param5:DWord; Param6: DWord; Param4: array [1..256] of widechar; BASE_ADD,Ofs,SendPacket:Pointer; end; //////////////////////////////////////////////////// procedure InjectFunc(ProcessID: Cardinal; Func: Pointer; aParams: Pointer; aParamsSize: DWORD); var hThread: THandle; lpNumberOfBytes: DWORD; ThreadAddr, ParamAddr: Pointer; begin if ProcessID<>0 then begin // ---- Write function address ThreadAddr := VirtualAllocEx(ProcessID, nil, 256, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE); WriteProcessMemory(ProcessID, ThreadAddr, Func, 256, lpNumberOfBytes); // ---- Address to write parameters ParamAddr := VirtualAllocEx(ProcessID, nil, aParamsSize, MEM_COMMIT or MEM_RESERVE, PAGE_EXECUTE_READWRITE); WriteProcessMemory(ProcessID, ParamAddr, aParams, aParamsSize, lpNumberOfBytes); // ---- Create a remote thread hThread := CreateRemoteThread(ProcessID, nil, 0, ThreadAddr, ParamAddr, 0, lpNumberOfBytes); // ---- Thread to wait for the end of WaitForSingleObject(hThread, INFINITE); VirtualFreeEx(ProcessID,ThreadAddr,0,MEM_RELEASE); VirtualFreeEx(ProcessID,ParamAddr,0,MEM_RELEASE); CloseHandle(hThread); end end; ////////////////////////////////////////////////////////////// procedure PacketCall(aPParams:PParams); stdcall; var CallAddress,pPacket,_BASE_ADD_,_Ofs,_SendPacket:Pointer; Len:DWord; begin _SendPacket:=aPParams^.SendPacket; CallAddress:=Pointer(_SendPacket); //адрес был устаревший Len:=aPParams^.Param1; _BASE_ADD_:=aPParams^.BASE_ADD; _Ofs:=aPParams^.Ofs; pPacket:=@aPParams^.Packet; asm pushad mov ecx, _BASE_ADD_ mov ecx, dword ptr [ecx] mov esi, _Ofs mov ecx, dword ptr [ecx+esi] //20 push Len push pPacket call CallAddress popad end; end; procedure StrToByte(Packet:String; var aParams:TParams); var i:integer; begin try i:=(length(Packet) div 2)-1; aParams.Param1:=i+1; for i:=0 to i do aParams.Packet[i]:=strtoint('$'+Packet[i*2+1]+Packet[i*2+2]); except showmessage ('проблема в байтах'); end; end; procedure Packet(Packet: String); var aParams: TParams; PID, hProcess: DWord; begin aParams.BASE_ADD := Pointer(BASE_ADD); aParams.Ofs :=Pointer(OffSets_Uchastvuelvotpravkepaketa); aParams.SendPacket:= Pointer(OffSets_SendPacket); GetWindowThreadProcessId(WID, @PID); hProcess:=OpenProcess(PROCESS_ALL_ACCESS, False, PID); StrToByte(Packet,aParams); InjectFunc(hProcess,@PacketCall,@aParams,sizeof(aParams)); CloseHandle(hProcess); //забыл дописать end; procedure TForm1.Button40Click(Sender: TObject); begin packet('2A00'); end; |
{==========================================| | Читаем DWORD | |==========================================} function getDWORD(data: dword): dword; var rw: dword; begin if Connected then begin ReadProcessMemory(hProcess,ptr(data),@Result,sizeof(Result),rw); end; end; {==========================================| | Читаем SINGLE | |==========================================} function getSINGLE(data: dword): single; var rw: dword; begin if Connected then begin ReadProcessMemory(hProcess,ptr(data),@Result,sizeof(Result),rw); end; end; {==========================================| | Читаем строку по адресу | |==========================================} function getSTRING(ReadAddress, SizeBytes: DWORD): string; var str: array[0..255] of WideChar; rw: dword; begin ReadProcessMemory(hProcess,Pointer(ReadAddress),@str,SizeBytes,rw); Result:= str; end; |