Глобальный инжект

Discussion in 'WASM.BEGINNERS' started by mAgoja, Jul 18, 2007.

  1. mAgoja

    mAgoja New Member

    Blog Posts:
    0
    Драсте всем...
    Пытаюсь организовать глобальный перехват апи... но чет не сильно получается.... Перечитал много статей но в основном везде одно и тоже(тавтология еп).
    Прочитав одну статью там был описан метод инжекта по функции Native API и другой лабудени... Автор статьи говорит при перехвате этих функции в текущем процессе будут перехвачены все вызовы в системы.... как известно что все системнын библиотеки загружаются по одинаковым адресам(такие как кернел) в 9х в ту область где находятся сис библиотеки запись невозможна...в ХР возможно но у образов системных библиотек в памяти стоит атрибут «копирование при записи» (copy-on-write). По этой причине попытка записи, например, в образ kernel32.dll приведёт к появлению у процесса своей копии изменённой страницы kernel32.dll, а на остальных процессах это никак не отразится.
    Посоветуйте плиз работающею методику по глобальному перехвату...или возможно я не прав(метод хуков не устраивает так как не ГУИ приложения перехватить не может).
    Зарание всем огр.Спасибо!!!
     
  2. n0name

    n0name New Member

    Blog Posts:
    0
    перехватывай NtCreateProcess.
    либо спускайся на уровень ниже - написание драйверов.
     
  3. mAgoja

    mAgoja New Member

    Blog Posts:
    0
    n0name
    Еше раз тебе спасибо...буду капать native api :)
     
  4. xh4ck

    xh4ck New Member

    Blog Posts:
    0
    Лучше перехватывать ZwResumeThread, об этом кажется еще z0mbie писал, почему да как.
     
  5. Twister

    Twister New Member

    Blog Posts:
    0
    Тысячный раз повторюсь - начать стоит со статей ms-rem'a
     
  6. mAgoja

    mAgoja New Member

    Blog Posts:
    0
    Ребят в статьях мс-рема хорошо толково все изложено но одно я не пойму когда он описывает глобальный перехват.. он перехватывает "ZwCreateThread" но мы эту функцию перехватили локально как мы узнаем вызов этой функции из других процессов...Если есть возможность прошу растолковать ((. заранее спасибо
     
  7. asd

    asd New Member

    Blog Posts:
    0
    N47
    код перехвата должен быть внедрён по все процессы
     
  8. mAgoja

    mAgoja New Member

    Blog Posts:
    0
    asd
    допустим я прошарил всю память внедрил во все процессы свой обработчик.... а как для тех процессов которые юзер запустим потом..?
     
  9. asd

    asd New Member

    Blog Posts:
    0
    глюк
     
  10. asd

    asd New Member

    Blog Posts:
    0
    глюк
     
  11. Mental_Mirror

    Mental_Mirror New Member

    Blog Posts:
    0
    N47
    На самом деле нынче нигде нет документа (статьи), которая бы описывала реально рабочий метод глобального перехвата в r3. Весь описываемый глобальный перехват является не стабильным. Хотя на форуме можно найти 100% рабочий способ. Кароч поиск по форуму. Тем таких было достаточно.

    Ну дык твой же перехват будет во всех процессах, а новый процесс будет порожден одним из старых функцией NtCreateProcess. Перехватываешь NtCreateProcess, NtCreateThread и еще чего-нить и по их вызовам судишь, что создается новый процесс. После его создания внедряешь в него свой код.
     
  12. Cock

    Cock New Member

    Blog Posts:
    0
    писали об этом первыми Гари Небет на англицкам языке, такая книжко была, а сейчас стало быть и на русском. исходника-Stealth и ResumeThread тогда еще не было:)
     
  13. Cock

    Cock New Member

    Blog Posts:
    0
    N47
    Найди исходнег stealth, и помолившись приступай.
     
  14. mAgoja

    mAgoja New Member

    Blog Posts:
    0
    Mental_Mirror
    я не совсем корректно из ложился сорри :)
    допустим я внедрился во все процессы.... но мля этот перехват модно убить за три сек....
    перезапустить explorer...(и весь мой перехват пойдет по ....) развешо в внедряемый код написать функцию проверки на повторное заражение но и это можно убить.... ((, есть мож у когонить идея)??
    Заранее всем огр.спасибо :)
     
  15. dead_body

    dead_body wasm.ru

    Blog Posts:
    0
    N47
    ты видно чего то не понимаешь. При перезагрузке експлорера, он будет уже заражен. На стадии создания. Мс - рем кому всё писал? А другие? Тут толпа статей, по перехвату. Ты или не читал, или вообще не понял, смысла внедрения во все процессы.

    Мы для того и внедряемся во все процессы, что бы перехватывать вызов вновь создаваемых. Так как у процесса есть процесс его создавший, а если все процессы заражены, и в каждом перехвачены функции создания процессов новых, то при создании вызоветься наш код, который заразит новый процесс.
     
  16. dead_body

    dead_body wasm.ru

    Blog Posts:
    0
    я так проверяю заражен ли процесс:
    Code (Text):
    1. proc SetInfectedFlag uses edi esi
    2. local processId:DWORD,sProcessId[16]:BYTE,name_of_flag[1024]:BYTE
    3.    GetCurrentProcessId()
    4.    mov [processId],eax
    5.    lea edi,[Windows_plus_Module__Name+delta]
    6.    lstrcpy(addr name_of_flag,edi)
    7.    wsprintf(addr sProcessId,"_%d",[processId])
    8.    add esp,12
    9.    lstrcat(addr name_of_flag,addr sProcessId)
    10.    ;now we have string in format:"*\:Windows\ourModuleName.exe_infectedProcessId".
    11.    CreateFile(addr name_of_flag,GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0)
    12.    mov [hInfectedFlag+delta],eax
    13.    ret
    14. endp
    а вот функция проверки:
    Code (Text):
    1. ;return ~ zero is process is not infected. Return zero if process is infected.
    2. proc IsThatProcessInfected pid
    3. local temp:DWORD,sProcessId[16]:BYTE,name_of_flag[1024]:BYTE
    4.    lea edi,[Windows_plus_Module__Name+delta]
    5.    lstrcpy(addr name_of_flag,edi)
    6.    wsprintf(addr sProcessId,"_%d",[pid])
    7.    add esp,12
    8.    lstrcat(addr name_of_flag,addr sProcessId)
    9.    ;now we have string in format:"*\:Windows\ourModuleName.exe_infectedProcessId".
    10.    CreateFile(addr name_of_flag,GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0)
    11.    inc eax
    12.    jz .ret      ;error. the process is infected.
    13.    dec eax
    14.    CloseHandle(eax)
    15.    DeleteFile(addr name_of_flag)
    16.    ;now check maybe  ther is Main Infected flag.
    17.    lstrcat(addr name_of_flag,"_main")
    18.    CreateFile(addr name_of_flag,GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0)
    19.    inc eax
    20.    jz .ret      ;error. the process is infected.
    21.    dec eax
    22.    CloseHandle(eax)
    23.    DeleteFile(addr name_of_flag)
    24.    mov eax,1            ;the process is not infected.
    25. .ret:
    26.    ret
    27. endp
    только у процедуры проверку на "главный" флаг убрать надо, то у меня уже другие навороты лишнии сделаны.
     
  17. Mental_Mirror

    Mental_Mirror New Member

    Blog Posts:
    0
    N47
    Во первых если EXPLORER.EXE убьют, то потом опять запустят пусть из того же TASKMGR.EXE. TARKMGR.EXE порождается WINLOGON'ом, он тоже будет заражен, ну и в итоге EXPLORER.EXE будет заражен. Также с остальными процессами. Читай статьи. Во вторых убить конечно можно, но можно и постараться сделать защиту от убития перехвата.

    dead_body
    С файлами ИМХО лишний гемор. Можно найти в PEB процесса лишнее место, и засунуть туда свою ЧОРНУЮ метку.
     
  18. mAgoja

    mAgoja New Member

    Blog Posts:
    0
    Так терь все понятно .... я просто думал что все последующие процессы порождает explorer (которые запушеные через win юзером) но забыл прo winlogon, sms,csrss(так как не смогу их заразить через привилегии гостя)..)), большое всем спасибо, за толковое обьяснение :)
     
  19. mAgoja

    mAgoja New Member

    Blog Posts:
    0
    Ребят здесь появился один прикол:
    написал глобальный перехватчик...но в длл не останавливал все потоки приложения перед записью jmp .... в системе у мя 32 процесса 21 я перехватил а остальные к сожалению нет.. в эти ряды попал и eplorer и все его порожденные процессы, а в которых я внедрил длл наблюдается нестабильная работа(хоть длл заключалась ток в выводе мессаги(прошу не ругать такой тестовый пример :)))... может это быть из-за того что не останавливал потоки в процессах или возможна другая причина(во все процессы писал с привилегией SeDebugPrivilege)???
    Заранее всем большое спасибо!!!!
     
  20. asd

    asd New Member

    Blog Posts:
    0
    http://www.wasm.ru/forum/viewtopic.php?id=21040