фон рабочего стола

Тема в разделе "WASM.BEGINNERS", создана пользователем gale1238, 9 фев 2012.

  1. gale1238

    gale1238 New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2009
    Сообщения:
    72
    Как при загрузке хрюши поймать момент, когда появляется пустой фон, т. е. обои рабочего стола, без панели задач и иконок?
    Заметил, что программы из секции HKCU...RunOnce запускаются тогда, когда значки и панель задач уже появились.
     
  2. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Winlogon\Shell ?
     
  3. Sunzer

    Sunzer Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    256
    Потому что их explorer подгружает.
     
  4. gale1238

    gale1238 New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2009
    Сообщения:
    72
    K10
    Помогло, спасибо.
    Как теперь удалить больше ненужную DLL-ку?
     
  5. dreamse

    dreamse New Member

    Публикаций:
    0
    Регистрация:
    2 авг 2011
    Сообщения:
    28
    > Как теперь удалить больше ненужную DLL-ку?

    тебе на форум телепатов :)
     
  6. gale1238

    gale1238 New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2009
    Сообщения:
    72
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\my]
    "DLLName"="my.dll"

    Как удалить my.dll без перезагрузки коппьютера?
     
  7. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    gale1238
    Выделить память VirtualAlloc(..., PAGE_EXECUTE_READWRITE, ...), записать в нее шеллкод, который делает FreeLibrary, DeleteFile, ExitThread и выполнить.

    Winlogon\Notify вроде отменили для ХР+, если ничего не путаю.

    Вы там блокираторы чтоли пишите?
    А потом школники из окна прыгают, нехорошо...
     
  8. MMIX

    MMIX New Member

    Публикаций:
    0
    Регистрация:
    9 дек 2011
    Сообщения:
    385
    gale1238
    unlocker
     
  9. gale1238

    gale1238 New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2009
    Сообщения:
    72
    Winlogon запускает функцию из DLL. Можно ли в эту функцию добавить код, который удалял бы ту же самую DLL?
    Я даже не знаю, что это такое. Меня интересует автоматическая установка оси.
     
  10. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Только здесь надо будет создать поток с точкой старта на начале шеллкода.
     
  11. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Тогда зачем так сложно. Это делается манипуляциями со скриптами в дистре. В инете полно инфы и куча утилит.
     
  12. gale1238

    gale1238 New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2009
    Сообщения:
    72
    Сценарии не всё могут.

    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\Notify\my]
    "Asynchronous"=dword:00000000
    "DLLName"="my.dll"
    "Impersonate"=dword:00000000
    "StartShell"="SelfDelete"
    Код (Text):
    1. extern _imp__CloseHandle@4:dword
    2. extern _imp__CreateThread@24:dword
    3. extern _imp__DeleteFileA@4:dword
    4. extern _imp__ExitThread@4:dword
    5. extern _imp__FreeLibrary@4:dword
    6. extern _imp__GetEnvironmentVariableA@12:dword
    7. extern _imp__GetExitCodeThread@8:dword
    8. extern _imp__GetModuleHandleA@4:dword
    9. extern _imp__VirtualAlloc@16:dword
    10. .data?
    11.     buffer db MAX_PATH dup(?)
    12. .const
    13.     env db 'SystemRoot',0
    14.     file db '\system32\my.dll',0
    15. .code
    16. DllEntry proc hInstance:DWORD,reason:DWORD,reserved1:DWORD
    17.     ret
    18. DllEntry Endp
    19. SelfDelete proc
    20.     mov ebx,offset buffer
    21.         push MAX_PATH
    22.         push ebx
    23.         push offset env
    24.     call _imp__GetEnvironmentVariableA@12
    25.     mov edi,ebx
    26.     add edi,eax
    27.     mov esi,offset file
    28.     mov ecx,sizeof file
    29.     rep movsb
    30.         push PAGE_EXECUTE_READWRITE
    31.         push MEM_COMMIT or MEM_RESERVE
    32.         push eax
    33.         push ecx
    34.     call _imp__VirtualAlloc@16
    35.     mov edi,eax
    36.     mov esi,@f
    37.     mov ecx,@e
    38.     sub ecx,esi
    39.     rep movsb
    40.     mov edi,eax
    41.         push ecx
    42.         push ecx
    43.         push ecx
    44.         push eax
    45.         push ecx
    46.         push ecx
    47.     call _imp__CreateThread@24
    48.         push eax
    49.     call _imp__CloseHandle@4
    50.     call edi
    51. @@:  push ebx
    52.     call _imp__GetModuleHandleA@4
    53.         push eax
    54.     call _imp__FreeLibrary@4
    55.         push ebx
    56.     call _imp__DeleteFileA@4
    57.         push STILL_ACTIVE
    58.     call _imp__ExitThread@4
    59. @e:
    60. SelfDelete endp
    61. End DllEntry
    Файл не удаляется, вход в систему блокируется. Значит, где-то в коде ошибка.
     
  13. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Код (Text):
    1.    mov ebx,offset buffer
    2.         push MAX_PATH
    3.         push ebx
    4.         push offset env
    5.     call _imp__GetEnvironmentVariableA@12
    вообще есть GetSystemDirectory
    Если нужен путь до своего модуля, то GetModuleFileName(Instance, ...

    Код (Text):
    1. .data?
    2.     buffer db MAX_PATH dup(?)
    3.  
    4. ...
    5.  
    6.     mov ebx,offset buffer
    7.  
    8. ...
    9.  
    10.     push ebx
    11.     call _imp__DeleteFileA@4
    В это время модуль (в котором и содержится буфер с путем к файлу) уже выгружен, соответственно буфера этого уже нет. Нужно этот путь также скопировать в выделенную память.
     
  14. gale1238

    gale1238 New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2009
    Сообщения:
    72
    Код (Text):
    1. extern _imp__CloseHandle@4:dword
    2. extern _imp__CreateThread@24:dword
    3. extern _imp__DeleteFileA@4:dword
    4. extern _imp__ExitThread@4:dword
    5. extern _imp__FreeLibrary@4:dword
    6. extern _imp__GetSystemDirectoryA@8:dword
    7. extern _imp__GetModuleHandleA@4:dword
    8. extern _imp__VirtualAlloc@16:dword
    9. .const
    10.     file db '\my.dll',0
    11. .code
    12. DllEntry proc hInstance:DWORD,reason:DWORD,reserved1:DWORD
    13.     ret
    14. DllEntry Endp
    15. SelfDelete proc
    16.     mov esi,@f
    17.     mov ebx,@e
    18.     sub ebx,esi
    19.         push PAGE_EXECUTE_READWRITE
    20.         push MEM_COMMIT or MEM_RESERVE
    21.         push ebx
    22.         push NULL
    23.     call _imp__VirtualAlloc@16
    24.     mov edi,eax
    25.     mov ecx,ebx
    26.     rep movsb
    27.     mov edi,eax
    28.         push ecx
    29.         push ecx
    30.         push ecx
    31.         push eax
    32.         push ecx
    33.         push ecx
    34.     call _imp__CreateThread@24
    35.         push eax
    36.     call _imp__CloseHandle@4
    37.     call edi
    38. @@: add edi,ebx
    39.     mov ebx,edi
    40.         push MAX_PATH
    41.         push edi
    42.     call _imp__GetSystemDirectoryA@8
    43.     add edi,eax
    44.     mov esi,offset file
    45.     mov ecx,sizeof file
    46.     rep movsb
    47.         push ebx
    48.     call _imp__GetModuleHandleA@4
    49.         push eax
    50.     call _imp__FreeLibrary@4
    51.         push ebx
    52.     call _imp__DeleteFileA@4
    53.         push STILL_ACTIVE
    54.     call _imp__ExitThread@4
    55. @e:
    56. SelfDelete endp
    57. End DllEntry
    Ошибка в GetModuleHandle.
     
  15. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    gale1238
    Handle вашего модуля передается в DllMain, его не нужно отдельно определять.
     
  16. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Код (Text):
    1. _STOSB MACRO Param: REQ
    2.   MOV AL, Param
    3.   STOSB
    4. ENDM
    5.  
    6. _STOSW MACRO Param: REQ
    7.   MOV AX, Param
    8.   STOSW
    9. ENDM
    10.  
    11. _STOSD MACRO Param: REQ
    12.   MOV EAX, Param
    13.   STOSD
    14. ENDM
    15.  
    16. ImpAddr MACRO DestReg: REQ, ImpProcName: REQ
    17.   MOV DestReg, OFFSET ImpProcName
    18.   MOV DestReg, DWORD PTR [DestReg + 2]
    19.   MOV DestReg, DWORD PTR [DestReg]
    20. ENDM
    21.  
    22.  
    23. DeleteSelf PROC
    24.   PUSHAD
    25.  
    26.   invoke VirtualAlloc, NULL, 4096, MEM_COMMIT OR MEM_RESERVE , PAGE_EXECUTE_READWRITE
    27.   TEST EAX, EAX
    28.   JZ ds_exit
    29.   MOV EDI, EAX  
    30.   invoke GetModuleFileName, ModuleInstance, EDI, MAX_PATH
    31.   TEST EAX, EAX
    32.   JZ ds_exit
    33.   MOV EBX, EDI
    34.   ADD EDI, MAX_PATH + 100
    35.   CLD
    36.  
    37.   _STOSB 068h              ; PUSH
    38.   _STOSD ModuleInstance    ; hModule
    39.   _STOSB 0B8h              ; MOV EAX,
    40.   ImpAddr EAX, FreeLibrary ;
    41.   STOSD                    ; OFFSET kernel32:FreeLibrary
    42.   _STOSW 0D0FFh            ; CALL EAX
    43.   _STOSW 0C085h            ; TEST EAX, EAX
    44.   _STOSW 0F075h            ; JNZ -10
    45.   _STOSB 068h              ; PUSH
    46.   _STOSD EBX               ; lpFileName
    47.   _STOSB 0B8h              ; MOV EAX,
    48.   ImpAddr EAX, DeleteFile  ;
    49.   STOSD                    ; OFFSET kernel32:DeleteFileA
    50.   _STOSW 0D0FFh            ; CALL EAX
    51.   _STOSW 006Ah             ; PUSH 0
    52.   _STOSB 0B8h              ; MOV EAX,
    53.   ImpAddr EAX, ExitThread  ;
    54.   STOSD                    ; OFFSET kernel32:ExitThread
    55.   _STOSW 0D0FFh            ; CALL EAX
    56.   _STOSB 0C3h              ; RET
    57.   ADD EBX, MAX_PATH + 100
    58.  
    59.   invoke CreateThread, NULL, 0, EBX, NULL, NULL, NULL
    60.  
    61. ds_exit:
    62.   POPAD
    63.   RET
    64. DeleteSelf ENDP
    В вашем случае наверно лучше использовать
    Код (Text):
    1. invoke MoveFileEx, ADDR FileName, NULL, MOVEFILE_DELAY_UNTIL_REBOOT
    Файл удалится автоматически при следующей загрузке ОС.
     
  17. gale1238

    gale1238 New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2009
    Сообщения:
    72
    K10
    Спасибо, ваш пример работает.
    Можно ли таким же способом реализовать самоудаление исполняемого файла?
     
  18. gale1238

    gale1238 New Member

    Публикаций:
    0
    Регистрация:
    21 мар 2009
    Сообщения:
    72
    Не получается удалить самого себя.
    Записал в память OpenProcess, TerminateProcess, DeleteFile, ExitThread. Запустил поток, получил сообщение об ошибке.
    Неужели инжект в сторонний процесс это единственный вменяемый способ?
     
  19. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    gale1238
    ЕХЕ не получится так.
    Можно через COMPSEC или через bat файл.
     
  20. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    K10
    А потом юзерам приходится его удалять, да еще затылок чесать, когда нарвутся на бесконечную перезагрузку. Это я про один из свеженьких "Зверей". А батник зациклившийся до сих пор где-то торчит :)
    gale1238
    Проще надо делать и тогда будет меньше "проклятий" в ваш адрес :) Лучше пусть "мусор" останется на диске, чем в реестре...