![]() |
перехват без модификации кода
////// UPDATED & RECODED ///////
полезная и хитрая вещь, если довести до ума. но тут будет просто концепт. итак, сплайсы, экзепшн хуки - все они изменяют начало функции. но есть возможность перехвата без изменения оригинального кода. для этого мы используем отладочные регистры - dr0-3. при попадании потока на указанный в отладочном регистре адрес, будет вызван обработчик исключений, перехваченный сплайсом KiUserExceptionDispatcher. затем обработчик исключений перенаправит поток на наш трамплин и на сам перехватчик. из минусов - не больше 4х перехватов на поток итак, к0д winmain =) полный дистрибутив тут (сам движок (извините без комментов пока - просто не успел) и необходимые наборы утилит в исходном коде) http://www.rapidshare.ru/1343901 а это код вин маин) Код:
#include <windows.h>что я видоизменил, - да вообшем то все! в аттаче на рапиде (выше) доделанная сборка, альфа ясен пень, держащая как хук так и анхук в удобоваримой форме, и без асма, которая держит функции с любым числом аргументов, также держит мультихук - когда одна и таже функция одновременно перехватывается несколькими обработчиками, расположенными в разных потоках. не исключаю что там кривости есть, но не успел, очень торопился на собаку) включенные утилиты (едины с проектом): - дизассемблер длин - двигло сплайса (трамплинный перехват) - двигло инжекта тела в другой процесс по фиксированной базе - утилита поиска памяти по паттерну с маской - и тд |
o_O не получается переварить ) ибо пока только научился инжектить dll в удаленный процесс... щас как раз втыкаю про перехваты.
ну вопрос собственно... я как понимаю это SEH ? потом устанавливать хук надо откуда из программы установщика или уже в теле процесса... (ну я думаю GetThreadContext наверно можно и удаленного получить)... и еще если процесс запускает треады новые в них будут работать эти исключения? извини за тупые вопросы - я просто еще СОВСЕМ не разобрался с этим делом :) |
всегда порывался так сделать, но меня всегда останавливали
1) "а вдруг" кто-то порешит запустить на <= win2000 2) "а вдруг" таки кто-то додумался наконец, что вех - удобная вещь и со вздохом по старинке писался VirtualProtect |
Цитата:
2) пример: HardwareHookFunction(GetProcAddress(GetModuleHandl e("kernel32.dll"), "WinExec"), My_WinExec, GetCurrentThreadId()); устанавливается на ид потока указанного в параметрах функции в пределах текущего процесса |
+ еще одна ВЕЩЬ...
Код:
/* |
Не вызывает обработчик исключений GetThreadContext(). И даже ZwGetContextThread(). Так что "все они используют функцию GetThreadContext()" - не-а :)
|
Цитата:
хотя конечно не все, тк если о самом обработчике, то да, в нем также есть доступ к ContextRecord-> DrX и тд. и вот например таким кодом можно его задетектить Код:
////////////////////////////////////////////////////////////////////////// |
Кстати, такая защита от антиотладки неподходит )
Дело в том, что я могу специально задания значения к примеру Dr7 Затем заново запросить контекст и сново проверить значение регистров. Также нужно желательно запоминать както. И фильтровать собственные установки и те которые поставили в проге. P.S. лучше юзай GhbGhb вместо GblGbl ;) |
Цитата:
|
| Время: 09:24 |