 |
Delphi XE2 - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
11.07.2012, 11:56
|
#16
|
|
|
|
Сержант
|
 Регистрация: 19.12.2009
 Сообщений: 130
 Популярность: 34
 Сказал(а) спасибо: 21
Поблагодарили 86 раз(а) в 32 сообщениях
|
Re: Delphi XE2
С поиском окна нет проблем. Мне больше нужна информация как сделать так чтобы все пакеты шли только на того перса которого выберешь
|
|
|
11.07.2012, 13:15
|
#17
|
|
|
|
Лейтенант-командор
|
 Регистрация: 12.08.2010
 Сообщений: 727
 Популярность: 30569
 Золото Zhyk.Ru: 1
 Сказал(а) спасибо: 57
Поблагодарили 645 раз(а) в 386 сообщениях
|
Re: Delphi XE2
Код:
type
PParams = ^TParams;
TParams = packed record
Packet:array [0..100] of byte;
Param1:DWord;
end;
. . .
var
FID:array[0..9] of DWord;
. . .
procedure FindClientPW;
var
Wnd:THandle;
Hndl,Nick,Cl:array[0..255] of Char;
ibuf,BC,hProcess:size_t;
i:Integer;
const
BA=$00A571E0;
begin
i:=0;
Wnd:=FindWindow(nil,nil);
while Wnd<>0 do
begin
GetClassName(Wnd,Cl,100);
if Cl='ElementClient Window' then
begin
GetWindowText(Wnd,Hndl,SizeOf(Hndl));
GetWindowThreadProcessId(Wnd,@FID[i]);
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,FID[i]);
ReadProcessMemory(hProcess,ptr(BA),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$1C),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$34),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf+$66C),@ibuf,sizeof(ibuf),BC);
ReadProcessMemory(hProcess,ptr(ibuf),@Nick,sizeof(Nick),BC);
Form1.ComboBox1.Items.Add('Handle: '+Hndl+'; Nick: '+Nick+';');
inc(i);
end;
Wnd:=GetNextWindow(Wnd,GW_HWNDNEXT);
Application.ProcessMessages;
end;
CloseHandle(hProcess);
end;
. . .
procedure TForm1.FormCreate(Sender: TObject);
begin
FindClientPW;
end;
. . .
procedure InjectFunc(ProcessID: Cardinal; Func, aParams: Pointer;
aParamsSize: DWord);
var
hThread:THandle;
lpNumberOfBytes:size_t;
lpNumberOfBytes2: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, lpNumberOfBytes2);
// ---- Ожидаем завершения функции
WaitForSingleObject(hThread, INFINITE);
// ---- подчищаем за собой
CloseHandle(hThread);
VirtualFreeEx(ProcessID, ParamAddr, 0, MEM_RELEASE);
VirtualFreeEx(ProcessID, ThreadAddr, 0, MEM_RELEASE);
end
end;
. . .
procedure PacketCall(aPParams:PParams); stdcall;
var
CallAddress,pPacket:Pointer;
Len:DWord;
begin
CallAddress:=Pointer(;$0063DB70);
Len:=aPParams^.Param1;
pPacket:=@aPParams^.Packet;
asm
pushad
mov ecx, dword ptr [$A571E0]
mov ecx, dword ptr [ecx+$20]
push Len
push pPacket
call CallAddress
popad
end;
end;
. . .
procedure StrToByte(Packet:string; var aParams:TParams);
var
i:integer;
begin
i:=(length(Packet) div 2)-1;
aParams.Param1:=i+1;
for i:=0 to 1 do
begin
aParams.Packet[i]:=strtoint('$'+Packet[i*2+1]+Packet[i*2+2]);
end;
end;
. . .
procedure Packet(Packet:string);
var
aParams:TParams;
hProcess:DWord;
begin
hProcess:=OpenProcess(PROCESS_ALL_ACCESS,False,FID[ComboBox1.ItemIndex]);
StrToByte(Packet,aParams);
InjectFunc(hProcess,@PacketCall,@aParams,sizeof(aParams));
CloseHandle(hProcess);
end;
. . .
procedure TForm1.Button1Click(Sender: TObject);
begin
Packet({тут пакет, что ты хочешь отправить});
end;
. . .
end.
Не понимаю, неужели это так сложно самому сделать?!?
________________
Принимаются пожертвования любых размеров в фонд поддержки начинающих программистов Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Кошельки: WMZ - Z276844220882; WMR - R231028582939; WMU - U394136909210; ЯД - 410011494605270.
Perfect World: PWDatabaseScanner, Client, PWNickRenamer, PWClientRenamer, База логинов PW, Гайд по варУ, Зарабатываем репутацию.
Delphi: Авторизация на сайте с помощью Indy, Загрузка изображений с интернета в TImage с помощью Indy, Автоматическая смена стандартной версии Indy в Delphi на Indy 10.0.76 / 10.1.5, Основы парсинга с помощью Indy, Делаем Updater до программы с помощью Indy.
Other: ShowIP, FFUUU смайлы в QIP, Как играть в Minecraft (видеокурс), Как мы захватили человечество :D, Энергия в Лицемер/TopFace, PasGen.
|
|
|
11.07.2012, 17:15
|
#18
|
|
|
|
Рыцарь-капитан
|
 Регистрация: 14.06.2012
 Сообщений: 511
 Популярность: 7566
 Сказал(а) спасибо: 4
Поблагодарили 181 раз(а) в 88 сообщениях
|
Re: Delphi XE2
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
[Помогите!] Delphi
|
NewSnoopy |
Общение и обсуждение |
22 |
16.11.2011 22:11 |
[Информация] Помощь в Delphi 7 и в других версиях Delphi
|
Babls77 |
Pascal/Delphi |
4 |
03.11.2011 22:27 |
Delphi 7!
|
danil_ |
Общение и обсуждение CrossFire |
5 |
12.07.2011 07:56 |
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 23:55.
|
 |