Феникс

Тема в разделе "WASM.BEGINNERS", создана пользователем GoldFinch, 28 окт 2008.

  1. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Я тут программку написал (на fasm'е), как ее теперь убить?
    Код (Text):
    1. ;================ MACRO DEFINITIONS =====================
    2. ;High-level-like imported api calls macro.
    3. ;Lite version with procedure calls and string constants with "\n" support.
    4. macro IMPORTS [dll,funclist] {
    5. common    data import
    6. forward dd 0,0,0,rva a#dll, rva v#dll
    7. common    dd 0,0,0,0,0
    8.     end data
    9. forward v#dll: irp func,funclist \{
    10.         p\#func dd rva a\#func
    11.         macro func [line*] \\{common
    12.           match (arglist)tail,line* \\\{ push_r arglist \\\}
    13.           call [p\#func] \\} \}
    14.     dd 0
    15. forward a#dll db `dll#".dll",0
    16.     irp func,funclist \{a\#func db 0,0,\`func,0\} }
    17. macro push_r [arg] { reverse
    18.       if arg eqtype ""
    19.      call @f
    20.      local str
    21.      str db arg,0
    22.  @@:     fix_str str,$-str
    23.       else
    24.      pushd arg
    25.       end if }
    26. macro fix_str pStr,nLen {
    27.       repeat nLen-1
    28.          load w word from pStr+%-1
    29.          if w="\n"
    30.         store word 0x0D0A at pStr+%-1
    31.          end if
    32.       end repeat }
    33. ;********************* PROGPAM CODE **************************************************
    34. format PE GUI 4.0
    35. section 'AllInOne' code readable executable writeable
    36. IMPORTS KERNEL32,<CreateMutexA,WaitForSingleObject,CreateProcessA,ExitProcess,GetModuleFileNameA>,\
    37.         USER32,<MessageBoxA>
    38. entry $
    39. CreateMutexA(0,1,"Mmmutexxx")
    40. WaitForSingleObject(eax,-1)
    41. GetModuleFileNameA(0,name,0x100)
    42. CreateProcessA(name,0, 0,0, 0,0, 0,0,_SI,_PI)
    43. MessageBoxA(0,"Close Me","Phoenix",0)
    44. ExitProcess(0)
    45. ;_____________________________________________
    46. ;Uninitialized data. Must be at end of section
    47. name db 0x100 dup (?)
    48. _SI db 0x200 dup (?)
    49. _PI db 0x200 dup (?)
     
  2. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    upd: заменил CreateProcessA("phoenix.exe"... на GetModuleFileNameA() ...
    upd2: убрал флаг нового консольного окна в CreateProcessA(... 0x00000010,...), осталось от его консольного предка, атавизм однако...
     
  3. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Итак в 1м посте была альфа версия, с очевидным багом - если ждущую копию убить в процесс эксплорере, активная копия закрывается без проблем. В следующей версии это было исправлено:
    Код (Text):
    1. ;================ MACRO DEFINITIONS =====================
    2. ;High-level-like imported api calls macro.
    3. ;Lite version with procedure calls and string constants.
    4. macro IMPORTS [dll,funclist] {
    5. common  data import
    6. forward dd 0,0,0,rva a#dll, rva v#dll
    7. common  dd 0,0,0,0,0
    8.         end data
    9. forward v#dll: irp func,funclist \{
    10.         p\#func dd rva a\#func
    11.         macro func [line*] \\{common
    12.             match (arglist)tail,line* \\\{ push_r arglist \\\}
    13.             call [p\#func] \\} \}
    14.         dd 0
    15. forward a#dll db `dll#".dll",0
    16.         irp func,funclist \{a\#func db 0,0,\`func,0\} }
    17. macro push_r [arg] { reverse
    18.       if arg eqtype ""
    19.           call @f
    20.           db arg,0
    21.           @@:
    22.       else
    23.           pushd arg
    24.       end if }
    25. ;********************* PROGPAM CODE **************************************************
    26. format PE GUI 4.0
    27. section 'AllInOne' code readable executable writeable
    28. IMPORTS KERNEL32,<CreateMutexA,WaitForSingleObject,CreateProcessA,ExitProcess,GetModuleFileNameA,CreateThread,OpenProcess,GetLastError>,\
    29.         USER32,<MessageBoxA>
    30. entry $
    31.     CreateMutexA(0,1,"Mmmutexxx")
    32.     WaitForSingleObject(eax,-1)
    33.     CreateThread(0,0,Raising,0,0,0)
    34.     MessageBoxA(0,"Close Me","Phoenix",0)
    35.     ExitProcess(0)
    36.     ;=====================
    37. Raising:
    38.     GetModuleFileNameA(0,name,0x100)
    39. Raise:
    40.     CreateProcessA(name,0, 0,0, 0,0, 0,0,_SI,_PI)
    41.     WaitForSingleObject([_PI.hProcess],-1)
    42.     jmp Raise
    43. ;_____________________________________________
    44. ;Uninitialized data. Must be at end of section
    45. name db 0x100 dup (?)
    46. _SI db 0x200 dup (?)
    47. struc PROCESS_INFORMATION {
    48.   .hProcess    dd ?
    49.   .hThread     dd ?
    50.   .dwProcessId dd ?
    51.   .dwThreadId  dd ? }
    52. _PI PROCESS_INFORMATION
     
  4. Osen

    Osen Рие

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    283
    Адрес:
    Париж
    GoldFinch
    как ее теперь убить?
    Убей сибя ап стену!

    Ладно, это шутка :) Просто не сдержался, а использование тобой фасма очень интересное, можно сказать браво, за новые импорты (не стандартно), и за новые вызовы API. По поводу программы ничего сказать не могу, кроме разве что, переименования EXE.
     
  5. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    ого! а я не знал что выполняющийся модуль можно переименовать =\
    но его нельзя удалить, значит можно вместо GetModuleFileNameA искать себя в папке...
     
  6. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Его можно не только переименовать, но и переместить.
     
  7. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    GoldFinch
    Старая песня. Его можно не только переименовать, но и переместить куда угодно в пределах логического диска. Так что поиска себя в папке недостаточно. К тому же неизвестно, что искать.
    Ну и как альтернативный способ: берём любой таск менеджер, позволяющий множественное завершение процессов. Ждущий поток просто не успеет запустить процесс повторно, т.к. не успеет получить управление.
    Бессмысленная затея.
    Aspire
    Слегка опоздал. :)
     
  8. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    ну значит дампить образ памяти во временный файл и запускать

    "берём любой таск менеджер, позволяющий множественное завершение процессов"
    - это какой например?
     
  9. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Код (Text):
    1. include 'win32a.inc'
    2.  
    3. ;================ MACRO DEFINITIONS =====================
    4. ;High-level-like imported api calls macro.
    5. ;Lite version with procedure calls and string constants.
    6. macro IMPORTS [dll,funclist] {
    7. common  data import
    8. forward dd 0,0,0,rva a#dll, rva v#dll
    9. common  dd 0,0,0,0,0
    10.         end data
    11. forward v#dll: irp func,funclist \{
    12.         p\#func dd rva a\#func
    13.         macro func [line*] \\{common
    14.             match (arglist)tail,line* \\\{ push_r arglist \\\}
    15.             call [p\#func] \\} \}
    16.         dd 0
    17. forward a#dll db `dll#".dll",0
    18.         irp func,funclist \{a\#func db 0,0,\`func,0\} }
    19. macro push_r [arg] { reverse
    20.       if arg eqtype ""
    21.           call @f
    22.           db arg,0
    23.           @@:
    24.       else
    25.           pushd arg
    26.       end if }
    27. ;********************* PROGPAM CODE **************************************************
    28. format PE GUI 4.0
    29. section 'AllInOne' code readable executable writeable
    30. IMPORTS KERNEL32,<CreateFileA, CreateMutexA,WaitForSingleObject,CreateProcessA,ExitProcess,GetModuleFileNameA,CreateThread,OpenProcess,GetLastError>,\
    31.         USER32,<MessageBoxA>
    32. entry $
    33.     GetModuleFileNameA(0,name,0x100)
    34.     CreateFileA(name, GENERIC_READ, FILE_SHARE_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0)
    35.     CreateMutexA(0,1,"Mmmutexxx")
    36.     WaitForSingleObject(eax,-1)
    37.     CreateThread(0,0,Raise,0,0,0)
    38.     MessageBoxA(0,"Close Me","Phoenix",0)
    39.     ExitProcess(0)
    40.     ;=====================
    41. Raise:
    42.     CreateProcessA(name, 0, 0,0, 0,0, 0,0,_SI,_PI)
    43.     WaitForSingleObject([_PI.hProcess],-1)
    44.     jmp Raise
    45. ;_____________________________________________
    46. ;Uninitialized data. Must be at end of section
    47. name db 0x100 dup (?)
    48. _SI db 0x200 dup (?)
    49. struc PROCESS_INFORMATION {
    50.   .hProcess    dd ?
    51.   .hThread     dd ?
    52.   .dwProcessId dd ?
    53.   .dwThreadId  dd ? }
    54. _PI PROCESS_INFORMATION
    У?
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    GoldFinch
    Хотя бы даже ProcessExplorer от Sysinternals (Kill Process Tree). Да и самому написать - пять минут делов.
    И вообще: аттачусь Olly к обоим процессам и закрываю обе инстанси Olly.
    KeSqueer
    А что мне помешает закрыть этот хэндл? :)
     
  11. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    KeSqueer, оно)

    Вобщем как я понимаю, без сторонних утилит такую штуку не убить?)
    Я кстате убиваю ее avz'ом запрещая запуск новых процессов.
     
  12. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    GoldFinch
    Элементарно: taskkill /F /T /IM [имя процесса]
    Или taskkill - это типа тоже сторонняя утилита?
     
  13. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    А все же метод неплох тем что прост и способен подействовать на подавляющее большинство пользователей.
    Шаблон феникса с полезной нагрузкой:
    Код (Text):
    1. ;================ MACRO DEFINITIONS =====================
    2. ;High-level-like imported api calls macro. Very lite version.
    3. macro IMPORTS [dll,funclist] {
    4. forward dd 0,0,0,rva a#dll, rva v#dll
    5. common  dd 0,0,0,0,0
    6. forward v#dll: irp func,funclist \{
    7.         p\#func dd rva a\#func
    8.         macro func [line*] \\{common
    9.           match (arglist),line \\\{ irp arg,arglist \\\\{reverse pushd arg \\\\} \\\}
    10.           call [p\#func] \\} \}
    11.         dd 0
    12. forward a#dll db `dll#".dll",0
    13.         irp func,funclist \{a\#func db 0,0,\`func,0\} }
    14. ;********************* PROGPAM CODE **************************************************
    15. format PE GUI 4.0
    16. section '.import' import readable writeable
    17. IMPORTS KERNEL32,< CreateFileA, CreateMutexA,WaitForSingleObject,CreateProcessA,\
    18.                    ExitProcess,GetModuleFileNameA,CreateThread>,\
    19.         USER32,<MessageBoxA,wsprintfA>
    20. section '.code' code readable executable
    21. start:
    22.     inc [dwCounter]
    23.     wsprintfA(szMessageBuf,aReincarnation,[dwCounter])
    24.     MessageBoxA(0,szMessageBuf,aPhoenix,0)
    25.     ExitProcess(0)
    26.     ;------------------
    27.     aPhoenix db "Phoenix",0
    28.     aReincarnation db "Reincarnation #%d",0
    29. section '.data' data readable writeable shareable
    30.     dwCounter dd ?
    31.     szMessageBuf db 0x100 dup (?)
    32. section '.phoenix' code readable executable writeable
    33. entry $
    34.     GetModuleFileNameA(0,name,0x100)
    35.     CreateFileA(name, 0x80000000, 1, 0,3, 0x80, 0)
    36.     CreateMutexA(0,1,aMmmutexxx)
    37.     WaitForSingleObject(eax,-1)
    38.     CreateThread(0,0,Raise,0,0,0)
    39.     jmp start
    40.     ;------------------
    41. Raise:
    42.     CreateProcessA(name, 0, 0,0, 0,0, 0,0,_SI,_PI)
    43.     WaitForSingleObject([_PI.hProcess],-1)
    44.     jmp Raise
    45.     ;------------------
    46.     aMmmutexxx db "Mmmutexxx",0
    47.     ;_____________________________________________
    48.     name db 0x100 dup (?)
    49.     _SI db 0x200 dup (?)
    50.     struc PROCESS_INFORMATION {
    51.          .hProcess    dd ?
    52.          .hThread     dd ?
    53.          .dwProcessId dd ?
    54.          .dwThreadId  dd ? }
    55.     _PI PROCESS_INFORMATION
     
  14. Osen

    Osen Рие

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    283
    Адрес:
    Париж
    GoldFinch
    А почему Феникс? Звучит неплохо, вы тоже норкоман как и я?
     
  15. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    Феникс потому что нельзя убить, какбэ "воскресает из пепла".
    Алсо я не норкоман.
     
  16. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    GoldFinch
    А судя по коду и не скажешь. :)
     
  17. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    А что с ним не так, с кодом-то?
     
  18. Folk Acid

    Folk Acid New Member

    Публикаций:
    0
    Регистрация:
    23 авг 2005
    Сообщения:
    432
    Адрес:
    Ukraine
    Вот еще вариант наркоманской проги
    Код (Text):
    1. int main(int argc, char* argv[])
    2. {
    3.     system(argv[0]);
    4.     system(argv[0]);
    5.     return 0;
    6. }
     
  19. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    GoldFinch
    Да шудко такой.