Драсте всем... Пытаюсь организовать глобальный перехват апи... но чет не сильно получается.... Перечитал много статей но в основном везде одно и тоже(тавтология еп). Прочитав одну статью там был описан метод инжекта по функции Native API и другой лабудени... Автор статьи говорит при перехвате этих функции в текущем процессе будут перехвачены все вызовы в системы.... как известно что все системнын библиотеки загружаются по одинаковым адресам(такие как кернел) в 9х в ту область где находятся сис библиотеки запись невозможна...в ХР возможно но у образов системных библиотек в памяти стоит атрибут «копирование при записи» (copy-on-write). По этой причине попытка записи, например, в образ kernel32.dll приведёт к появлению у процесса своей копии изменённой страницы kernel32.dll, а на остальных процессах это никак не отразится. Посоветуйте плиз работающею методику по глобальному перехвату...или возможно я не прав(метод хуков не устраивает так как не ГУИ приложения перехватить не может). Зарание всем огр.Спасибо!!!
Ребят в статьях мс-рема хорошо толково все изложено но одно я не пойму когда он описывает глобальный перехват.. он перехватывает "ZwCreateThread" но мы эту функцию перехватили локально как мы узнаем вызов этой функции из других процессов...Если есть возможность прошу растолковать ((. заранее спасибо
asd допустим я прошарил всю память внедрил во все процессы свой обработчик.... а как для тех процессов которые юзер запустим потом..?
N47 На самом деле нынче нигде нет документа (статьи), которая бы описывала реально рабочий метод глобального перехвата в r3. Весь описываемый глобальный перехват является не стабильным. Хотя на форуме можно найти 100% рабочий способ. Кароч поиск по форуму. Тем таких было достаточно. Ну дык твой же перехват будет во всех процессах, а новый процесс будет порожден одним из старых функцией NtCreateProcess. Перехватываешь NtCreateProcess, NtCreateThread и еще чего-нить и по их вызовам судишь, что создается новый процесс. После его создания внедряешь в него свой код.
писали об этом первыми Гари Небет на англицкам языке, такая книжко была, а сейчас стало быть и на русском. исходника-Stealth и ResumeThread тогда еще не было
Mental_Mirror я не совсем корректно из ложился сорри допустим я внедрился во все процессы.... но мля этот перехват модно убить за три сек.... перезапустить explorer...(и весь мой перехват пойдет по ....) развешо в внедряемый код написать функцию проверки на повторное заражение но и это можно убить.... ((, есть мож у когонить идея)?? Заранее всем огр.спасибо
N47 ты видно чего то не понимаешь. При перезагрузке експлорера, он будет уже заражен. На стадии создания. Мс - рем кому всё писал? А другие? Тут толпа статей, по перехвату. Ты или не читал, или вообще не понял, смысла внедрения во все процессы. Мы для того и внедряемся во все процессы, что бы перехватывать вызов вновь создаваемых. Так как у процесса есть процесс его создавший, а если все процессы заражены, и в каждом перехвачены функции создания процессов новых, то при создании вызоветься наш код, который заразит новый процесс.
я так проверяю заражен ли процесс: Код (Text): proc SetInfectedFlag uses edi esi local processId:DWORD,sProcessId[16]:BYTE,name_of_flag[1024]:BYTE GetCurrentProcessId() mov [processId],eax lea edi,[Windows_plus_Module__Name+delta] lstrcpy(addr name_of_flag,edi) wsprintf(addr sProcessId,"_%d",[processId]) add esp,12 lstrcat(addr name_of_flag,addr sProcessId) ;now we have string in format:"*\:Windows\ourModuleName.exe_infectedProcessId". CreateFile(addr name_of_flag,GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0) mov [hInfectedFlag+delta],eax ret endp а вот функция проверки: Код (Text): ;return ~ zero is process is not infected. Return zero if process is infected. proc IsThatProcessInfected pid local temp:DWORD,sProcessId[16]:BYTE,name_of_flag[1024]:BYTE lea edi,[Windows_plus_Module__Name+delta] lstrcpy(addr name_of_flag,edi) wsprintf(addr sProcessId,"_%d",[pid]) add esp,12 lstrcat(addr name_of_flag,addr sProcessId) ;now we have string in format:"*\:Windows\ourModuleName.exe_infectedProcessId". CreateFile(addr name_of_flag,GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0) inc eax jz .ret ;error. the process is infected. dec eax CloseHandle(eax) DeleteFile(addr name_of_flag) ;now check maybe ther is Main Infected flag. lstrcat(addr name_of_flag,"_main") CreateFile(addr name_of_flag,GENERIC_WRITE,FILE_SHARE_READ,0,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0) inc eax jz .ret ;error. the process is infected. dec eax CloseHandle(eax) DeleteFile(addr name_of_flag) mov eax,1 ;the process is not infected. .ret: ret endp только у процедуры проверку на "главный" флаг убрать надо, то у меня уже другие навороты лишнии сделаны.
N47 Во первых если EXPLORER.EXE убьют, то потом опять запустят пусть из того же TASKMGR.EXE. TARKMGR.EXE порождается WINLOGON'ом, он тоже будет заражен, ну и в итоге EXPLORER.EXE будет заражен. Также с остальными процессами. Читай статьи. Во вторых убить конечно можно, но можно и постараться сделать защиту от убития перехвата. dead_body С файлами ИМХО лишний гемор. Можно найти в PEB процесса лишнее место, и засунуть туда свою ЧОРНУЮ метку.
Так терь все понятно .... я просто думал что все последующие процессы порождает explorer (которые запушеные через win юзером) но забыл прo winlogon, sms,csrss(так как не смогу их заразить через привилегии гостя)..)), большое всем спасибо, за толковое обьяснение
Ребят здесь появился один прикол: написал глобальный перехватчик...но в длл не останавливал все потоки приложения перед записью jmp .... в системе у мя 32 процесса 21 я перехватил а остальные к сожалению нет.. в эти ряды попал и eplorer и все его порожденные процессы, а в которых я внедрил длл наблюдается нестабильная работа(хоть длл заключалась ток в выводе мессаги(прошу не ругать такой тестовый пример ))... может это быть из-за того что не останавливал потоки в процессах или возможна другая причина(во все процессы писал с привилегией SeDebugPrivilege)??? Заранее всем большое спасибо!!!!