1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

запуск процесса из ядра

Тема в разделе "WASM.NT.KERNEL", создана пользователем brainFucker, 11 дек 2009.

  1. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Ядерный не будет брякаться, если упало приложение, а не система.
    Воспользуйся командой !bpid <pid>, чтобы получить управление при падении Проводника.
     
  2. at0s

    at0s New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2009
    Сообщения:
    91
    посмотри, пожалуйста, 58 пост. Я долго его редактировал и он остался позади
     
  3. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Команда !bpid принимает на вход ID процесса, а не адрес его объекта.
    И выполнять команду надо до запуска алгоритма, иначе какой смысл-то потом.
     
  4. lomerok

    lomerok New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2008
    Сообщения:
    60
    скажите я правильно понял:
    1 - если драйвер запустит процесс, то он(процесс)получит права System???
    2 - убить этот процесс потом можно?,стандратным таскменеджером...??

    сори за нубский вопрос=)
     
  5. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    Он получит те права, которые укажет драйвер при запуске.
    Это самый обычный процесс и для него работают те же правила, что и для остальных процессов.
    Если конечно при запуске не было извращений.
     
  6. at0s

    at0s New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2009
    Сообщения:
    91
    Смотрю уже который день и не нахожу, что не так.
    почему эта фигня валит explorer ?
    ПОМОГИТЕ !!!

    kd> dt pTargetProcess
    Local var @ 0x88f0ba04 Type m_eprocess*
    0x85d39158

    kd> dt pTargetThread
    Local var @ 0x88f0ba00 Type _mKTHREAD*
    0x85d55030


    !process 0 2
    ...........................
    PROCESS 85d39158 SessionId: 1 Cid: 067c Peb: 7ffd3000 ParentCid: 0668
    DirBase: 4f4b4320 ObjectTable: 90807390 HandleCount: 654.
    Image: explorer.exe

    THREAD 85d3cd48 Cid 067c.0680 Teb: 7ffdf000 Win32Thread: fe6b6008 WAIT: (WrUserRequest) UserMode Non-Alertable
    85d3edf8 SynchronizationEvent

    THREAD 85d55030 Cid 067c.06a0 Teb: 7ffde000 Win32Thread: 00000000 WAIT: (UserRequest) UserMode Alertable
    85d54248 SynchronizationTimer
    85d54358 SynchronizationTimer
    85cd39d0 NotificationEvent
    85eecf68 SynchronizationEvent
    .........................................
    Код (Text):
    1. NTSTATUS
    2. InstallUserModeApc(LPSTR lpProcess, mPKTHREAD pTargetThread, mPeprocess pTargetProcess)
    3. {
    4.     PRKAPC pApc = NULL; //Our APC
    5.     mKAPC_STATE ApcState; // Needed for KeStackAttachProcess
    6.    
    7.     PVOID pMappedAddress = NULL; //This is where the UserMode routine's code will be placed at
    8.     ULONG dwSize = 0; //Size of code to be executed in Explorer's address space
    9.  
    10.     ULONG *data_addr=0; //just a helper to change the address of the 'push' instruction in the ApcCreateProcess routine
    11.     ULONG dwMappedAddress = 0; //same as above
    12.     NTSTATUS Status = STATUS_UNSUCCESSFUL;
    13.    
    14.     Delivered = 0;
    15.  
    16.     //Allocate memory for our APC
    17.     pApc = ExAllocatePoolWithTag (NonPagedPool,sizeof (KAPC),'apc');
    18.     if (!pApc)
    19.     {
    20.             dp(" * * * * * KernelExec -> Failed to allocate memory for the APC structure\n");
    21.         return STATUS_INSUFFICIENT_RESOURCES;
    22.     }
    23.  
    24.     //Get the size of our UserMode code
    25.     dwSize = (unsigned char*)ApcCreateProcessEnd-(unsigned char*)ApcCreateProcess;
    26.    
    27.     //Allocate an MDL describing our ApcCreateProcess' memory
    28.     pnMdl = IoAllocateMdl (ApcCreateProcess, dwSize, FALSE,FALSE,NULL);
    29.     if (!pnMdl)
    30.     {
    31.             dp(" * * * * * KernelExec -> Failed to allocate MDL\n");
    32.         ExFreePoolWithTag (pApc,'apc');
    33.         return STATUS_INSUFFICIENT_RESOURCES;
    34.     }
    35.    
    36.     __try
    37.     {
    38.         //Probe the pages for Write access and make them memory resident
    39.         MmProbeAndLockPages (pnMdl,KernelMode,IoWriteAccess);
    40.     }
    41.     __except (EXCEPTION_EXECUTE_HANDLER)
    42.     {
    43.             dp(" * * * * * KernelExec -> Exception during MmProbeAndLockPages\n");
    44.         IoFreeMdl (pnMdl);
    45.         ExFreePoolWithTag (pApc, 'apc');
    46.         return STATUS_UNSUCCESSFUL;
    47.     }
    48.    
    49.     //Attach to the Explorer's address space KeStackAttachProcess(&(pTargetProcess->Pcb),&ApcState);
    50.     KeStackAttachProcess( (PKPROCESS)(pTargetProcess), &ApcState);
    51.  
    52.     //Now map the physical pages (our code) described by 'pnMdl'
    53.     pMappedAddress = MmMapLockedPagesSpecifyCache (pnMdl,UserMode,MmCached,NULL,FALSE,NormalPagePriority);
    54.    
    55.     if (!pMappedAddress)
    56.     {
    57.         dp(" * * * * * KernelExec -> Cannot map address\n");
    58.         KeUnstackDetachProcess (&ApcState);
    59.         IoFreeMdl (pnMdl);
    60.         ExFreePoolWithTag (pApc,'apc');
    61.         return STATUS_UNSUCCESSFUL;
    62.     }
    63.  
    64.     //all done, detach now
    65.     KeUnstackDetachProcess (&ApcState);
    66.    
    67.     //Initialize the APC...
    68.     KeInitializeApc(
    69.                 pApc,
    70.                 pTargetThread,
    71.                 OriginalApcEnvironment,
    72.                 &ApcKernelRoutine,
    73.                 NULL,
    74.                 pMappedAddress,
    75.                 UserMode,
    76.                 (PVOID) NULL );
    77.    
    78.     //...and queue it
    79.     if (!KeInsertQueueApc(pApc,0,NULL,0))
    80.     {
    81.         dp(" * * * * * KernelExec -> Failed to insert APC\n");
    82.         MmUnlockPages(pnMdl);
    83.         IoFreeMdl (pnMdl);
    84.         ExFreePoolWithTag (pApc,'apc');
    85.         return STATUS_UNSUCCESSFUL;
    86.     }
    87.     else
    88.     {
    89.         dp(" * * * * * KernelExec -> APC delivered\n");
    90.         Delivered = 1;
    91.     }
    92.  
    93.     //is this a non-alertable thread?
    94.     if(!pTargetThread->ApcState.UserApcPending)
    95.     {       //if yes then alert it
    96.         pTargetThread->ApcState.UserApcPending = TRUE;
    97.     }
    98.     return 0;
    99. }
    100.  
    101. __declspec(naked) void ApcCreateProcess(PVOID NormalContext, PVOID  SystemArgument1, PVOID SystemArgument2)
    102. {
    103.  __asm
    104.     {
    105.         ret 0x0c
    106.     }
    107. }
    108. void ApcCreateProcessEnd(){}
     
  7. kejcerfcrv

    kejcerfcrv New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2011
    Сообщения:
    320
    at0s
    Поток из воздуха появился ?
     
  8. at0s

    at0s New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2009
    Сообщения:
    91
    Процесс и поток нахожу, вызываю InstallUserModeApc.
    выше - вывод дебагера, где видим что, pTargetThread и pTargetProcess переданы правильно
    там все нормально, проблема в чем-то другом, в чем ????
     
  9. at0s

    at0s New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2009
    Сообщения:
    91
    Похоже на отсутствие доступа, explorer валится на команде nop.
    Профи! не молчите

    Код (Text):
    1. (b08.ab8): Access violation - code c0000005 (first chance)
    2. First chance exceptions are reported before any exception handling.
    3. This exception may be expected and handled.
    4. eax=02ed0940 ebx=778cfe90 ecx=01f8ff78 edx=778e6f40 esi=00287158 edi=01f8fb20
    5. eip=02ed0940 esp=01f8fb10 ebp=01f8ff88 iopl=0         nv up ei ng nz ac po cy
    6. cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00010293
    7. 02ed0940 90              nop
    8. 0:001> u
    9. 02ed0940 90              nop
    10. 02ed0941 b8fde56177      mov     eax,offset kernel32!WinExec (7761e5fd)
    11. 02ed0946 6a01            push    1
    12. 02ed0948 685409ed02      push    2ED0954h
    13. 02ed094d ffd0            call    eax
    14. 02ed094f e99a010000      jmp     02ed0aee
    15. 02ed0954 633a            arpl    word ptr [edx],di
     
  10. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    992
    права на исполнение есть в указанной памяти (02ed0940 ) ?
     
  11. at0s

    at0s New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2009
    Сообщения:
    91
    Не понимаю почему его не должно там быть.
     
  12. at0s

    at0s New Member

    Публикаций:
    0
    Регистрация:
    13 июл 2009
    Сообщения:
    91
    Кто-нибудь запускал процесс под WIN 7 через APC, в чем разница с XP ?