Интересная техника

Тема в разделе "WASM.WIN32", создана пользователем asmfan, 24 авг 2006.

  1. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    На сайте catch22.net представлена интересная техника самозатирающегося экзешника.
    Код (Text):
    1. .586
    2. .MODEL  FLAT,STDCALL
    3.  
    4. includelib  kernel32.lib
    5.  
    6. extrn   _imp__ExitProcess@4:DWORD
    7. extrn   _imp__GetModuleHandleA@4:DWORD
    8. extrn   _imp__FreeLibrary@4:DWORD
    9. extrn   _imp__GetModuleFileNameA@12:DWORD
    10. extrn   _imp__DeleteFileA@4:DWORD
    11.  
    12. MAX_PATH    EQU 260
    13.  
    14.  
    15. .CODE
    16. start:
    17.     xor ebx,ebx             ;;zero
    18.  
    19.     sub esp,MAX_PATH
    20.     mov ebp,esp             ;;lpFileName
    21.  
    22.     push    ebx
    23.     call    _imp__GetModuleHandleA@4
    24.     mov esi,eax             ;;module handle
    25.  
    26.     push    MAX_PATH
    27.     push    ebp             ;;lpFileName
    28.     push    esi             ;;module handle
    29.     call    _imp__GetModuleFileNameA@12
    30.  
    31.  
    32.     push    ebx             ;;zero
    33.     push    ebx             ;;just a dummy return location
    34.  
    35.     push    ebp             ;;lpFileName
    36.     push    _imp__ExitProcess@4     ;;return address
    37.  
    38.     push    esi             ;;module handle
    39.     push    _imp__DeleteFileA@4     ;;return address
    40.     push    _imp__FreeLibrary@4     ;;return address
    41.     ret
    42. END start
    примерно так выглядет. Так вот вопрос такой - точнее несколько: 1) часто ли вы встречали такую технику вызовов функций? 2) почему стэк живёт дольше самого процесса - код исполняется в стэке процесса, а процесса уже нема...
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    ret делает mov eip,[esp]
    Т.к. в [esp] содержится адрес FreeLibrary, то ret просто начинает выполнять FreeLibrary. Можно заменить 2 последние строчки на jmp _imp__FreeLibrary@4 и от этого ничего не изменится. FreeLibrary снимет лок с файла экзешника (почему это происходит - особенность загрузчика NT). После окончания выполнения этой функции (там ведь тоже будет ret), аналогично, управление получает DeleteFile, потом - ExitProcess.
     
  3. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    QuantumСуть происходящих процессов то я усвоил;) (комменты моих рук дело) просто весь код исполняется либо в ядре либо на стэке, но когда процесс уже анмаплен да выгружен - стэк то живёт (цветёт и пахнет:)!?!
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Ни на каком стеке код не выполняется ;) В ядре - тем более. Вообще, процесс прибивается через ExitProcess, который выполняется ПОСЛЕ стирания файла.

    FreeLibrary ничего не выгружает, т.к. хендл процесса всё ещё используется... самим процессом.
     
  5. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    тот же сэмпл есть на соурсес.ру (лежит наверное уже лет 5 :), и работает он вроде только на w2k
     
  6. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Не ну конечно говорил про АПИшки выполняющиеся в ядре да про стек на котором всё забито заранее, так что нет возврата в секцию кода после RET, но код исполняется хоть и не в секции кода.
    А про совместимость - на сайте который указал есть и под ХР код.
     
  7. d4rkeagle

    d4rkeagle Алексей Шпунсель

    Публикаций:
    0
    Регистрация:
    3 мар 2006
    Сообщения:
    66
    Адрес:
    Тайланд
    я чаще юзаю технику инжекта в csrss.exe процесс и удаление своего экзешника через него.
    вполне устраивает и работает во всех NT системах.
     
  8. alpet

    alpet Александр

    Публикаций:
    0
    Регистрация:
    21 сен 2004
    Сообщения:
    1.221
    Адрес:
    Russia
    d4rkeagle
    С правами админа наверное только? Простейшая техника - создавать батник с командами удаления, и отдавать его cmd...
     
  9. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    alpet
    ага, только как ты будеш синхронизироать запуск батника, да и ево удалить проще можно