Тема: JScript: Инъекция в процесс
Без гарантий! Используете на свой страх и риск.
Пример инъекции - выполнение функции ExitProcess в адресном пространстве другого процесса с помощью CreateRemoteThread.
Потребуется зарегистрированная библиотека scrsvc.dll
ОС WinXP/7
/*
Пример инъекции в другой процесс, выполнение функции
ExitProcess в адресном пространстве другого процесса с
помощью CreateRemoteThread.
----------------------------------------------------------------
Потребуется зарегистрированная библиотека scrsvc.dll
http://forum.script-coding.com/viewtopic.php?id=8082
ОС WinXP/7
*/
var oScrSvc = new ActiveXObject('ScriptService.Service');
//Изменяемый параметр - полный путь к запускаемому приложению.
/*---------------------------------------------------------------*/
sApp = 'calc'
/*---------------------------------------------------------------*/
PROCESS_TERMINATE = 1
PROCESS_CREATE_THREAD = 2
PROCESS_SET_SESSIONID = 4
PROCESS_VM_OPERATION = 8;
PROCESS_VM_READ = 0x10;
PROCESS_VM_WRITE = 0x20;
PROCESS_DUP_HANDLE = 0x40;
PROCESS_CREATE_PROCESS = 0x80;
PROCESS_QUERY_INFORMATION = 0x400;
PAGE_NOACCESS = 1;
PAGE_READONLY = 2;
PAGE_READWRITE = 4;
PAGE_WRITECOPY = 8;
PAGE_EXECUTE = 0x10;
PAGE_EXECUTE_READ = 0x20;
PAGE_EXECUTE_READWRITE = 0x40;
PAGE_EXECUTE_WRITECOPY= 0x80;
PAGE_GUARD = 0x100;
PAGE_NOCACHE = 0x200;
MEM_COMMIT = 0x1000;
MEM_RESERVE = 0x2000;
MEM_DECOMMIT = 0x4000;
MEM_RELEASE = 0x8000;
MEM_FREE = 0x10000;
MEM_PRIVATE = 0x20000;
MEM_MAPPED = 0x40000;
MEM_RESET = 0x80000;
MEM_TOP_DOWN = 0x100000;
NORMAL_PRIORITY_CLASS = 0x00000020;
// Запуск процесса
/*---------------------------------------------------------------*/
var oWShell = new ActiveXObject('WScript.Shell');
try
{
var oWExec = oWShell.Exec(sApp);
WScript.Sleep(200);
}
catch(e)
{
oWShell.PopUp('Произошла ошибка: '+e.description, -1, 'Запуск процесса', 48);
oWShell = null;
oScrSvc = null;
WScript.Quit()
}
var PID = oWExec.ProcessID;
//oWShell.AppActivate(PID);
WScript.Sleep(200);
// Выполнение удаленной функции в адресном пространстве процесса
/*---------------------------------------------------------------*/
with (oScrSvc)
{
// Открытие процесса
/*--------------------------------------------------------*/
set_vararg(0, PROCESS_CREATE_THREAD + PROCESS_VM_OPERATION + PROCESS_VM_WRITE);
set_vararg(1, true);
set_vararg(2, PID);
hOpen = api_call('KERNEL32.DLL','OpenProcess',3);
// Выделение памяти в адресном пространстве созданного процесса
set_vararg(0, hOpen);
set_vararg(1, 0);
set_vararg(2, 4);
set_vararg(3, MEM_RESERVE + MEM_COMMIT);
set_vararg(4, PAGE_EXECUTE_READWRITE);
hMem = api_call('KERNEL32.DLL','VirtualAllocEx',5);
// Запись аргумента удаленно вызываемой функции в выделенную память
sStr = '____'
vPtr = struct_setval(sStr)
struct_setval(vPtr, 0, 0, 4);
set_vararg(0, hOpen);
set_vararg(1, hMem);
set_vararg(2, vPtr);
set_vararg(3, 4);
set_vararg(4, 0);
hRes = api_call('KERNEL32.DLL','WriteProcessMemory',5);
// Получение адреса удаленно вызываемой функции
// (это ExitProcess, расположенная в KERNEL32.DLL)
/*--------------------------------------------------------*/
set_strarg(0, 'KERNEL32.DLL', true);
hModule = api_call('KERNEL32.DLL','GetModuleHandleW',1);
set_vararg(0, hModule);
set_strarg(1, 'ExitProcess', false);
hAPIProc = api_call('KERNEL32.DLL','GetProcAddress',2);
// Выполнение функции ExitProcess в памяти другого процесса
/*--------------------------------------------------------*/
oWShell.PopUp('Выполнение ExitProcess в памяти другого процесса...', 5, 'ExitProcess', 64);
set_vararg(0, hOpen);
set_vararg(1, 0);
set_vararg(2, 0);
set_vararg(3, hAPIProc);
set_vararg(4, hMem);
set_vararg(5, 0);
set_vararg(6, 0);
hRemoteThread = api_call('KERNEL32.DLL','CreateRemoteThread',7);
oWShell.PopUp('Завершено...', 5, 'ExitProcess', 64);
oWShell = null;
oScrSvc = null;
WScript.Quit();
}