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 |
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; | |
Просмотров: 1588
| Теги: |
Всего комментариев: 0 | |