ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

перехват без модификации кода
  #1  
Старый 21.01.2010, 18:55
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию перехват без модификации кода

////// UPDATED & RECODED ///////
полезная и хитрая вещь, если довести до ума. но тут будет просто концепт. итак, сплайсы, экзепшн хуки - все они изменяют начало функции. но есть возможность перехвата без изменения оригинального кода. для этого мы используем отладочные регистры - dr0-3.

при попадании потока на указанный в отладочном регистре адрес, будет вызван обработчик исключений, перехваченный сплайсом KiUserExceptionDispatcher.

затем обработчик исключений перенаправит поток на наш трамплин и на сам перехватчик.

из минусов - не больше 4х перехватов на поток

итак, к0д winmain =)
полный дистрибутив тут (сам движок (извините без комментов пока - просто не успел) и необходимые наборы утилит в исходном коде)

http://www.rapidshare.ru/1343901

а это код вин маин)
Код:
#include <windows.h>
#include "hwhook.h"

#pragma optimize("gsy", on) 
#pragma comment(linker, "/MERGE:.rdata=.data")
#pragma comment(linker,"/MERGE:.text=.data")
#pragma comment(linker,"/SECTION:.data,ERW")
#pragma comment(linker, "/BASE:0x77500000")
#pragma comment(linker, "/ENTRY:WinMain")
#pragma comment(lib, "ntdll.lib")





PHARDWARE_HOOK_ENTRY pdhhWinExec;
UINT WINAPI My_WinExec(LPSTR cmd, UINT show)
{
	MessageBox(0,"This is a hook of WinExec =)",0,0);
	//lstrcpy(cmd, "notepad.exe"); // call notepad instead of anything
	return ((UINT(WINAPI*)(LPSTR,UINT))pdhhWinExec->trampoline)(cmd, show);

}


//////////////////////////////////////////////////////////////////////////
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	
	// init hook
	InitializeHardwareHook();

	
	// hook it
	pdhhWinExec = HardwareHookFunction(GetProcAddress(GetModuleHandle("kernel32.dll"), "WinExec"), My_WinExec, GetCurrentThreadId());
	
	// test
	WinExec("calc.exe", SW_SHOW);

	HardwareUnhookFunction(pdhhWinExec);
	MessageBox(0, "now unhooked...", 0, 0);

	WinExec("calc.exe", SW_SHOW);

	MessageBox(0, "yo =)", 0, 0);

	return 0;
}
думаю тут вопросов не будет)

что я видоизменил, - да вообшем то все!

в аттаче на рапиде (выше) доделанная сборка, альфа ясен пень, держащая как хук так и анхук в удобоваримой форме, и без асма, которая держит функции с любым числом аргументов, также держит мультихук - когда одна и таже функция одновременно перехватывается несколькими обработчиками, расположенными в разных потоках.
не исключаю что там кривости есть, но не успел, очень торопился на собаку)

включенные утилиты (едины с проектом):
- дизассемблер длин
- двигло сплайса (трамплинный перехват)
- двигло инжекта тела в другой процесс по фиксированной базе
- утилита поиска памяти по паттерну с маской
- и тд
__________________


snow white world wide

Последний раз редактировалось sn0w; 22.01.2010 в 02:21..
 
Ответить с цитированием

  #2  
Старый 21.01.2010, 23:10
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
Провел на форуме:
991929

Репутация: 395


По умолчанию

o_O не получается переварить ) ибо пока только научился инжектить dll в удаленный процесс... щас как раз втыкаю про перехваты.

ну вопрос собственно... я как понимаю это SEH ? потом устанавливать хук надо откуда из программы установщика или уже в теле процесса... (ну я думаю GetThreadContext наверно можно и удаленного получить)... и еще если процесс запускает треады новые в них будут работать эти исключения?

извини за тупые вопросы - я просто еще СОВСЕМ не разобрался с этим делом
 
Ответить с цитированием

  #3  
Старый 22.01.2010, 00:36
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме:
3008839

Репутация: 1502


По умолчанию

всегда порывался так сделать, но меня всегда останавливали
1) "а вдруг" кто-то порешит запустить на <= win2000
2) "а вдруг" таки кто-то додумался наконец, что вех - удобная вещь

и со вздохом по старинке писался VirtualProtect
__________________
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
 
Ответить с цитированием

  #4  
Старый 22.01.2010, 02:15
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию

Цитата:
Сообщение от Gar|k  
o_O не получается переварить ) ибо пока только научился инжектить dll в удаленный процесс... щас как раз втыкаю про перехваты.

ну вопрос собственно... я как понимаю это SEH ? потом устанавливать хук надо откуда из программы установщика или уже в теле процесса... (ну я думаю GetThreadContext наверно можно и удаленного получить)... и еще если процесс запускает треады новые в них будут работать эти исключения?

извини за тупые вопросы - я просто еще СОВСЕМ не разобрался с этим делом
1) нет, то что было до UPDATE - был VEH. на данный момент перехватывается обработчик всех исключений KiUserExceptionDispatcher из ntdll, который я сомневаюсь что проверяет большинство антималвара. но ранний вариант - добавление обработчика через AddVectoredException.. тоже имеет право на жизнь

2) пример:
HardwareHookFunction(GetProcAddress(GetModuleHandl e("kernel32.dll"), "WinExec"), My_WinExec, GetCurrentThreadId());

устанавливается на ид потока указанного в параметрах функции в пределах текущего процесса
__________________


snow white world wide

Последний раз редактировалось sn0w; 22.01.2010 в 02:28..
 
Ответить с цитированием

  #5  
Старый 28.01.2010, 12:22
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию

+ еще одна ВЕЩЬ...


