 |
Нужна помощь. - Общение разработчиков - Программирование для Perfect World, общение и обсуждене разработок |
29.11.2012, 00:21
|
#1
|
|
|
|
Разведчик
|
 Регистрация: 14.01.2011
 Сообщений: 19
 Популярность: 12
 Сказал(а) спасибо: 2
Поблагодарили 14 раз(а) в 6 сообщениях
|
Нужна помощь.
Нужна информация и помощь в разборке кода, от и до, если возможно с пояснением ошибок. Прошу без лишнего флуда.
Примерно половину кода понял, от Google'л, но остались белые пятна.
Вот код, созданный по примерам из интернета и разных тем...
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
PParams = ^TParams;
TParams = packed record
Packet: array [0..100] of byte;
Param1,Param2,Param3: DWord;
Param4: array [1..100] of widechar;
end;
const
PW_BASE_ADDRESS = $00A591E0;
PW_GAMERUN_ADDR = $00A59ACC;
PC_ADDR = $0063F890;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure InjectFunc(ProcessID: Cardinal; Func, 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 SkillCall(aPParams:PParams); stdcall;
var CallAddress:pointer;
P1:DWord;
begin
CallAddress:=Pointer(PC_ADDR);
P1:=aPParams^.Param1;
asm
pushad
mov ecx, dword ptr [PW_BASE_ADDRESS]
mov ecx, dword ptr [ecx+$1C]
mov ecx, dword ptr [ecx+$20]
push $FFFFFFFF
push $00
push $00
mov edx, P1
push edx
call CallAddress
popad
end;
end;
Зачем это и нужно ли оно вообще если есть код ниже...
//procedure Skill(SkillID:DWord);
//begin
// aParam.Param1:=SkillID;
// InjectFunc(ProcessID,@SkillCall,@aParam,SizeOf(aParam));
//end;
В данном коде Delphi7 ругается на PID, прошу поясните что это, пишет неверный идентификатор...
procedure TForm1.Button1Click(Sender: TObject);
var
aParams: TParams;
PID, hProcess: DWord;
begin
GetWindowThreadProcessId(FindWindow('Perfect World Window',nil)PID);
hProcess:= OpenProcess(PROCESS_ALL_ACCESS, False, PID);
aParam.Param1:= Edit1.text; <== можно ли написать так вместо skillid.
InjectFunc(hproess,@SkillCall,@aparams,sizeof(aParam));
end;
end.
Прошу помогите, пытаюсь разобраться да голова не варит =/ руки вроде не из зада ...
________________
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий).
Последний раз редактировалось mistik1; 29.11.2012 в 00:23.
Причина: Исправление опечаток, добавление небольшого участка кода.
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 09:22.
|
 |