для чего: порой встречаются системы защиты, работающие в режиме ядра. т.е. они перехватывают ряд ядерных функций (КИС, КАВ, разные античиты и тд), в результате чего мы, например, не можем выполнить некоторые действия. например сделать инжект в процесс и тд и тп. так вот. предлагаю вашему вниманию драйвер, суть его работы заключена в том, что при загрузке он проверяет наличие таких перехватов и если находит, то перехватывает самого перехватчика, таким образом работая как заглушка. драйвер защиты думает что он перехватил что надо и все нормально, но в данный момент его обработчик сам перехвачен заглушкой которая передает управление оригинальным функциям. естественно в этом случае мы можем творить в режиме пользователя что угодно. данная версия обезвреживает (не повреждая систему защиты): NtOpenProcess <---> OpenProcess NtProtectVirtualMemory <---> VirtualProtect NtWriteVirtualMemory <---> WriteProcessMemory NtCreateThread <---> CreateRemoteThread NtAllocateVirtualMemory <---> VirtualAllocEx те после запуска драйвера мы по идее можем инжектить что угодно и куда угодно. НУЖНО ПРОВЕРИТЬ. если у кого есть возможность, с проактивными антивирами (разными) и тд, затестьте и отпишитесь. схема работы- загрузить драйвер с помощью NtLoadDriver, дальше просто попробовать инжектнуться куданибудь. НО! не выгружайте драйвер ранее того как будет выгружена система защиты. иначе бсод. для простоты добавил сразу с лоадером. запускаете ехе, ждете месаг бокса и дальше пускаете свою прогу с инжектом. самое элементарное, кто в кс гамит - запустите маяк, затем лоадер и любой чит, например senses fail таргет билды (оч важно, исходите из установленной ОС) все они под х86 (не 64битные) Windows 7: http://www.sendspace.com/file/y3zprp Windows XP: http://www.sendspace.com/file/5az3wg
винда как указано? что стоит (антивир или гуард какой) зы ОК надо давить только тада када сделаешь все операции. просто если есть другой драйвер, который перехватывает ядро, то наш - перехватывает его обработчики. и если нас выгрузить (нажав ОК) то с его обработчиков проц будет улетать в ебеня. собсна смысл бсода. ззы и желательно проверить таблицу sdt какаимнить rku или avz - есть ли какие хуки зззы весь дебаг принт я у него вырезал дабы алгоритм не палить, он тока выводит када загрузился и када выгрузился
Хоглунда (rootkit.com) , васм.ру, руткитс.су... Солдатов ВП - программирование драйверов Windows. но в целом эта инфа более складывается из исследования и отдельных людей. те это какбы мозговой торрент чтоли) мне в этом деле например помогал ранее довольно известный тут человек, kez) да и кстати грейта!)
блин( смори суть в чем. если у тебя гдето в таблице сдт перехвачена хотябы одна из функций указанных выше, то дров перехватывает обработчик перехватчика. проверь сперва - есть ли у тебя вообще перехваты в таблице - те я уже говорил - рку или авз. если их нет, то дело не в бабине (тода дров вообще ничего не будет делать, кроме эмм некоторых инициальных действий) - соотв надо будет разбираться в других аспектах. напомню - среда должна быть 32разрядной, попробуй не на виртуалке)
работает то, это гуд) пробовал с чем? просто в сухую (без ничего) ето тоже что и mov eax, eax; =) зы я на самом деле делал под myAC (античит такой) и все норм работает, но как оказалось - довольно перспективная тема и в отношении других средств защиты, поэтому и написал что отпосьте есть ли какая система защиты и проходит ли тема)
эм каким методом снимаешь хуки? Восстановление SDT или сплайсинг хуков антивиря с последующей передачей управления на оригинальные адреса?
хуки не снимаются, вслучае если я вижу что в сдт энтри не тот адрес, те адрес стороннего обработчика, я просто перехожу к нему и пишу на начале тела джамп к себе (с созданием трамплина пролога и тд). у себя на этот момент я имею адекватные Nt адреса, куда и передается упраление.
Мдауж. За сброс WP бита Great бы Когда нужно хукнуть SDT то делаю так: Code: // функция установки и снятия перехвата BOOL SetHook(USHORT id, ULONG NewAddr, PULONG OldAddr) { BOOL ret = false; ULONG Addr; PHYSICAL_ADDRESS PhysicalAddr; ULONG VirtualAddr; Addr = (ULONG)KeServiceDescriptorTable->ServiceTable; // получаем адрес таблицы сервисов if (Addr) // если нет ошибки { Addr += 4 * id; // вычислим адрес функции которую необходимо перехватить if (OldAddr) // если указана память для сохранения старого значения { *(ULONG*)OldAddr = *(ULONG*)Addr; // сохраним старый адрес } // получим физический адрес, зная виртуальный PhysicalAddr = MmGetPhysicalAddress((void*)Addr); if (PhysicalAddr.QuadPart) { // выделим себе виртуальную память по физ. адресу VirtualAddr = (ULONG)MmMapIoSpace(PhysicalAddr, 4, 0); if (VirtualAddr) { *(ULONG*)VirtualAddr = NewAddr; // установим перехват ret = true; MmUnmapIoSpace((void*)VirtualAddr, 4); // освободим вирт. страницу памяти } } } return ret; } Если не хукать SDT а просто писать куда-либо то достаточно будет просто сделать копию страници и записать туда данные А вообще тут даже запрет прерываний не поможет. Если ты вписываешь JMP XX XX XX XX то как не крути, нужно записать 5 байт. При атомарном доступе максимум 4. Оставшийся байт ты можеш не успеть записать если второе ядро успеет попасть на эту функцию. Маловероятное событие, но всё же.
да оно и так бсодит. хп сп2 + касперский. могу и минидамп залить если надо. Code: ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* Use !analyze -v to get detailed debugging information. BugCheck 7E, {c0000005, b1b236ee, f89a3980, f89a367c} *** ERROR: Module load completed but symbols could not be loaded for jammer.sys Probably caused by : jammer.sys ( jammer+6ee ) Followup: MachineOwner --------- kd> !analyze -v ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* SYSTEM_THREAD_EXCEPTION_NOT_HANDLED (7e) This is a very common bugcheck. Usually the exception address pinpoints the driver/function that caused the problem. Always note this address as well as the link date of the driver/image that contains this address. Arguments: Arg1: c0000005, The exception code that was not handled Arg2: b1b236ee, The address that the exception occurred at Arg3: f89a3980, Exception Record Address Arg4: f89a367c, Context Record Address Debugging Details: ------------------ EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - <Unable to get error code text> FAULTING_IP: jammer+6ee b1b236ee 8b433c mov eax,dword ptr [ebx+3Ch] EXCEPTION_RECORD: f89a3980 -- (.exr 0xfffffffff89a3980) ExceptionAddress: b1b236ee (jammer+0x000006ee) ExceptionCode: c0000005 (Access violation) ExceptionFlags: 00000000 NumberParameters: 2 Parameter[0]: 00000000 Parameter[1]: 0000003c Attempt to read from address 0000003c CONTEXT: f89a367c -- (.cxr 0xfffffffff89a367c) eax=f89a3ae4 ebx=00000000 ecx=000005ce edx=806830e0 esi=00000000 edi=00000000 eip=b1b236ee esp=f89a3a48 ebp=f89a3a60 iopl=0 nv up ei ng nz ac po nc cs=0008 ss=0010 ds=0023 es=0023 fs=0030 gs=0000 efl=00210292 jammer+0x6ee: b1b236ee 8b433c mov eax,dword ptr [ebx+3Ch] ds:0023:0000003c=???????? Resetting default scope PROCESS_NAME: System ERROR_CODE: (NTSTATUS) 0xc0000005 - <Unable to get error code text> EXCEPTION_PARAMETER1: 00000000 EXCEPTION_PARAMETER2: 0000003c READ_ADDRESS: 0000003c FOLLOWUP_IP: jammer+6ee b1b236ee 8b433c mov eax,dword ptr [ebx+3Ch] BUGCHECK_STR: 0x7E DEFAULT_BUCKET_ID: NULL_CLASS_PTR_DEREFERENCE LAST_CONTROL_TRANSFER: from b1b23c67 to b1b236ee STACK_TEXT: WARNING: Stack unwind information not available. Following frames may be wrong. f89a3a60 b1b23c67 00000000 b1b242e2 00000000 jammer+0x6ee f89a3a98 b1b23d27 00000000 82301da0 00000000 jammer+0xc67 f89a3ab8 b1b24097 00000000 804d7000 f89a3ae4 jammer+0xd27 f89a3c74 b1b234b9 f89a3d4c 805a2ead 82301da0 jammer+0x1097 f89a3c7c 805a2ead 82301da0 81bda000 00000000 jammer+0x4b9 f89a3d4c 805a3182 00000b2c 00000001 00000000 nt!IopLoadDriver+0x66c f89a3d74 804e426b 00000b2c 00000000 823c68b8 nt!IopLoadUnloadDriver+0x45 f89a3dac 8057cfce f877fcdc 00000000 00000000 nt!ExpWorkerThread+0x100 f89a3ddc 804f88fa 804e4196 00000001 00000000 nt!PspSystemThreadStartup+0x34 00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16 SYMBOL_STACK_INDEX: 0 SYMBOL_NAME: jammer+6ee FOLLOWUP_NAME: MachineOwner MODULE_NAME: jammer IMAGE_NAME: jammer.sys DEBUG_FLR_IMAGE_TIMESTAMP: 4bc72969 STACK_COMMAND: .cxr 0xfffffffff89a367c ; kb FAILURE_BUCKET_ID: 0x7E_jammer+6ee BUCKET_ID: 0x7E_jammer+6ee Followup: MachineOwner --------- И не много не понятно в чем новизна метода?)
в данном случае он никуда не внедряется сам. Ну а проактивка (у меня на Kaspersky CRYSTAL) абсолютно не палит загрузку драйвера. Но аутпост палит
2 Nightmarе судя по тому что драйвер прописывается в системе по обычному, в SYSTEM\CurrentControlSet\Services\jammer то палится любыми проактивками.