Пример из Г.Хоглунга с SYSTEM_LOAD_AND_CALL_IMAGE - не работает?

Тема в разделе "WASM.BEGINNERS", создана пользователем _sheva740, 21 окт 2008.

  1. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Добрый день.
    Читаю Г.Хоглунг. Руткиты. Внедрение в ядро Windows.

    Там он предложил два способа загрузки драйвера. Первый из них с помощью функции
    Код (Text):
    1.     if(
    2.         !NT_SUCCESS(
    3.             ZwSetSystemInformation(
    4.                 SystemLoadAndCallImage
    5.                 ,&GregsImage
    6.                 ,sizeof(SYSTEM_LOAD_AND_CALL_IMAGE))))
    Переписал в масм
    Код (Text):
    1. .586
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. includelib \masm32\lib\kernel32.lib
    8. include \masm32\Macros\Strings.mac
    9.  
    10.  
    11. .data
    12.  
    13. ntdlldll            db "ntdll.dll",0
    14. ZwSetSystemInformation  db "ZwSetSystemInformation",0
    15. RtlInitUnicodeString    db "RtlInitUnicodeString",0
    16.    
    17. _ZwSetSystemInformation dd 0
    18. _RtlInitUnicodeString   dd 0
    19.  
    20. SYSTEM_LOAD_AND_CALL_IMAGE STRUCT
    21.     ModuleName          UNICODE_STRING <>
    22.     ModuleBase          dd 0
    23.     Unknown             dd 0
    24.     EntryPoint          dd 0
    25.     ExportDirectory     dd 0
    26. SYSTEM_LOAD_AND_CALL_IMAGE ENDS
    27.  
    28.  
    29. simage          SYSTEM_LOAD_AND_CALL_IMAGE <>
    30.  
    31. .code
    32.  
    33. start proc
    34.  
    35.     invoke  LoadLibrary,offset ntdlldll
    36.     mov esi,eax
    37.     invoke  GetProcAddress,esi,offset RtlInitUnicodeString
    38.     mov _RtlInitUnicodeString,eax
    39.     invoke  GetProcAddress,esi,offset ZwSetSystemInformation
    40.     mov _ZwSetSystemInformation,eax
    41.  
    42.     mov eax,$CTA0("\??\c:\getstr.sys")
    43.     push    eax
    44.     mov esi,offset simage
    45.     assume  esi:ptr SYSTEM_LOAD_AND_CALL_IMAGE
    46.     lea eax,[esi].ModuleName
    47.     push    eax
    48.     call    _RtlInitUnicodeString
    49.  
    50.  
    51.     push    sizeof SYSTEM_LOAD_AND_CALL_IMAGE
    52.     push    esi
    53.     push    38  ; =SystemLoadAndCallImage
    54.     call    _ZwSetSystemInformation
    55.  
    56.     invoke  ExitProcess,0
    57. start endp
    58.  
    59. end start
    На С: лежит рабочий драйвер - getstr.sys. И вот не грузится ведьт :dntknw:
    Обращаюсь к нему из юзермода - драйвер не загружен. :dntknw:
    Где накосячил, подскажите ...
     
  2. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    а $CTA0 разве с для юникод строк?
     
  3. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Ну так тогда, тоже не грузит :dntknw:
    Код (Text):
    1. .586
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. include \masm32\include\user32.inc
    8. include \masm32\include\masm32.inc
    9. include \masm32\include\advapi32.inc
    10.  
    11. includelib \masm32\lib\kernel32.lib
    12. includelib \masm32\lib\user32.lib
    13. includelib \masm32\lib\advapi32.lib
    14. includelib \masm32\lib\masm32.lib
    15.  include \masm32\Macros\Strings.mac
    16.  
    17.  
    18. UNICODE_STRING STRUCT
    19.     _Length         WORD 0
    20.     MaximumLength   WORD 0
    21.     Buffer          PWSTR 0
    22. UNICODE_STRING ENDS
    23.  
    24. SYSTEM_LOAD_AND_CALL_IMAGE STRUCT
    25.     ModuleName          UNICODE_STRING <>
    26.     ModuleBase          dd 0
    27.     Unknown             dd 0
    28.     EntryPoint          dd 0
    29.     ExportDirectory     dd 0
    30. SYSTEM_LOAD_AND_CALL_IMAGE ENDS
    31.  
    32. .data
    33. ntdlldll            db "ntdll.dll",0
    34. ZwSetSystemInformation  db "ZwSetSystemInformation",0
    35. RtlInitUnicodeString    db "RtlInitUnicodeString",0
    36.    
    37. _ZwSetSystemInformation dd ?
    38. _RtlInitUnicodeString   dd ?
    39.  
    40. spath           dw '\','?','?','\','c',':','\','g','e','t','s','t','r','.','s','y','s',0,0
    41.  
    42.  
    43.  
    44. simage          SYSTEM_LOAD_AND_CALL_IMAGE <>
    45.  
    46. .code
    47.  
    48. start proc
    49.  
    50.     invoke  LoadLibrary,offset ntdlldll
    51.     mov esi,eax
    52.     invoke  GetProcAddress,esi,offset RtlInitUnicodeString
    53.     mov _RtlInitUnicodeString,eax
    54.     invoke  GetProcAddress,esi,offset ZwSetSystemInformation
    55.     mov _ZwSetSystemInformation,eax
    56.  
    57.     mov eax,offset spath
    58.  
    59.     push    eax
    60.     mov esi,offset simage
    61.     assume  esi:ptr SYSTEM_LOAD_AND_CALL_IMAGE
    62.     lea eax,[esi].ModuleName
    63.     push    eax
    64.     call    _RtlInitUnicodeString
    65.  
    66.     push    sizeof SYSTEM_LOAD_AND_CALL_IMAGE
    67.     push    esi
    68.     push    38
    69.     call    _ZwSetSystemInformation
    70.  
    71.     invoke  ExitProcess,0
    72. start endp
    73.  
    74. end start
     
  4. Velheart

    Velheart New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    526
    размер SYSTEM_LOAD_AND_CALL_IMAGE не такой судя по статусу
     
  5. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    _sheva740
    + адрес SYSTEM_LOAD_AND_CALL_IMAGE должен быть кратен четырем.
     
  6. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    q_q
    Velheart

    это значит так ?
    Код (Text):
    1. .
    2. .
    3. .
    4. SYSTEM_LOAD_AND_CALL_IMAGE STRUCT
    5.     ModuleName          UNICODE_STRING <>
    6. SYSTEM_LOAD_AND_CALL_IMAGE ENDS
    7.  
    8. .
    9. .
    10. .
    11.  
    12. align 4 ; <--------
    13. simage          SYSTEM_LOAD_AND_CALL_IMAGE <>
    14.  
    15. .code
    16.  start proc
    17. .
    18. .
    19. .
     
  7. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    _sheva740
    да
     
  8. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    q_q
    вылетает почему-то :dntknw:
    [​IMG]
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    _sheva740
    Это уже проблема дрова
    Проверил на beeper.sys от Four-F - нормально грузится :)
    Кстати с учётом статичности строки с именем код можно упростить до
    Код (Text):
    1. .586
    2. .model flat, stdcall
    3. option casemap:none
    4.  
    5. include \masm32\include\windows.inc
    6. include \masm32\include\kernel32.inc
    7. include \masm32\include\user32.inc
    8. include \masm32\include\masm32.inc
    9. include \masm32\include\advapi32.inc
    10. include \masm32\Macros\Strings.mac
    11.  
    12. includelib \masm32\lib\kernel32.lib
    13. includelib \masm32\lib\user32.lib
    14. includelib \masm32\lib\advapi32.lib
    15. includelib \masm32\lib\masm32.lib
    16.  
    17. SYSTEM_LOAD_AND_CALL_IMAGE STRUCT
    18.     ModuleName_Length        dw 0
    19.     ModuleName_MaximumLength     dw 0
    20.     ModuleName_lpBuffer      dd 0
    21. SYSTEM_LOAD_AND_CALL_IMAGE ENDS
    22.  
    23. .data
    24. ntdlldll        db "ntdll.dll",0
    25. ZwSetSystemInformation  db "ZwSetSystemInformation",0
    26. spath           dw '\','?','?','\','c',':','\','g','e','t','s','t','r','.','s','y','s',0,0
    27. align 4
    28. simage          SYSTEM_LOAD_AND_CALL_IMAGE <sizeof spath - 4, sizeof spath - 2, offset spath>
    29.  
    30. .data?
    31. _ZwSetSystemInformation dd ?
    32.  
    33. .code
    34.  
    35. start proc
    36.  
    37.     invoke  LoadLibrary, offset ntdlldll
    38.     mov esi, eax
    39.     invoke  GetProcAddress, esi, offset ZwSetSystemInformation
    40.     mov _ZwSetSystemInformation, eax
    41.  
    42.    
    43.     push    sizeof SYSTEM_LOAD_AND_CALL_IMAGE
    44.     push    offset simage
    45.     push    38          ; SystemLoadAndCallImage
    46.     call    _ZwSetSystemInformation
    47.  
    48.     invoke  ExitProcess, 0
    49. start endp
    50.  
    51. end start
     
  10. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    да, дело в драйвере было!!!!!
    заработало!!!!!
    СПАСИБО всем за помощь!!!!!