Что нового

[Процессы] Ввод данных в процесс PerfectWorld

anonymous7

Знающий
Сообщения
40
Репутация
8
Доброго времени! Помогите пожалуйсто переделать данную функция на AutoIt
Для начала нам потребуется инжектор (© BuBucekTop):
Код:
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;
Таким образом мы создаем свой поток в памяти выделенной клиенту (тоесть по сути вставить в клиент свой код)
И тип данных:
Код:
type
PParams = ^TParams;
TParams = packed record
WID: DWord;
end;
Теперь подготовим код, который и будет кодом нашего потока.
И который будет вызывать функцию клиента.
По сути повторям код клиента (добавив передачу параметров и прочую обвязку):
Код:
004619CD |. A1 0CB9A500 MOV EAX,DWORD PTR DS:[A5B90C]
004619D2 |. 57 PUSH EDI ; /Arg1
004619D3 |. 8B48 20 MOV ECX,DWORD PTR DS:[EAX+20] ; |
004619D6 |. 81C1 EC000000 ADD ECX,0EC ; |
004619DC |. E8 8F501A00 CALL elementc.00606A70 ; \elementc.00606A70
на выбранном нами языке программирования (в моем случае - Delphi)
Код:
procedure TargetCall(aPParams:blum:Params);Stdcall; //StdCall - обязательно, указывает что аргументы попадают в стек в обратном (стандартном) порядке
var //
P1: DWord; //
begin //
P1:=aPParams^.WID; //
asm
MOV EDI, P1 // Вносим WID моба в регистр EDI
MOV EBX, $00606A70 // Вносим в свободный регистр адрес функции
MOV EAX,DWORD PTR DS:[$A5B90C] //
PUSH EDI // ; /Arg1
MOV ECX,DWORD PTR DS:[EAX+$20] // ; |
ADD ECX,$0EC // ; |
CALL EBX // ; \elementc.00606A70
end;
end;
Кидаем на форму кнопку, в обработчике OnClick пишем
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
aParams: TParams;
PID, hProcess: DWord;
begin
GetWindowThreadProcessId( FindWindow('ElementClient Window', nil), @PID);
hProcess:= OpenProcess(PROCESS_ALL_ACCESS, False, PID);
aParams.WID:= StrToInt('$' + Edit1.Text); // WID персонажа\моба\NPC
InjectFunc(hProcess, @TargetCall, @aParams, SizeOf(aParams ) );
CloseHandle(hProcess);
end;
Вот это главная проверка, если инжект прошел - значит все верно.
Если инжект не прошел - значит все плохо.
Пример программы - в аттаче.
Взято из вот этой статьи http://zhyk.ru/forum/showthread.php?t=207760
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: [Процессы] Ввод данных в процесс

внедрение данных в процесс чего? в нотпад?
 

greshnik77

Новичок
Сообщения
27
Репутация
0
Re: [Процессы] Ввод данных в процесс

Вот тема про чтение данных из памяти http://autoit-script.ru/index.php?topic=1600.0
Запись данных на примере из той темы _MemoryWrite($mem, $DllInformation, 'то что будим записывать', 'тип данных')
 
Автор
A

anonymous7

Знающий
Сообщения
40
Репутация
8
Re: [Процессы] Ввод данных в процесс

Вот тема про чтение данных из памяти [Автоматизация] Работа с памятью AION на примере HP чара
Запись данных на примере из той темы _MemoryWrite($mem, $DllInformation, 'то что будим записывать', 'тип данных')
Круто! Но нужна помощь в переводе с Delphi на аутоит, а не ссылка на информацию, где голову сломать можно!
 

Fever

Скриптер
Сообщения
308
Репутация
112
Re: [Процессы] Ввод данных в процесс

anonymous7 [?]
в приведенном вами коде на Delphi я вижу вставки кода ассемблера, в AutoIt таковых вставок нет
 

nonenicks

Новичок
Сообщения
18
Репутация
3
Re: [Процессы] Ввод данных в процесс

Согласно принципам архитектуры эвм данные = апкоды и наоборот...А AutoIT вроде как имеет средства записи данных в память процесса.

Но вообщем-то тема интересная, только не зная ассемблера абсалютно бесполезная=) Апкоды можно взять и intel сайта ... они стандартны для всех процессоров ...мож даж на русском есть

Добавлю, а то вдруг...
апкоды == машинный код
почти все комады ассемблера это машинный код в буквах...компилятор просто подстовляет апкоды за место слов(все в ковычках ибо есть макросы для ассемблера, а также некоторые команды по типу mov компилятор трактует по своему)
 

Disketka

Знающий
Сообщения
8
Репутация
6
Re: [Процессы] Ввод данных в процесс

а почему не написать ДЛЛьку с асемблерским кодом вызова нужной функции и потом средствами автоита иньектить её когда нужно ?
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
Re: [Процессы] Ввод данных в процесс

Предупреждение За нарушение правил форума (пункт Б.5):
Имя темы должно нести смысловую нагрузку (отражать суть вопроса/проблемы)
Правильно сформулированное название темы привлекает больше внимания, и шансы получить конкретный ответ увеличиваются.


Как правильно называть темы

"[Процессы] Ввод данных в процесс" - это неприемлемое название темы, переименуйте тему иначе она будет закрыта, а вам возможно будет выдан бан на несколько дней.

С уважением, Модератор раздела.










Добавлено:
Сообщение автоматически объединено:

anonymous7 сказал(а):
В процесс PerfectWorld
Это нужно в названии темы писать.
 
Верх