ядерная заглушка

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by sn0w, 15 Apr 2010.

  1. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,293
    Reputations:
    327
    для чего: порой встречаются системы защиты, работающие в режиме ядра. т.е. они перехватывают ряд ядерных функций (КИС, КАВ, разные античиты и тд), в результате чего мы, например, не можем выполнить некоторые действия. например сделать инжект в процесс и тд и тп. так вот. предлагаю вашему вниманию драйвер, суть его работы заключена в том, что при загрузке он проверяет наличие таких перехватов и если находит, то перехватывает самого перехватчика, таким образом работая как заглушка. драйвер защиты думает что он перехватил что надо и все нормально, но в данный момент его обработчик сам перехвачен заглушкой которая передает управление оригинальным функциям.

    естественно в этом случае мы можем творить в режиме пользователя что угодно.

    данная версия обезвреживает (не повреждая систему защиты):

    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
     
    #1 sn0w, 15 Apr 2010
    Last edited: 15 Apr 2010
    7 people like this.
  2. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    ОгО! Сейчас проверю!
     
    1 person likes this.
  3. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    Первый запуск норм. На втором бсод.... Сейчас включу запись ошибок и повторю. (антивиря нет)
     
  4. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,293
    Reputations:
    327
    винда как указано? что стоит (антивир или гуард какой)

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

    ззы и желательно проверить таблицу sdt какаимнить rku или avz - есть ли какие хуки

    зззы весь дебаг принт я у него вырезал дабы алгоритм не палить, он тока выводит када загрузился и када выгрузился
     
    #4 sn0w, 15 Apr 2010
    Last edited: 15 Apr 2010
  5. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    Винда хр. Авирей нет, брендмауэр отключен.
    Это я понял =) бсод выскакивает до кнопки ок.
     
  6. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,293
    Reputations:
    327
    обновил первый пост - и 7 и хп
     
    #6 sn0w, 15 Apr 2010
    Last edited: 15 Apr 2010
  7. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    sn0w, может посоветуешь, что почитать по разработке драйверов?
     
  8. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    Спасибо за хп версию.
    Но она так же бсодит по тем же адресам.
    Возможно это из-за вмваре.
     
  9. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,293
    Reputations:
    327
    Хоглунда (rootkit.com) , васм.ру, руткитс.су... Солдатов ВП - программирование драйверов Windows. но в целом эта инфа более складывается из исследования и отдельных людей. те это какбы мозговой торрент чтоли) мне в этом деле например помогал ранее довольно известный тут человек, kez)

    да и кстати грейта!)
     
    #9 sn0w, 15 Apr 2010
    Last edited: 15 Apr 2010
    1 person likes this.
  10. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    2 M_script_:
    https://forum.antichat.ru/thread91797.html
     
  11. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,293
    Reputations:
    327
    блин( смори суть в чем. если у тебя гдето в таблице сдт перехвачена хотябы одна из функций указанных выше, то дров перехватывает обработчик перехватчика. проверь сперва - есть ли у тебя вообще перехваты в таблице - те я уже говорил - рку или авз. если их нет, то дело не в бабине (тода дров вообще ничего не будет делать, кроме эмм некоторых инициальных действий) - соотв надо будет разбираться в других аспектах. напомню - среда должна быть 32разрядной, попробуй не на виртуалке)
     
    3 people like this.
  12. gold-goblin

    gold-goblin Elder - Старейшина

    Joined:
    26 Mar 2007
    Messages:
    917
    Likes Received:
    174
    Reputations:
    3
    Да дело в вмваре. на чистой системе работает =)) Молодец!
    И спасибо за разъяснение =)
     
    1 person likes this.
  13. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,293
    Reputations:
    327
    работает то, это гуд) пробовал с чем? просто в сухую (без ничего) ето тоже что и mov eax, eax; =)

    зы я на самом деле делал под myAC (античит такой) и все норм работает, но как оказалось - довольно перспективная тема и в отношении других средств защиты, поэтому и написал что отпосьте есть ли какая система защиты и проходит ли тема)
     
    #13 sn0w, 15 Apr 2010
    Last edited: 15 Apr 2010
  14. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    sn0w, как всегда на высоте!
     
    1 person likes this.
  15. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    эм каким методом снимаешь хуки?
    Восстановление SDT или сплайсинг хуков антивиря с последующей передачей управления на оригинальные адреса?
     
  16. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,023
    Likes Received:
    1,293
    Reputations:
    327
    хуки не снимаются, вслучае если я вижу что в сдт энтри не тот адрес, те адрес стороннего обработчика, я просто перехожу к нему и пишу на начале тела джамп к себе (с созданием трамплина пролога и тд). у себя на этот момент я имею адекватные Nt адреса, куда и передается упраление.
     
    2 people like this.
  17. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    Мдауж. За сброс 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. Оставшийся байт ты можеш не успеть записать если второе ядро успеет попасть на эту функцию. Маловероятное событие, но всё же.
     
    #17 slesh, 15 Apr 2010
    Last edited: 15 Apr 2010
  18. _antony

    _antony Elder - Старейшина

    Joined:
    16 Jul 2008
    Messages:
    80
    Likes Received:
    43
    Reputations:
    0
    да оно и так бсодит.
    хп сп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
    ---------
    
    
    
    И не много не понятно в чем новизна метода?)
     
    #18 _antony, 15 Apr 2010
    Last edited: 15 Apr 2010
  19. ntldr

    ntldr Elder - Старейшина

    Joined:
    4 Dec 2007
    Messages:
    367
    Likes Received:
    140
    Reputations:
    23
    в данном случае он никуда не внедряется сам. Ну а проактивка (у меня на Kaspersky CRYSTAL) абсолютно не палит загрузку драйвера. Но аутпост палит
     
    1 person likes this.
  20. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    2 Nightmarе судя по тому что драйвер прописывается в системе по обычному, в SYSTEM\CurrentControlSet\Services\jammer то палится любыми проактивками.