Здравствуйте. Знаю многим интересно как можно сделать так, чтобы в процесс ничего не могло попасть, чтобы нельзя было сломать программу. Топиков на эту тему здесь было много. И статей. Для блокировки функций WriteProcessMemory/ReadProcessMemory и прочего антидампинга как правило используется драйвер в нулевом кольце, который там уже перехватывает NtOpenProces/NtWriteProcessMemory/NtReadProcessMemory. С эти все понятно, расисанно очень много. но недавно я наткнулся на софтину. назначени софтины врядли будет кому инетересно - античит для игрушки. сама софтина сайт _http://ucp-anticheat.ru/ ссылка на бинарник _http://ucp-anticheat.ru/client/ucpclient21.zip вот эта штука, значит, делает свой процесс недоступным для выше приведенных функций. ПРИЧЕМ НЕ ЛЕЗЕТ ДРАЙВЕРАМИ В РИНГ0!!!!! КАК ОНА ЭТО ДЕЛАЕТ??? понимаю что автор конечно не расскажет, но чтож у нас есть дизасемблеры поэтому я начал ковырять, уж очень инетересно знать КАК она это делает, я думаю многим будет тоже. прога запакованна VMProtect'ом последних версий. хороший конечно криптор.... распоковать у меня не получается, да и это не важно, главное подглядеть как она это делает. я смог залезть в дизасм этой проги с олей. вообще олю она все время кикает, в вмпротекте антиотладка есть. (кстати тоже не смог понять как так сделанно, что обнаруживает олю, хотя на ней плугин фантом стоит) чтобы залезть мне пришлось сделать так: в главном процессе ucp.exe SuspendThread (при помощи ProcessExplorera), он там один егошний. кикаем нафиг процесс ucp.exe, который дочерний, т.е. игрушку. атачим дебугер к оставшемуся процессу ucp.exe что очень интересно! - при заторможенном треде в ucp.exe на него действует WriteProcessMemory/ReadProcessMemory. стоит только запустить тред и пипец. Он видимо что-то все время подписывает куда-то... какие нибудь контесы процесса/треда... но что и куда? кто знает расскажите пожайлуйста, как такое можно сделать??? или давайте кыврять вместе! так же нашел аналогичную поделку, ее еще мало ковырял, помоему тогоже автора. _http://dump.ru/file/1444187 помоему менее совершенна в плане защиты, но принципе тотже. зажата ExeCryptorom. Сейчас пойду пытаться снять криптор...
гы, да полюбому просто сплайсит ф-ции, например CreateProcess в explorer, а дальше запрещает записывать читать новому процесс память из своего, теми же хуками на WriteProcessMemory/ReadProcessMemory -- хотя я не смотрел, так что не орать если ошибся
freeq нет. он должен был бы тогда пропатчить все процессы в памяти и контролировать запуск новых. такого точно нету! в любом процесса функции не пропатчены. вторая маленькая софтинка, ссылка на нее в первом посту, работает походу 1 в 1. кстати она оказалось не под ехекриптором. но вроде поснимал я с нее все это хозяйство. общий смысл как понял сводиться к следующему: invoke VirtualAlloc,0,6000h,00003000h,40h; и сразу переносим туда ниже следующий код ;jmp куда выделили invoke UnmapViewOfFile,00400000h;- освобождаем модуль invoke VirtualFree,00400000 ,msize 00008000h invoke VirtualAlloc, 00400000,msize,00003000h,40h; - на тот же адресс ;грузит хедер ехешника ;грузит дата в ехешник ;создает таблицу импорта ; push 00410000 ; jmp VirtualFree, на кусок где был временный код, т.е. после выхода оказываемся в 00410000 вроде как эта идея не нова, но лично для меня в новинку, если кто знает, скажите мож где статейка про это есть. Aspire, а что такое "РКУ"????
Rootkit Unhooker. Последняя паблик-версия здесь. Тебе стоит посмотреть перехват соответсвующих функций в SSDT. Скорее всего через Device\PhysicalMemory, хотя можно и по-другому, через ZwSystemDebugControl. Так или иначе, при особом желании, все это можно спалить любой проактивкой.
ок, почитаю. про метод с Device\PhysicalMemory в принципе я знаю но там чето судя подиазсму им и не пахнет. а метод который я вытащил из дизасма и привел в преидущем посте работает. ReadProcessMemory возвращает НОЛЬ. ласт еррор - ERROR_PARTIAL_COPY (0000012B) а WriteProcessMemory тоже ноль с ласт еррором - ERROR_INVALID_ADDRESS (000001E7) Причем адресс выделяемой памяти на место удаленного модуля должно быть меньше хотя бы на одну страницу. видимо используется какая-то ошибка в ядре ОС. Не бось гденибудь атрибуты недоудаляются, и в итоге возвращает ошибку при попытке обратиться к ней. такими вещами как например АртМани, содержимое памяти прочесть можно, но насколько помню там уже через драйвер чтение идет. только вот интересная еще вещь. процесс этот не виден в том же олидебугере, в PETools тоже не виден. в ProcessExplorere все видно. Однако интересный момент опять - эта софтина еще ныкать процесс умеет из третьего кольца....