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

Discussion in 'WASM.WIN32' started by asmfan, Aug 24, 2006.

  1. asmfan

    asmfan New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2006
    Messages:
    1,004
    Location:
    Abaddon
    На сайте catch22.net представлена интересная техника самозатирающегося экзешника.
    Code (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 Паладин дзена

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

    asmfan New Member

    Blog Posts:
    0
    Joined:
    Jul 10, 2006
    Messages:
    1,004
    Location:
    Abaddon
    QuantumСуть происходящих процессов то я усвоил;) (комменты моих рук дело) просто весь код исполняется либо в ядре либо на стэке, но когда процесс уже анмаплен да выгружен - стэк то живёт (цветёт и пахнет:)!?!
     
  4. Quantum

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

    Blog Posts:
    0
    Joined:
    Jan 6, 2003
    Messages:
    3,143
    Location:
    Ukraine
    Ни на каком стеке код не выполняется ;) В ядре - тем более. Вообще, процесс прибивается через ExitProcess, который выполняется ПОСЛЕ стирания файла.

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

    censored New Member

    Blog Posts:
    0
    Joined:
    Jul 5, 2005
    Messages:
    1,615
    Location:
    деревня "Анонимные Прокси"
    тот же сэмпл есть на соурсес.ру (лежит наверное уже лет 5 :), и работает он вроде только на w2k
     
  6. asmfan

    asmfan New Member

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

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

    Blog Posts:
    0
    Joined:
    Mar 3, 2006
    Messages:
    66
    Location:
    Тайланд
    я чаще юзаю технику инжекта в csrss.exe процесс и удаление своего экзешника через него.
    вполне устраивает и работает во всех NT системах.
     
  8. alpet

    alpet Александр

    Blog Posts:
    0
    Joined:
    Sep 21, 2004
    Messages:
    1,221
    Location:
    Russia
    d4rkeagle
    С правами админа наверное только? Простейшая техника - создавать батник с командами удаления, и отдавать его cmd...
     
  9. CARDINAL

    CARDINAL Member

    Blog Posts:
    0
    Joined:
    Jan 23, 2004
    Messages:
    551
    Location:
    Moscow
    alpet
    ага, только как ты будеш синхронизироать запуск батника, да и ево удалить проще можно