Код:
/*
* 
* многие протекторы проверяют отладочные регистры на предмет наличия аппаратных
* точек останова (hardware breakpoint).
* конечноже, в ассемблере есть инструкции работы с этими регистрами, такие как mov eax, dr0
* или mov dr0, eax и тд. но то что нам на руку - все они являются превилигированными
* и напрямую могут вызываться лишь в режиме ядра. в ином случае такой код будет
* вызывать программные исключения и при отсутствии обработчика - крах программы.
* поэтому все они используют функцию GetThreadContext() для получения информации
* о текущем состоянии регистров (и прочей информации) потока. используя один регистр,
* из 4х доступных для потока, под перехват и модификацию GetThreadContext(), как приведено в
* примере ниже, мы полностью исключим возможность обнаружения перехвата.
*/



PHARDWARE_HOOK_ENTRY phheGetThreadContext;
BOOL WINAPI xGetThreadContext(HANDLE h, LPCONTEXT ctx)
{
	BOOL rc, dofake = FALSE;

	if(ctx->ContextFlags & CONTEXT_DEBUG_REGISTERS){
		dofake = TRUE;
		dprintf("*** debug test detected ***");
	}
	
	rc = ((BOOL(WINAPI*)(HANDLE, LPCONTEXT))phheGetThreadContext->trampoline)(h, ctx);
	
	if(dofake){
		ctx->Dr0 = 0;
		ctx->Dr1 = 0;
		ctx->Dr2 = 0;
		ctx->Dr3 = 0;
		ctx->Dr7 = 0;
	}
		
	return rc;
}
__________________


snow white world wide
 
Ответить с цитированием

  #6  
Старый 28.01.2010, 15:16
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме:
3008839

Репутация: 1502


По умолчанию

Не вызывает обработчик исключений GetThreadContext(). И даже ZwGetContextThread(). Так что "все они используют функцию GetThreadContext()" - не-а
__________________
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
 
Ответить с цитированием

  #7  
Старый 29.01.2010, 19:56
sn0w
Статус пользователя:
Регистрация: 26.07.2005
Сообщений: 568
Провел на форуме:
1290766

Репутация: 1236


По умолчанию

Цитата:
Сообщение от desTiny  
Не вызывает обработчик исключений GetThreadContext().
хаха понял что ты имеешь ввиду, но написано о том что все они используют... - о протекторах
хотя конечно не все, тк

если о самом обработчике, то да, в нем также есть доступ к ContextRecord-> DrX и тд.

и вот например таким кодом можно его задетектить

Код:
//////////////////////////////////////////////////////////////////////////
LONG WINAPI GblGbl(EXCEPTION_POINTERS* pExceptionInfo)
{
	if(pExceptionInfo->ExceptionRecord->ExceptionCode!=EXCEPTION_INT_DIVIDE_BY_ZERO)
		return EXCEPTION_CONTINUE_SEARCH;

	if(pExceptionInfo->ContextRecord->Dr0){
		MessageBoxA(0,"HOOK DETECTED",0,0);
		return EXCEPTION_CONTINUE_EXECUTION;
	}


	return EXCEPTION_CONTINUE_SEARCH;
}

PHARDWARE_HOOK_ENTRY pwe;
UINT WINAPI xWinExec(LPSTR lp, UINT n)
{
	MessageBoxA(0,"hook of winexec", 0,0);
	return ((UINT(WINAPI*)(LPSTR,UINT))pwe->trampoline)(lp,n);
}


//////////////////////////////////////////////////////////////////////////
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{

	AddVectoredExceptionHandler(0x31338,GblGbl);	

	InitializeHardwareHook();

	pwe = HardwareHookFunction(WinExec, xWinExec, GetCurrentThreadId(), 0);

	int a =1, b=1;
	b--;
	a = a/b;

	WinExec("cmd", 0);
	return a;
}
получим messagebox(hook detected)
__________________


snow white world wide

Последний раз редактировалось sn0w; 29.01.2010 в 20:55..
 
Ответить с цитированием

  #8  
Старый 29.01.2010, 22:40
slesh
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме:
3288241

Репутация: 3349


Отправить сообщение для slesh с помощью ICQ
По умолчанию

Кстати, такая защита от антиотладки неподходит )
Дело в том, что я могу специально задания значения к примеру Dr7
Затем заново запросить контекст и сново проверить значение регистров.
Также нужно желательно запоминать както. И фильтровать собственные установки и те которые поставили в проге.

P.S. лучше юзай GhbGhb вместо GblGbl

Последний раз редактировалось slesh; 29.01.2010 в 22:43..
 
Ответить с цитированием

  #9  
Старый 30.01.2010, 00:08
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме:
3008839

Репутация: 1502


По умолчанию

Цитата:
Сообщение от sn0w  
хаха понял что ты имеешь ввиду, но написано о том что все они используют... - о протекторах
хотя конечно не все, тк

если о самом обработчике, то да, в нем также есть доступ к ContextRecord-> DrX и тд.

и вот например таким кодом можно его задетектить
Вот нет бы посмотреть откуда эта инфа берётся у обработчика и надуть всех - так надо вех впихнуть. Ну да, вех он и есть вех
__________________
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
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват Gsm пакетов SNIFF Сотовый фрикинг 16 27.12.2009 22:25
Xss без Xss k00p3r Чужие Статьи 5 08.09.2008 15:53
Внедрение Sql кода с завязанными глазами k00p3r Чужие Статьи 0 12.06.2005 20:48
Внедрение Sql кода с завязанными глазами, часть 2 k00p3r Чужие Статьи 0 12.06.2005 20:45



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


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




ANTICHAT.XYZ