Проблемы со сплайсингом #2

Тема в разделе "WASM.WIN32", создана пользователем gribodemon, 10 ноя 2009.

  1. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    L"\\systemroot\\system32\\winlogon.exe"
     
  2. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    kernel32.dll -> IDA Pro -> profit?
     
  3. gribodemon

    gribodemon New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    138
    o14189
    Какой же я невнимательный. Ппц!

    А с LoadLibrary-то что делать?
     
  4. gribodemon

    gribodemon New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    138
    Оки. Respect!
     
  5. gribodemon

    gribodemon New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    138
    Я тут немножко при*уел.

    В общем, kernel32.dll:

    Код (Text):
    1. .text:77E2B6BF ; HMODULE __stdcall LoadLibraryExW(LPCWSTR lpLibFileName,HANDLE hFile,DWORD dwFlags)
    2. .text:77E2B6BF                 public LoadLibraryExW
    3. .text:77E2B6BF LoadLibraryExW  proc near
    4. .text:77E2B6BF
    5. .text:77E2B6BF lpLibFileName   = dword ptr  8
    6. .text:77E2B6BF hFile           = dword ptr  0Ch
    7. .text:77E2B6BF dwFlags         = dword ptr  10h
    8. .text:77E2B6BF
    9. .text:77E2B6BF                 mov     edi, edi
    10. .text:77E2B6C1                 push    ebp
    11. .text:77E2B6C2                 mov     ebp, esp
    12. .text:77E2B6C4                 pop     ebp
    13. .text:77E2B6C5                 jmp     loc_77E317AE
    14. .text:77E2B6C5 LoadLibraryExW  endp
    jmp loc_77E317AE

    Код (Text):
    1. .text:77E317AE ; ---------------------------------------------------------------------------
    2. .text:77E317AE
    3. .text:77E317AE loc_77E317AE:                           ; CODE XREF: LoadLibraryExW+6j
    4. .text:77E317AE                                         ; LoadLibraryW+Cp ...
    5. .text:77E317AE                 jmp     ds:LoadLibraryExW_0
    jmp ds:LoadLibraryExW_0

    Код (Text):
    1. .idata:77DE1B04 ;
    2. .idata:77DE1B04 ; Imports from API-MS-Win-Core-LibraryLoader-L1-1-0.dll
    3. .idata:77DE1B04 ;
    4. ...
    5. .idata:77DE1B44 ; HMODULE __stdcall LoadLibraryExW_0(LPCWSTR lpLibFileName,HANDLE hFile,DWORD dwFlags)
    6. .idata:77DE1B44                 extrn LoadLibraryExW_0:dword
    7. .idata:77DE1B44                                         ; DATA XREF: .text:loc_77E317AEr
    Окей, импортируется функция из API-MS-Win-Core-LibraryLoader-L1-1-0.dll. Вот, она даже в экспорте этой либы есть:

    [​IMG]

    Далее:

    Код (Text):
    1. .text:08C0107E ; Exported entry   7. GetModuleFileNameA
    2. .text:08C0107E ; Exported entry   8. GetModuleFileNameW
    3. .text:08C0107E ; Exported entry  10. GetModuleHandleExA
    4. .text:08C0107E ; Exported entry  11. GetModuleHandleExW
    5. .text:08C0107E ; Exported entry  14. LoadLibraryExA
    6. .text:08C0107E ; Exported entry  15. LoadLibraryExW
    7. .text:08C0107E
    8. .text:08C0107E ; --------------- S U B R O U T I N E ---------------------------------------
    9. .text:08C0107E
    10. .text:08C0107E
    11. .text:08C0107E ; HMODULE __stdcall LoadLibraryExA(LPCSTR lpLibFileName,HANDLE hFile,DWORD dwFlags)
    12. .text:08C0107E                 public LoadLibraryExA
    13. .text:08C0107E LoadLibraryExA  proc near
    14. .text:08C0107E
    15. .text:08C0107E lpLibFileName   = dword ptr  4
    16. .text:08C0107E hFile           = dword ptr  8
    17. .text:08C0107E dwFlags         = dword ptr  0Ch
    18. .text:08C0107E
    19. .text:08C0107E                 xor     eax, eax        ; GetModuleFileNameA
    20. .text:08C0107E                                         ; GetModuleFileNameW
    21. .text:08C0107E                                         ; GetModuleHandleExA
    22. .text:08C0107E                                         ; GetModuleHandleExW
    23. .text:08C0107E                                         ; LoadLibraryExA
    24. .text:08C01080                 retn    0Ch
    25. .text:08C01080 LoadLibraryExA  endp
    26. .text:08C01080
    27. .text:08C01080 ; ---------------------------------------------------------------------------
    xor eax, eax ???

    Windows Seven 7600
    IDA 4.90 FREE

    Что за ? o0
     
  6. gribodemon

    gribodemon New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    138
    Оу. LoadLibraryA в общем, рулит.
    Хм. Странно.

    Код (Text):
    1. .text:77E32864 ; HMODULE __stdcall LoadLibraryA(LPCSTR lpLibFileName)
    2. .text:77E32864                 public LoadLibraryA
    3. .text:77E32864 LoadLibraryA    proc near               ; CODE XREF: SetThreadExecutionState+5A0Ap
    4. .text:77E32864                                         ; sub_77E38013+1947Fp
    5. .text:77E32864
    6. .text:77E32864 lpLibFileName   = dword ptr  8
    7. .text:77E32864
    8. .text:77E32864                 mov     edi, edi
    9. .text:77E32866                 push    ebp
    10. .text:77E32867                 mov     ebp, esp
    11. .text:77E32869                 cmp     [ebp+lpLibFileName], 0
    12. .text:77E3286D                 push    ebx
    13. .text:77E3286E                 push    esi
    14. .text:77E3286F                 push    edi
    15. .text:77E32870                 jz      short loc_77E3288A
    16. .text:77E32872                 push    offset aTwain_32_dll ; "twain_32.dll"
    17. .text:77E32877                 push    [ebp+lpLibFileName] ; char *
    18. .text:77E3287A                 call    ds:_strcmpi
    19. .text:77E32880                 pop     ecx
    20. .text:77E32881                 pop     ecx
    21. .text:77E32882                 test    eax, eax
    22. .text:77E32884                 jz      loc_77E4F39F
    23. .text:77E3288A
    24. .text:77E3288A loc_77E3288A:                           ; CODE XREF: LoadLibraryA+Cj
    25. .text:77E3288A                                         ; SetThreadExecutionState+59E0j ...
    26. .text:77E3288A                 push    0               ; dwFlags
    27. .text:77E3288C                 push    0               ; hFile
    28. .text:77E3288E                 push    [ebp+lpLibFileName] ; lpLibFileName
    29. .text:77E32891                 call    LoadLibraryExA_0
    30. .text:77E32896
    31. .text:77E32896 loc_77E32896:                           ; CODE XREF: SetThreadExecutionState+5A2Cj
    32. .text:77E32896                 pop     edi
    33. .text:77E32897                 pop     esi
    34. .text:77E32898                 pop     ebx
    35. .text:77E32899                 pop     ebp
    36. .text:77E3289A                 retn    4
    37. .text:77E3289A LoadLibraryA    endp
    38. .text:77E3289A
    39.  
    40. .text:77E328B2
    41.  
    42. .text:77E4F39F loc_77E4F39F:                           ; CODE XREF: LoadLibraryA+20j
    43. .text:77E4F39F                 call    KernelBaseGetGlobalData
    44. .text:77E4F3A4                 mov     eax, [eax+2Ch]
    45. .text:77E4F3A7                 mov     ecx, large fs:18h
    46. .text:77E4F3AE                 mov     esi, 104h
    47. .text:77E4F3B3                 push    esi
    48. .text:77E4F3B4                 push    eax
    49. .text:77E4F3B5                 mov     eax, [ecx+30h]
    50. .text:77E4F3B8                 push    dword ptr [eax+18h]
    51. .text:77E4F3BB                 call    ds:__imp_RtlAllocateHeap
    52. .text:77E4F3C1                 mov     edi, eax
    53. .text:77E4F3C3                 test    edi, edi
    54. .text:77E4F3C5                 jz      loc_77E3288A
    55. .text:77E4F3CB                 lea     ebx, [esi-0Dh]
    56. .text:77E4F3CE                 push    ebx
    57. .text:77E4F3CF                 push    edi
    58. .text:77E4F3D0                 call    loc_77E1A71F
    59. .text:77E4F3D5                 test    eax, eax
    60. .text:77E4F3D7                 jz      short loc_77E4F416
    61. .text:77E4F3D9                 cmp     eax, ebx
    62. .text:77E4F3DB                 jnb     short loc_77E4F416
    63. .text:77E4F3DD                 push    0Dh
    64. .text:77E4F3DF                 push    offset unk_77E4F430
    65. .text:77E4F3E4                 push    esi
    66. .text:77E4F3E5                 push    edi
    67. .text:77E4F3E6                 call    strncat_s
    68. .text:77E4F3EB                 add     esp, 10h
    69. .text:77E4F3EE                 push    edi             ; lpLibFileName
    70. .text:77E4F3EF                 call    LoadLibraryA
    71. .text:77E4F3F4                 mov     esi, eax
    72. .text:77E4F3F6                 test    esi, esi
    73. .text:77E4F3F8                 jz      short loc_77E4F416
    74. .text:77E4F3FA                 mov     eax, large fs:18h
    75. .text:77E4F400                 mov     eax, [eax+30h]
    76. .text:77E4F403                 push    edi
    77. .text:77E4F404                 push    0
    78. .text:77E4F406                 push    dword ptr [eax+18h]
    79. .text:77E4F409                 call    ds:__imp_RtlFreeHeap
    80. .text:77E4F40F                 mov     eax, esi
    81. .text:77E4F411                 jmp     loc_77E32896
    82. .text:77E4F416 ; ---------------------------------------------------------------------------
    83. .text:77E4F416
     
  7. gribodemon

    gribodemon New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    138
    Хм. Впринципе, мне же всего лишь надо получить дескритор ntdll.dll, которая уже загружена в память процесса (чтобы сделать анхук NtProtectVirtualMemory).
    Тут есть такая функция для получения хэндла на kernel32.dll:

    Код (Text):
    1. inline HMODULE GK()
    2. {
    3.     __asm {
    4.         mov eax, dword ptr fs:[30h]
    5.         mov eax, dword ptr [eax+0ch]
    6.         mov esi, dword ptr [eax+1ch]
    7.         lodsd
    8.         mov eax, dword ptr [eax+08h]
    9.     }
    10. }
    Как её переписать, чтобы получить хэндл на ntdll.dll ?
     
  8. gribodemon

    gribodemon New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    138
  9. gribodemon

    gribodemon New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    138
    OMG!
    В Windows 7 нормальный код функции LoadLibrary хранится в DLL kernelbase.dll
     
  10. gribodemon

    gribodemon New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    138
    LdrLoadDll

    =))) Какой я невнимательный.
     
  11. gribodemon

    gribodemon New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    138
    В общем, тут полюбому нужно иметь базу ntdll.dll, ибо надо получить адрес на функцию LdrGetProcedureAddress(), ну, чтобы и на др. функции из ntdll адреса получать, т.к. в ntdll.lib, что взята из wdk не все функции доступны для имопрта.

    Вот, кстати, попроще способ получить базу ntdll.dll (тот, что в поиске был найден ... громоздкий какой-то):

    Код (Text):
    1. //- Getting kenel32.dll image base -
    2. //;-----------------------------------------------------------------------------
    3. //  mov eax, dword ptr fs:[30h] ; PEB base in eax
    4. //        mov eax, dword ptr [eax+0ch]  ; goto PEB_LDR_DATA
    5. //
    6. //        mov esi, dword ptr [eax+1ch]  ; get the first entry in the
    7. //                      ; InitOrderModuleList
    8. //  ; now the esi points to the LIST_ENTRY entry which also contains
    9. //  ; (besides others) the image base of ntdll.dll
    10. //  ; *esi
    11. //  ;   dd  *forwards_in_the_list   ; esi+0
    12. //  ;   dd  *backwards_in_the_list  ;    +4
    13. //  ;   dd  imagebase_of_ntdll.dll  ;    +8
    14. //  ;   ...
    15. //  ;   dd  imagetimestamp      ;    +44h
    16. //
    17. //
    18. //        lodsd             ; we go forwards
    19. //  mov ebx, dword ptr [eax+08h]    ; and finally we get the image base
    20. //                  ; of kernel32.dll
    21. //;-----------------------------------------------------------------------------
    22. inline HMODULE GetNtdllBase()
    23. {
    24.     __asm {
    25.         mov eax, dword ptr fs:[30h]
    26.         mov eax, dword ptr [eax+0ch]
    27.        
    28.         ; kernel32.dll
    29.         ;mov esi, dword ptr [eax+1ch]
    30.         ;lodsd
    31.  
    32.         ; ntdll.dll
    33.         mov eax, dword ptr [eax+1ch]
    34.        
    35.         mov eax, dword ptr [eax+08h]
    36.  
    37.     }
    38. }
     
  12. gribodemon

    gribodemon New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    138
    Чёто я гоню. Адреса на функции из ntdll.dll нужно через ручной парсинг таблицы экспорта получать. Просто тут жизненно необходимо было получить её базу.

    ВЕРНИТЕ РЕДАКТИРОВАНИЕ!
     
  13. o14189

    o14189 New Member

    Публикаций:
    0
    Регистрация:
    19 июл 2009
    Сообщения:
    320
    ну да) ты это вроде выше писал? или это уже просьба?
    https://www.wasm.ru/forum/viewtopic.php?pid=346677#p346677
     
  14. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    А может API+MSDN+мозг?
     
  15. gribodemon

    gribodemon New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    138
    Это вообще к чему?
    Причём тут MSDN ? Я использую недокументированные функции из ntdll.dll
     
  16. gribodemon

    gribodemon New Member

    Публикаций:
    0
    Регистрация:
    17 июн 2009
    Сообщения:
    138
    Да, писал. Подкорректил себя просто.