· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Перехват API-функций. Трабла с WSAStartup

Посл.отвђт Сообщенiе


Дата: Июн 17, 2004 20:06:15

Дарово. Я перехватываю функцию send в чужом процессе через изменение таблицы импорта. Свою DLL внедряю через хуки. При этом функция WSAStartup в чужом процессе начала выдавать ошибку 10091 (WSASYSNOTREADY). Так должно быть? Если да то почему это происходит и что мне сделать чтобы это исправить? Может саму WSAStartup перехватить, а дальше? А может у меня просто перехват кривой, хотя другие функции (не из WS2_32.dll) перехватываются без проблем.


Дата: Июн 18, 2004 03:18:03

Мне кажется WSAStartup каким-то образом проверяет, чтобы все адреса Winsock-функций указывали на WS2_32.dll. Зачем это ему надо я пока не догоняю. Сейчас попробую перехватить WSAStartup и при её вызове восстанавливать таблицу, а после вызова менять обратно. Люди добрые (и умные) помогите мне пожалуйста.


Дата: Июн 18, 2004 06:06:11 · Поправил: q_q

Max Kuk
WSAStartup каким-то образом проверяет
из ws2_32.dll (w2ksp4)
DllMain:
74FC1C85  push ebp
74FC1C86  mov ebp, esp
74FC1C88  push FFFFFFFF
74FC1C8A  push 74FC1CE0                   ; ->------------------------------------->-
74FC1C8F  push 74FCE1D5                   ;                                         |
74FC1C94  mov eax,dword ptr fs:[00000000] ;                                         |
74FC1C9A  push eax                        ;                                         |
74FC1C9B  mov dword ptr fs:[00000000],esp ;                                         |
74FC1CA2  push ecx                        ;                                         |
74FC1CA3  push ecx                        ;                                         |
74FC1CA4  sub esp, 00000038               ;                                         |
74FC1CA7  push ebx                        ;                                         |
74FC1CA8  push esi                        ;                                         |
74FC1CA9  push edi                        ;                                         |
74FC1CAA  mov dword ptr [ebp-18], esp     ;                                         |
74FC1CAD  mov eax, dword ptr [ebp+0C]     ; fdwReason                               |
74FC1CB0  xor ebx, ebx                    ;                                         |
74FC1CB2  sub eax, ebx                    ;                                         |
74FC1CB4  je 74FC63FE                     ; fdwReason == DLL_PROCESS_DETACH --->-   |
74FC1CBA  dec eax                         ;                                     |   |
74FC1CBB  je 74FC635A                     ; fdwReason == DLL_PROCESS_ATTACH ->- |   |
...                                       ;                                   | |   |
74FC1CE0  BYTE  4 DUP(0ffh)               ; <---------------------------------)-)----
74FC1CE4  DWORD 74FC63D0                  ;                                   | |   
74FC1CE8  DWORD 74FC63D4                  ; ----------------------------------)-)-->-
...                                       ;                                   | |   |
74FC635A  mov eax, dword ptr [ebp+08]     ; hinstDLL <------------------------- |   |
74FC635D  mov dword ptr [74FD182C], eax   ; save hinstDLL                       |   |
...                                       ;                                     |   |
74FC63D3  ret                             ; DllMain exit                        |   |
...                                       ;                                     |   |
74FC63D4  mov esp, dword ptr [ebp-18]     ; <-----------------------------------)----
74FC63D7  or dword ptr [ebp-04], FFFFFFFF ;                                     |
74FC63DB  xor ebx, ebx                    ;                                     |
74FC63DD  cmp byte ptr [ebp-44], bl       ;                                     |
74FC63E0  je 74FC63E7                     ;                                     |
74FC63E2  call 74FC5640                   ;                                     |
74FC63E7  cmp byte ptr [ebp-40], bl       ;                                     |
74FC63EA  je 74FC63F1                     ;                                     |
74FC63EC  call 74FCD7E9                   ;                                     |
74FC63F1  mov dword ptr [74FD182C], ebx   ; *** clear ***                       |
74FC63F7  xor eax, eax                    ;                                     |
74FC63F9  jmp 74FC1CC8                    ; DllMain exit                        |
                                          ;                                     |
74FC63FE  cmp dword ptr [74FD182C], ebx   ; <------------------------------------
74FC6404  je 74FC1CC5
74FC640A  cmp dword ptr [ebp+10], ebx
74FC640D  jne 74FC646B                    ; lpvReserved != NULL -> process terminate
74FC640F  ...                             ; lpvReserved == NULL -> FreeLibrary
74FC647A  mov dword ptr [74FD182C], ebx   ; *** clear ***
74FC6480  jmp 74FC1CC5                    ; DllMain exit
...

Exported fn(): WSAStartup - Ord:0073h
74FCD7F5  push ebp
74FCD7F6  mov ebp, esp
74FCD7F8  push FFFFFFFF
74FCD7FA  push 74FC4360
74FCD7FF  push 74FCE1D5
74FCD804  mov eax, dword ptr fs:[00000000]
74FCD80A  push eax
74FCD80B  mov dword ptr fs:[00000000], esp
74FCD812  push ecx
74FCD813  push ecx
74FCD814  sub esp, 00000034
74FCD817  push ebx
74FCD818  push esi
74FCD819  push edi
74FCD81A  mov dword ptr [ebp-18], esp
74FCD81D  xor ebx, ebx
74FCD81F  mov dword ptr [ebp-24], ebx
74FCD822  xor edx, edx
74FCD824  cmp dword ptr [74FD182C], ebx    
74FCD82A  jne 74FCD836                     ; hinstDLL != NULL
74FCD82C  mov eax, 0000276B                ; WSASYSNOTREADY
74FCD831  jmp 74FCD9FC                     ; WSAStartup exit
...


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.112