HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > Реверсинг
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 08.05.2009, 22:38
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
С нами: 10139366

Репутация: 1502


По умолчанию

Finito:
В результате продолжительного обсуждения было принято решение о том, что оказывается KiFastSystemCall и KiFastSystemCallRet экспортируются. Вроде при таком допущении номер сервиса выводится в одно действие )
__________________
Bedankt euch dafür bei euch selbst.

H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
 
Ответить с цитированием

  #12  
Старый 01.06.2009, 11:51
0x0c0de
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
С нами: 9981026

Репутация: 1564
По умолчанию

Как и обещала, метод я реализовала. Время на радостях после успешно завершенной зачетной недели выкроилось.
Создаем свою SDT, ntoskrnl SST оставляем прежней (копируем из оригинальной SST), создаем свою таблицу вместо win32k.sys SST (при этом указатель на argument table берем из оригинальной таблицы), а адреса всех функций заполняются адресом моего обработчика, затем прописываем новую SDT в KTHREAD.ServiceTable.

Обработчик для всех функций, логирующий номера вызываемых сервисов.

Т.к. приложение, юзающее такое определение номеров сервисов (отсылающее драйверу ioctl запросы) консольное- проблем не возникает.

Код:
 
VOID _declspec(naked) MyHandlerServiceSearch(VOID)
{
	_asm
	{
		pushad

		mov uEax,eax
	}
	KdPrint(("MyHandlerServiceSearch-> Service number = %X\n",uEax));

	if(uServiceCount<6)
	{
		// сохраняем номер сервиса
		uServTable[uServiceCount] = uEax;

		uServiceCount++;

	}
	else KdPrint(("Too many calls"));

	// вычисляем адрес оригинальной функции
	uOriginalCallAddress = (ULONG)uShadow[1].ServiceTable[uEax];

	_asm
	{
		popad

		// вызываем оригинальную функцию
		jmp [uOriginalCallAddress]

	}
}




Надо сказать, что на win7 там иногда не с первого раза определяются номера. причина этого мне неизвестна. Я сделала цикл до тех пор, пока не определится. Кстати, на скрине с семеркой видно, что первая попытка неуспешна, зато на второй раз все определилось.

Однако, все равно остаюсь при своем способе. этот пускай будет

Последний раз редактировалось 0x0c0de; 01.06.2009 в 11:56..
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT ™ © 2001- Antichat Kft.