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) |
Наша группа |
Главная » Статьи |
Всего материалов в каталоге: 47 Показано материалов: 41-47 |
Страницы: « 1 2 3 4 5 |
В полной теме вы найдете оффсеты для версии клиентов: 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 |
unit setup; interface uses windows, iniFiles, SysUtils, Forms, Dialogs, StdCtrls; procedure rwSetup; var OffSets_BASE_ADD, BASE_ADD, OffSets_SendPacket, OffSets_GAME_ADD, OffSets_Player_ADD, OffSets_Player_Name_ADD, OffSets_Inventory_Array, OffSets_Yacheyka, OffSets_Item_Id, OffSets_Item_Count, OffSets_Max_Count_Yacheyek, OffSets_ExtraEffectsPtr, OffSets_ExtraEffectsId1, OffSets_ExtraEffectsId2, OffSets_ExtraEffectsId3, OffSets_ExtraEffectsValue1, OffSets_ExtraEffectsValue2, OffSets_ExtraEffectsValue3, OffSets_Uchastvuelvotpravkepaketa, OffSets_MoneyCount, OffSets_TargetWid, OffSets_ChatStart, OffSets_ChatNumber : dword; WID: THandle; hProcess: dword; Found_WID: array [0..10] of THandle; ElementClassName,ElementClassName2: string; implementation uses main, func, NewItem; procedure rwSetup; var ini: TIniFile; Path:String; offset:string; begin Path:=Application.ExeName; Path:=ExtractFileDir(Path); if Path[Length(Path)]<>'\' then Path:=Path+'\'; ini:=TIniFile.Create(Path+'setup.ini'); if ini.ReadString('config', 'Client_Version', '0')='Genesis' then offset:='Offsets_in_Genesis'; if ini.ReadString('config', 'Client_Version', '0')='Descent' then offset:='Offsets_in_Descent'; if ini.ReadString('config', 'Client_Version', '0')='Insidious' then offset:='Offsets_in_Insidious'; if ini.ReadString('config', 'Client_Version', '0')='Free_Servers' then offset:='Offsets_in_Free_Servers'; if ini.ReadString('config', 'Client_Version', '0')='RUOFF_Гнев_Империи' then offset:='Offsets_in_RUOFF_Гнев_Империи'; if ini.ReadString('config', 'Client_Version', '0')='RUOFF_Возрождение_династий' then offset:='Offsets_in_RUOFF_Возрождение_династий'; try OffSets_BASE_ADD:= strtoint('$'+ini.ReadString(offset, 'BASE_ADD', 'B27A04')); BASE_ADD:= strtoint('$'+ini.ReadString(offset, 'BASE_ADD', 'B27A04')); OffSets_GAME_ADD:= strtoint('$'+ini.ReadString(offset, 'GAME_ADD', 'B280C4')); OffSets_Player_ADD:= strtoint('$'+ini.ReadString(offset, 'Player_ADD', '34')); OffSets_Player_Name_ADD:= strtoint('$'+ini.ReadString(offset, 'Player_Name_ADD', '638')); OffSets_Inventory_Array:= strtoint('$'+ini.ReadString(offset, 'Inventory_Array', 'CAC')); OffSets_Yacheyka:= strtoint('$'+ini.ReadString(offset, 'Yacheyka', 'C')); OffSets_Item_Id:= strtoint('$'+ini.ReadString(offset, 'Item_Id', '8')); OffSets_Item_Count:= strtoint('$'+ini.ReadString(offset, 'Item_Count', '10')); OffSets_Max_Count_Yacheyek:= strtoint('$'+ini.ReadString(offset, 'Max_Count_Yacheyek', '10')); OffSets_MoneyCount:= strtoint('$'+ini.ReadString(offset, 'MoneyCount', '554')); OffSets_ExtraEffectsPtr:= strtoint('$'+ini.ReadString(offset, 'ExtraEffectsPtr', 'A4')); OffSets_ExtraEffectsId1:= strtoint('$'+ini.ReadString(offset, 'ExtraEffectsId1', '00')); OffSets_ExtraEffectsId2:= strtoint('$'+ini.ReadString(offset, 'ExtraEffectsId2', '1C')); OffSets_ExtraEffectsId3:= strtoint('$'+ini.ReadString(offset, 'ExtraEffectsId3', '38')); OffSets_ExtraEffectsValue1:= strtoint('$'+ini.ReadString(offset, 'ExtraEffectsValue1', '0C')); OffSets_ExtraEffectsValue2:= strtoint('$'+ini.ReadString(offset, 'ExtraEffectsValue2', '28')); OffSets_ExtraEffectsValue3:= strtoint('$'+ini.ReadString(offset, 'ExtraEffectsValue3', '44')); OffSets_Uchastvuelvotpravkepaketa:= strtoint('$'+ini.ReadString(offset, 'Используется при отправке пакета BA+$20 в версии 1.4.4', '20')); OffSets_SendPacket:= strtoint('$'+ini.ReadString(offset, 'SendPacket', '6737B0')); OffSets_TargetWid:= strtoint('$'+ini.ReadString(offset, 'TargetWid', 'BD4')); OffSets_ChatStart:= strtoint('$'+ini.ReadString(offset, 'ChatStart', 'BD4')); OffSets_ChatNumber:= strtoint('$'+ini.ReadString(offset, 'ChatNumber', 'BD4')); ElementClassName:= ini.ReadString('Element', 'ElementClassName', ''); ElementClassName2:= ini.ReadString('Element', 'ElementClassName2', ''); // ini.WriteBool('Offset', 'Key_Name3', True); // ini.WriteInteger('Offset', 'BASE_ADD', 2002); finally ini.Free; end; end; end. |
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; |
Данный бот умеет. - Автокрафт шмот/пух/бижутерий с фильтром более 45 эффектов и 65+ скиллов - скупает все необходимые ресы с шопа - Пользователь сам может добавлять все необходимые предметы для крафта - автокрафт шаров дракона - автокрафт трактатов (на уровне пакетов) - регрейд нирвана пух/шмот - версия клиента 1.4.4 и 1.4.5 Вот гайдик бота уже с описаниями всех функций Гайд по программе PwRuf – Crafter (на текущую версию v15.0) Запуск и настройки: 1. После того как скачали архив с программой разархивируем его. 2. Запускаем программу (если windows 7 то запускает от имени администратора). 3. Если всё нормально то откроется окно с ботом. 4. Когда первый раз запускаете то нажимаем на кнопку настройки и выбираем версию клиента своего сервера (доступны версии: Genesis (клиент версии 1.4.4), Descent (клиент версии 1.4.5), Сервер Insidious PvP (клиент версии 1.4.5)) |
гайд по боту появится в скором времени |