.dll падает в висте

Тема в разделе "WASM.WIN32", создана пользователем 2FED, 15 авг 2008.

  1. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Есть .dll которая отлично работает в XPSP2. Она загружается в эксплорер через
    HKEY_LOCAL_MACHINE\....\ShellServiceObjectDelayLoad. затем устанавливает хук( SetWindowsHookEx ) чтобы проникнуть в другие процессы. Попробовал протестить её под Vista и Explorer сразу упал, Дело в том что я тестил через жопу, а конкретней у кореша на VMWare стояла виста, а я через Radmin к ней конектился =). тоесть всё лагало и времени разбиратся небыло. Может вы подскажете изза чего она могла вылететь.

    Вот ветка кода которая исполняется в контексте Explorer-a
    Код (Text):
    1. GetRealAddr proc
    2.     mov     eax,[eax+2]
    3.     mov     eax,[eax]
    4.     ret
    5. GetRealAddr endp
    6.  
    7. ReloadDll   proc unload:dword
    8. LOCAL mem:dword
    9.     mov     esi,m2
    10.     sub     esi,m1
    11.     mov     ecx,esi
    12.     add     ecx,4*8
    13.     invoke  VirtualAlloc,0,ecx,MEM_COMMIT,PAGE_EXECUTE_READWRITE
    14.     mov     mem,eax
    15.     add     eax,4*8
    16.     push    eax
    17.  
    18.     mov     ecx,esi
    19.     mov     edi,eax
    20.     mov     esi,m1
    21.     cld
    22. @@:
    23.     lodsb           ; Копируем шелкод
    24.     stosb           ;
    25.     dec     ecx
    26.     jnz     @b
    27.    
    28.    
    29.     mov     edi,mem
    30.    
    31.     mov     eax,ExitThread
    32.     call    GetRealAddr
    33.     mov     [edi],eax
    34.    
    35.     mov     eax,Sleep
    36.     call    GetRealAddr
    37.     mov     [edi+4],eax
    38.    
    39.     mov     eax,LoadLibrary
    40.     call    GetRealAddr
    41.     mov     [edi+8],eax
    42.    
    43.     mov     eax,FreeLibrary
    44.     call    GetRealAddr
    45.     mov     [edi+12],eax
    46.    
    47.     invoke  VirtualAlloc,0,100,MEM_COMMIT,PAGE_READWRITE
    48.     mov     [edi+20],eax
    49.     invoke  GetModuleFileName,hInstance,eax,100
    50.    
    51.     mov     eax,VirtualFree
    52.     call    GetRealAddr
    53.     mov     [edi+24],eax
    54.    
    55.     pop eax
    56.     jmp eax
    57.    
    58. m1:
    59.     push    hInstance
    60.     call    dword ptr[edi+12]   ;FreeLibrary
    61.    
    62.     push    60000               ;One Minute
    63.     call    dword ptr[edi+4]    ;Sleep
    64.    
    65.     push    [edi+20]            ;Dll String
    66.     call    dword ptr[edi+8]    ;Load Library
    67.    
    68.     push    MEM_RELEASE
    69.     push    0
    70.     push    [edi+20]            ;Dll String
    71.    
    72.     push    0
    73.     call    dword ptr[edi]      ;ExitThread
    74.    
    75. m2:
    76.  
    77. ReloadDll endp
    78.  
    79. NotifyThrd proc p1:dword
    80. LOCAL hKey:dword
    81.     invoke  Sleep,100
    82.     invoke  SetWindowsHookEx,WH_SHELL,addr AddhWinProc,hInstance,0 ;Загружаемся во "все" процессы
    83.     mov     hHook,eax
    84.  
    85.     invoke  RegCreateKeyEx,HKEY_CURRENT_USER,addr NotifyKey,0,0,REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS or KEY_NOTIFY,0,ADDR hKey,0
    86.  
    87.     invoke  RegDeleteValue,hKey,addr NotifyValue
    88. @@:
    89.     invoke  RegNotifyChangeKeyValue,hKey,FALSE,REG_NOTIFY_CHANGE_LAST_SET,0,FALSE ;ждём флага выгрузки
    90.     xor     eax,eax
    91.     invoke  RegQueryValueEx,hKey,addr NotifyValue,eax,eax,eax,eax ; Если создан флаг, выгружаемся
    92.     test    eax,eax
    93.     jnz     @b          ;Инача продолжаем ждать
    94.    
    95.     invoke  RegDeleteValue,hKey,addr NotifyValue ;Удаляем флаг
    96.     invoke  RegCloseKey,hKey
    97.  
    98.  
    99.     invoke  UnhookWindowsHookEx,hHook ; Выгружаемся
    100.     invoke  Sleep,200
    101.     invoke  SendMessage,HWND_BROADCAST,WM_USER,0,0
    102.     invoke  Sleep,500
    103.    
    104.     call    ReloadDll ;выгружаем длл из эксплорера
    105.  
    106. NotifyThrd endp
    107.  
    108.  
    109. DllEntry proc uses esi edi hInst:HINSTANCE, reason:DWORD, reserved1:DWORD
    110. LOCAL MyHahd:dword
    111. LOCAL thrdID:dword
    112.     invoke  GetModuleHandle,0
    113.     mov     MyHahd,eax
    114.    
    115.     cmp     reason,DLL_PROCESS_ATTACH
    116.     jne     detach
    117.    
    118.     invoke  GetModuleHandle,addr eXp ; Explorer.exe
    119.     cmp     MyHahd,eax
    120.     jne     @F
    121.    
    122.     push    hInst
    123.     pop     hInstance
    124.    
    125.     invoke  CreateThread,NULL,0,addr NotifyThrd,0,0,ADDR thrdID
    126.  
    127.     jmp     exit
    128. @@:
    129.  
    130.     ;.....
    131.  
    132. detach:
    133.     ;.....
    134. exit:
    135.     mov     eax,TRUE
    136.     ret
    137. DllEntry endp
     
  2. mikityak

    mikityak Забанен

    Публикаций:
    0
    Регистрация:
    5 авг 2007
    Сообщения:
    160
    [​IMG] интересно.. а если не через.. ж тогда што ? (ет понятно што хочиш всунуть и не вишла.. мож сначала так испитать)
     
  3. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Тоесть "так испитать" ? То что система работает под WMWare значения не имеет.
     
  4. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Может в висте дллки которые подключаются с помошью ShellServiceObjectDelayLoad должны иметь какойто особый формат? Просто я уже попробовал прописать просто дллку которая ничего не делает кроме как выдаёт месадж бокс. ошибки небыло но Эксплорер повис. Но это же самая дллка( в висте ) нормальна выводит месадж бокс если её загрузить сторонней прогой( просто написать прогу которая делает LoadLibrary ).

    Кто то чтонибудь значет об этом?

    вот собсно код длл которая ничего не делает и изза которой подвисает эксплорер

    Код (Text):
    1. .686p
    2. .model flat,stdcall
    3. include windows.inc
    4. include kernel32.inc
    5. include user32.inc
    6. includelib kernel32.lib
    7. includelib user32.lib
    8. .code
    9. DllMain proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD
    10. LOCAL thid:dword
    11.     cmp     reason,DLL_PROCESS_ATTACH
    12.     jne     exit
    13.     invoke  MessageBox,0,0,0,MB_ICONASTERISK
    14. exit:   ret
    15. DllMain endp
    16. end DllMain
     
  5. iceaxe

    iceaxe New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2007
    Сообщения:
    14
    Привет - ТУФЕД!!!

    Насколько я знаю DllMain должна возвратить в eax значение TRUE. Может здесь собака порылась?
     
  6. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Возвращает TRUE.

    Я уже думаю может стянуть с висты какуюнить дллку WebCheck.dll например. и посмотреть как у неё dllmain устроен.
     
  7. lamer2k

    lamer2k New Member

    Публикаций:
    0
    Регистрация:
    14 май 2006
    Сообщения:
    88
    Возможно это потому, что в DllMain нельзя создавать потоки (по рекомнедации МС)
     
  8. lamer2k

    lamer2k New Member

    Публикаций:
    0
    Регистрация:
    14 май 2006
    Сообщения:
    88
     
  9. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    я поток не синхронизирую
     
  10. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    2FED
    А правда MessageBox - штука коварная ;)
    Попробуй лучше файл создавать или директорию (меньше кода), или ещё как нибудь проявить деятельность...
     
  11. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Y_Mur
    Ему уже говорили. Не слушает:
    http://www.wasm.ru/forum/viewtopic.php?pid=257003#p257003
     
  12. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    ладно с масаджбоксом из тестового примера, в реальном коде нет никаких боксов
     
  13. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    2FED
    Дык дело не в том чтобы использовать или нет MessageBox - если очень хочется используй на здоровье ;)
    Только когда возникает странный глюк - первым делом проверяй, не MessageBox ли его устраивает (тем более проверка то элементарная), а потому уже подозревай причины типа
    ЗЫ: Это типа Лезвие Оккама называется ;))