Посл.ответ |
Сообщение |
Ранг: 31.0 (посетитель) Активность: 0.01↘0 Статус: Участник
|
Создано: 11 октября 2011 20:39 · Поправил: Yotsi · Личное сообщение · #1
Нагуглил пример для ZwQuerySystemInformation.Опробовал его на MessageBox ,сработало ОК. Попробывал для RtlCreateUserThread,и ничего Возможно я наплутал с соглашением о вызове.Но тогда ведь ф-ция заглушка должна была ,хоть и с крашем процесса , всеравно вызываться.Но она вообще не вызываеться. DWORD funcadr=0; UCHAR oldadr[5];
bool SetSplicingHook(void* pfnDst, void* pfnHook, UCHAR buffer[5]) { if(IsBadWritePtr(buffer, 5) || IsBadReadPtr(pfnDst, 5)) return false; memcpy(buffer, pfnDst, 5); DWORD old = 0; if(!VirtualProtect(pfnDst, 5, PAGE_READWRITE, &old)) return false; DWORD offset = (DWORD) pfnHook - (DWORD) pfnDst - 5; *(BYTE*)pfnDst = 0xE9; *(DWORD*)((DWORD)pfnDst+1) = offset; if(!VirtualProtect(pfnDst, 5, old, &old)) return false; return true; } void UnsetSplicingHook(void* pfnDst, UCHAR buffer[5]) { DWORD old = 0; if(!VirtualProtect(pfnDst, 5, PAGE_READWRITE, &old)) return; memcpy(pfnDst, buffer, 5); if(!VirtualProtect(pfnDst, 5, old, &old)) return; } typedef NTSTATUS (NTAPI *_RtlCreateUserThread) (IN HANDLE ProcessHandle, IN PSECURITY_DESCRIPTOR SecurityDescriptor OPTIONAL, IN BOOLEAN CreateSuspended, IN ULONG StackZeroBits, IN OUT PULONG StackReserved, IN OUT PULONG StackCommit, IN PVOID StartAddress, IN PVOID StartParameter OPTIONAL, OUT PHANDLE ThreadHandle, OUT PCLIENT_ID ClientID);
NTSTATUS NTAPI hook(HANDLE ProcessHandle,PSECURITY_DESCRIPTOR SecurityDescriptor,BOOLEAN CreateSuspended,ULONG StackZeroBits,PULONG StackReserved,PULONG StackCommit,PVOID StartAddress,PVOID StartParameter,PHANDLE ThreadHandle,PCLIENT_ID ClientID) { NTSTATUS stat; MessageBoxA(0,"Thread intercept\n","",MB_OK); UnsetSplicingHook((void*)funcadr,oldadr); _RtlCreateUserThread rt=(_RtlCreateUserThread)funcadr; stat=rt(ProcessHandle,SecurityDescriptor,CreateSuspended,StackZeroBits,StackReserved,StackCommit,StartAddress,StartParameter,ThreadHandle,ClientID); SetSplicingHook((void*)funcadr,hook,oldadr); return(stat); }
DWORD WINAPI Thread(LPVOID lParam) { MessageBoxA(0,"Thread!","",MB_OK); return 0; } int _tmain(int argc, _TCHAR* argv[]) { funcadr=(DWORD)GetProcAddress(LoadLibraryA("ntdll.dll"),"RtlCreateUserThread"); printf("%X\n",funcadr); printf("%d\n",SetSplicingHook((void*)funcadr,hook,oldadr)); CreateThread(0,0,Thread,0,0,0); getch(); return 0; }
| Сообщение посчитали полезным: |
|
Ранг: 47.7 (посетитель), 17thx Активность: 0.09↘0 Статус: Участник
|
Создано: 11 октября 2011 20:52 · Личное сообщение · #2
Разбить __security_cookie и хэндлим __report_gsfailure(). Для младших версий системы можно базу екзе покоцать в пеб и захэндлить валидацию хидера, после чего S-маршрутизация. В старших версиях это не робит(W7), там NtCreateThreadEx юзается. Лучший способ это отложенная передача управления, тоесть хачим код, который вашу RtlCreateUserThread() дёргает. А патч - это порча целостности модулей, типо как инфект тока в памяти. Это зло, так как имеется оригинал на диске.
| Сообщение посчитали полезным: |
Ранг: 31.0 (посетитель) Активность: 0.01↘0 Статус: Участник
|
Создано: 11 октября 2011 20:56 · Личное сообщение · #3
bowrouco пишет: А патч - это порча целостности модулей, типо как инфект тока в памяти. Это зло, так как имеется оригинал на диске. А если мне имеено таким методом и надо?
| Сообщение посчитали полезным: |
Ранг: 47.7 (посетитель), 17thx Активность: 0.09↘0 Статус: Участник
|
Создано: 11 октября 2011 21:16 · Личное сообщение · #4
YotsiНу я бы понял, если бы это было на диске. Типо какойто простейший файловый патч. Но в памяти это нельзя делать.
| Сообщение посчитали полезным: |
Ранг: 681.5 (! !), 405thx Активность: 0.42↘0.21 Статус: Участник ALIEN Hack Team
|
Создано: 11 октября 2011 21:32 · Личное сообщение · #5
Что вы человеку голову заморочили? Хучится всё, но проблема в том, что CreateThread не вывзвает RtlCreateUserThread в своей работе, поэтому мессадж и не выскакивает. Это, кстати, можно за секунду проверить в дизассемблере.
----- Stuck to the plan, always think that we would stand up, never ran. | Сообщение посчитали полезным: |
Ранг: 31.0 (посетитель) Активность: 0.01↘0 Статус: Участник
|
Создано: 11 октября 2011 21:52 · Личное сообщение · #6
ARCHANGEL пишет: Что вы человеку голову заморочили? Хучится всё, но проблема в том, что CreateThread не вывзвает RtlCreateUserThread в своей работе, поэтому мессадж и не выскакивает. Это, кстати, можно за секунду проверить в дизассемблере. А я то думал что все эти CreateThreadEx,CreateThread,beginthread,beginthreadex и иже с ними стучаться для создания потока в одно и то же место в ntdll Значит есть несколько путей создания потоков в юзермоде? Через какое же место в ntdll можно гарантированно перехватить создание потока в юзермоде ?
| Сообщение посчитали полезным: |
Ранг: 47.7 (посетитель), 17thx Активность: 0.09↘0 Статус: Участник
|
Создано: 11 октября 2011 21:58 · Личное сообщение · #7
ARCHANGELЯ не смотрел код, только щас увидел там CreateThread(). Они поэтому ничего кроме патча не могут - так как не смотрят реализацию апи.
| Сообщение посчитали полезным: |
Ранг: 145.8 (ветеран), 191thx Активность: 0.14↗0.36 Статус: Участник
|
Создано: 12 октября 2011 20:38 · Личное сообщение · #8
YotsiNtCreateThread например, NtCreateThreadEx в поздних версиях (Windows 7). bowroucoМало того что бред понапейсал, так еще и не в тему. Тебе какая разница что и как он делает? Он задал конкретный вопрос, подразумевающий конкретный же ответ.
| Сообщение посчитали полезным: |
Ранг: 47.7 (посетитель), 17thx Активность: 0.09↘0 Статус: Участник
|
Создано: 12 октября 2011 21:06 · Поправил: bowrouco · Личное сообщение · #9
AlchemistryНу если бы мне было не всёравно, то я бы обьяснил как код патчить. Как по мне, так этому даже учить не стоит, так как это вредоносно. И почему не в тему ? Какраз таки в тему. Хороший годный и краткий ответ дал. Вы не можите его осознать ? - так учите матчасть!
| Сообщение посчитали полезным: |
Ранг: 1053.6 (!!!!), 1078thx Активность: 1.06↘0.81 Статус: Участник
|
Создано: 12 октября 2011 21:19 · Личное сообщение · #10
bowrouco твои ответы можешь понять только ты тогда может не стоит отвечать?
| Сообщение посчитали полезным: yagello, PE_Kill |
Ранг: 145.8 (ветеран), 191thx Активность: 0.14↗0.36 Статус: Участник
|
Создано: 12 октября 2011 21:21 · Личное сообщение · #11
bowroucoЧто вредоносного в перехвате? Патчи твои нелюбимые есть даже у мс, называются Detours, иди учи матчасть сам. Впрочем тебе бесполезно что-то доказывать или объяснять Заканчиваем оффтоп - двигай тему в личку если тебе нечем заняться.
| Сообщение посчитали полезным: |
Ранг: 31.0 (посетитель) Активность: 0.01↘0 Статус: Участник
|
Создано: 12 октября 2011 21:54 · Поправил: Yotsi · Личное сообщение · #12
Alchemistry пишет: NtCreateThread например, NtCreateThreadEx в поздних версиях (Windows 7). В нтдлл моей семерки нету экспорта NtCreateThreadEx =/
| Сообщение посчитали полезным: |
Ранг: 145.8 (ветеран), 191thx Активность: 0.14↗0.36 Статус: Участник
|
Создано: 12 октября 2011 22:05 · Личное сообщение · #13
YotsiКак определили этот невероятный факт?
| Сообщение посчитали полезным: |
Ранг: 31.0 (посетитель) Активность: 0.01↘0 Статус: Участник
|
Создано: 12 октября 2011 22:10 · Поправил: Yotsi · Личное сообщение · #14
Alchemistry пишет: Как определили этот невероятный факт Проблема оказалась в пробеле ЗЫ:а не уверсальней ли перехватывать ZwResumeThread ? ЗЫЫ: чем ZwResumeThread так круто что на его адрессе VirtualProtect при параметре PAGE_READWRITE валиться с Access violation ?А с PAGE_EXECUTE_READWRITE все ОК??
| Сообщение посчитали полезным: |
Ранг: 0.0 (гость), 1thx Активность: 0=0 Статус: Участник
|
Создано: 16 октября 2011 15:11 · Личное сообщение · #15
AlchemistryИнде киляет любой софт, портящий модуля в памяти(дескрипторные таблицы тамже и IAT тоже). Так как такой софт вредоносный. Для этого патчгурд изобрели. А детор как и верификатор и эта ваша апи NtResumeThread это отладочный функционал. > чем ZwResumeThread так круто что на его адрессе VirtualProtect при параметре PAGE_READWRITE валиться с Access violation ?А с PAGE_EXECUTE_READWRITE все ОК?? Кривые параметры передаёте, прототип смотрите.
| Сообщение посчитали полезным: |