<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; JScript: Инъекция в процесс]]></title>
	<link rel="self" href="http://forum.script-coding.com/extern.php?action=feed&amp;tid=10103&amp;type=atom" />
	<updated>2014-11-03T20:04:42Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.script-coding.com/viewtopic.php?id=10103</id>
		<entry>
			<title type="html"><![CDATA[Re: JScript: Инъекция в процесс]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=87972#p87972" />
			<content type="html"><![CDATA[<p><em>Без гарантий! Используете на свой страх и риск.</em></p><p>Пример добавления пользовательского меню во внешнее оконное приложение, в данном случае это &quot;Блокнот&quot;. Меню позволяет запускать файлы скриптов VBScript и JScript прямо из &quot;Блокнота&quot;. </p><p>Для версии &quot;Блокнота&quot; 5.1.2600.5512 WinXP: <span class="postimg"><img src="http://img.ii4.ru/images/2014/11/03/544930_notinj.jpg" alt="http://img.ii4.ru/images/2014/11/03/544930_notinj.jpg" /></span></p><p>Сценарий создает внешний процесс notepad.exe, загружает библиотеку-инжектор inject.dll, расположенную рядом со скриптом, в адресное пространство этого процесса, передает в библиотеку необходимые параметры, после чего библиотека добавляет в главное меню &quot;Блокнота&quot; новый пункт меню &quot;Запуск сценария WSH&quot;, который содержит подпункты &quot;Запуск WScript&quot;(запуск сценария с помощью WScript) и &quot;Запуск СScript&quot;(запуск сценария с помощью СScript, соответственно).</p><p>Потребуется зарегистрированная библиотека <a href="http://forum.script-coding.com/viewtopic.php?id=8082">scrsvc.dll</a></p><p>Если что-то срабатывает не так, приложение валится, следует обратить внимание на изменяемые параметры в скрипте:<br /></p><div class="codebox"><pre><code>
// Изменяемые параметры
// ------------------------------------------------------------- 
// ------------------------------------------------------------- 
 var sApp = &#039;C:\\WINDOWS\\system32\\notepad.exe&#039;;        // Полный путь к приложению &quot;Блокнот&quot;
 var sScriptHost1 = &#039;C:\\WINDOWS\\system32\\WScript.exe&#039;;    // Полный путь к интерпретатору WScript.exe
 var sScriptHost2 = &#039;C:\\WINDOWS\\system32\\CScript.exe&#039;;    // Полный путь к интерпретатору CScript.exe
 var lAddress = 0x0100A900;                    // Статический указатель на строку-путь к текущему открытому файлу в адресном пространстве &quot;Блокнота&quot;
</code></pre></div><p>Статический указатель на строку-путь к текущему открытому файлу в адресном пространстве &quot;Блокнота&quot;, можно получить в отладчике, открыв процесс &quot;Блокнота&quot; и найдя &quot;вставку&quot; примерно следующего вида: <br /></p><div class="codebox"><pre><code>
0100278C  |. BF 00A90001    MOV EDI,NOTEPAD.0100A900                 ;  UNICODE &quot;C:\ScriptProjects\windows.txt&quot;
</code></pre></div><p>Соответственно 0100A900 - это и есть искомый указатель на путь к текущему открытому файлу в процессе &quot;Блокнот&quot;(Для версии 5.1.2600.5512 WinXP)</p><p>Чтобы открыть JS или VBS скрипт, следует перетащить значок этого скрипта на значок inject.js. Чтобы добавить пункт открытия JS и VBS файлов сриптом-блокнот-инжектором в контекстное меню проводника, можно использовать, например, такие cmd сценарии:<br /></p><div class="codebox"><pre><code>
:: Добавление пункта &quot;Open Notepad&quot; для js и vbs файлов в контекстное меню проводника, 
:: что позволяет открывать файлы соответствующих скриптов в &quot;Блокноте&quot; с добавленым 
:: пользовательским меню их запуска.

reg add &quot;HKCR\VBSFile\Shell\Open3&quot; /v &quot;&quot; /t REG_SZ /d &quot;Open Notepad&quot; /f
reg add &quot;HKCR\VBSFile\Shell\Open3\Command&quot; /v &quot;&quot; /t REG_EXPAND_SZ /d &quot;%%SystemRoot%%\System32\WScript.exe %CD%\inject.js %%1 %%*&quot; /f


reg add &quot;HKCR\JSFile\Shell\Open3&quot; /v &quot;&quot; /t REG_SZ /d &quot;Open Notepad&quot; /f
reg add &quot;HKCR\JSFile\Shell\Open3\Command&quot; /v &quot;&quot; /t REG_EXPAND_SZ /d &quot;%%SystemRoot%%\System32\WScript.exe %CD%\inject.js %%1 %%*&quot; /f
</code></pre></div><p>Чтобы избавиться от пункта меню:<br /></p><div class="codebox"><pre><code>
:: Удаление пункта &quot;Open Notepad&quot; для js и vbs файлов из контекстного меню проводника. 

reg delete &quot;HKCR\VBSFile\Shell\Open3&quot; /f
reg delete &quot;HKCR\JSFile\Shell\Open3&quot; /f
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Poltergeyst]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=83</uri>
			</author>
			<updated>2014-11-03T20:04:42Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=87972#p87972</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[JScript: Инъекция в процесс]]></title>
			<link rel="alternate" href="http://forum.script-coding.com/viewtopic.php?pid=87969#p87969" />
			<content type="html"><![CDATA[<p><em>Без гарантий! Используете на свой страх и риск.</em></p><p>Пример инъекции - выполнение функции ExitProcess в адресном пространстве другого процесса с помощью CreateRemoteThread.</p><p>Потребуется зарегистрированная библиотека <a href="http://forum.script-coding.com/viewtopic.php?id=8082">scrsvc.dll</a><br />ОС WinXP/7</p><div class="codebox"><pre><code>
/*
 Пример инъекции в другой процесс, выполнение функции 
 ExitProcess в адресном пространстве другого процесса с 
 помощью CreateRemoteThread.

 ----------------------------------------------------------------
 Потребуется зарегистрированная библиотека scrsvc.dll
 http://forum.script-coding.com/viewtopic.php?id=8082

 ОС WinXP/7
*/
 
 var oScrSvc = new ActiveXObject(&#039;ScriptService.Service&#039;);
 
 //Изменяемый параметр - полный путь к запускаемому приложению.
 /*---------------------------------------------------------------*/
 sApp = &#039;calc&#039;
 
 
 /*---------------------------------------------------------------*/
 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(&#039;WScript.Shell&#039;);
 try
 {
	var oWExec = oWShell.Exec(sApp);
	WScript.Sleep(200);
 }
 catch(e)
 {
	oWShell.PopUp(&#039;Произошла ошибка: &#039;+e.description, -1, &#039;Запуск процесса&#039;, 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(&#039;KERNEL32.DLL&#039;,&#039;OpenProcess&#039;,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(&#039;KERNEL32.DLL&#039;,&#039;VirtualAllocEx&#039;,5);

	// Запись аргумента удаленно вызываемой функции в выделенную память
	sStr = &#039;____&#039;
	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(&#039;KERNEL32.DLL&#039;,&#039;WriteProcessMemory&#039;,5);

	// Получение адреса удаленно вызываемой функции
	// (это ExitProcess, расположенная в KERNEL32.DLL)
	/*--------------------------------------------------------*/
	set_strarg(0, &#039;KERNEL32.DLL&#039;, true);
	hModule = api_call(&#039;KERNEL32.DLL&#039;,&#039;GetModuleHandleW&#039;,1);

	set_vararg(0, hModule);
	set_strarg(1, &#039;ExitProcess&#039;, false);	
	hAPIProc = api_call(&#039;KERNEL32.DLL&#039;,&#039;GetProcAddress&#039;,2);


	// Выполнение функции ExitProcess в памяти другого процесса
	/*--------------------------------------------------------*/
	oWShell.PopUp(&#039;Выполнение ExitProcess в памяти другого процесса...&#039;, 5, &#039;ExitProcess&#039;, 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(&#039;KERNEL32.DLL&#039;,&#039;CreateRemoteThread&#039;,7);

	oWShell.PopUp(&#039;Завершено...&#039;, 5, &#039;ExitProcess&#039;, 64);
	oWShell = null;
	oScrSvc = null;
	WScript.Quit();
	
 }
</code></pre></div>]]></content>
			<author>
				<name><![CDATA[Poltergeyst]]></name>
				<uri>http://forum.script-coding.com/profile.php?id=83</uri>
			</author>
			<updated>2014-11-03T19:50:11Z</updated>
			<id>http://forum.script-coding.com/viewtopic.php?pid=87969#p87969</id>
		</entry>
</feed>
