наверное все помнят, что во времена динозавров была популярна игра "бои в памяти"? а что если ее воскресить? только на новый лад! мы имеем: компьютер под управлением NT, процесс-жертву и процесс-хищних. хищник должен "загрызть" жертву (для определенности изменив jx на jmp), а жертва должна этому всячески сопротивляться. вот допустим, первый тур. хищник открывает процесс и юзает WriteProcessMemory. действия жертвы? давайте так играть по очереди становясь то хищником, то жертвой только просьба действовать поступательно, если начать сразу с ручного разбора каталога странц, то это будет не интересно... хочется собрать как можно больше способов защит от записи и методов их обхода. давайте условимся что на первых N турах жертва не может ставить драйвер и требовать прав админа. какие будут соображения?
>какие будут соображения? где я? что я? .... ну ты задвинул пс, если >хищник открывает процесс и юзает WriteProcessMemory и >жертва не может ставить драйвер и требовать прав админа. то от жетрвы может не остаться ничего, при условии что WPM проходит и в кернеле все в порядке... и как она будет действовать?
semen это вопрос или капитуляция? ну много что можно сделать и на юзере. задисаблить свои страницы (тогда хищник должен будет енаблить их), перехватить вызов WriteMemory, определить кто его вызввет и, извернувшись, цапнуть хищника за хвост.. еще можно постоянно порождать дочерние процессы и термировать свои, что затрудняет хищнику жизнь, да много чего можно... вот и давайте будет думать я ж не предлгаю полностью забить на админа и кернел. давайте сначала потискаем юзера.
kaspersky да я не врубился сразу. похоже ты сделал первый ход =) мой ход: можно свои секции перемещать в памяти постоянно, со старых мест не стирать чтоб поиском не найди, хрен догодается что патчить надо, тока надо еще запутать инфу о текущем PC ниток, чтоб он не разрюхал где искать надо... ну и про стек не забыть... А вообще помойму игра бесконечная =) И как я понимаю именно целенаправленное изменение, закрашить думаю всегда можно...
вообще-то правила пока не сформированы пусть другие тоже присоединяются. создадим свод правил и можно играть, например exe-обмениваться. цель - поразить exe-парнтнера. а что? очень рульно думаю будет. я встречал несколько симуляторов старых боев на ПК, только все они... ну какие-то неигтересные что ли... стратегия боев по старым правилам исхожена вдоль и поперек системщику здесь негде развернуться. то ли дело винда а победитель получает статус "супер-джедая-дзена" )
Бои в темноте - запускается две программы, в определенный момент системного времени они начинают искать и пытаться убить друг друга. Побеждает та программа, окно которой останется на экране. Если по истечении некоторого времени оба окна живы, ничья, если комп перезагрузился (или монитор перегорел или еще что-нибудь), обоим по 0 очков. Турниры по швейцарской системе на машине средней мощности с WinXP
Господа, ну раз разговор такой у вас есть, то давайте выкладывайте свои наработки. И молодеже будет чему пооучиться и процесс игры пойдет. Мне очень интересно. Крис, хачу играть! =))))
Мысль интересная. Только правила надо формализовать. Вот скажем, какие есть привелегии у программы хищника и жертвы? Администраторские? Что значит заменить jx на jmp? Где этот jx (их может сотня в программе, что все менять)? Что он должен контролировать? Как судить? (вполне серьезный вопрос, учитывая что программу-судью можно найти и пропатчить тоже) Главное правило - как контролировать процессорное время на каждый процесс (а то я себе загробастую все разные хитрыми путями, даже не приоритетами)? Ограничения на _все_ ресурсы поставить (память, например)... Ну и т.д. Пока что можно устроить лишь "бои без правил" - но по-моему это мало чем от руткитов/троянов/вирусов отличается
Еще лучше добавить ограничение на вызываемые функции API. Либо по группам, либо по кол-ву... Запретить некоторые приемы. К примеру, что мешает одной проге поостанавливать все потоки другой? И делать что хочет...
По-моему, идея мертворожденная. Система слишком сложная и непредсказуемая. Огромную роль играет случай. И тонкости работы конкретной системы на конкретной машине в конкретных условиях. Например, на однопроцессорных машинах победит, скорее всего, тот, кто стартует первым - наверняка найдется примитивный алгоритм, позволяющий разгромить противника за отведенный квант времени. Нужно, чтобы среда сама по себе была простой и предсказуемой, а стратегии сложными. Как в шахматах. Или как в Core Wars.
идея мне кажется прикольной. я вот наверно попробовал бы поучаствовать. насчет правил - мне кажется будет несколько "наборов". вот мой вариант: (в общем виде) 1. установить OS (возьмем в качестве стандарта какую нибудь типа Win XP SP2) по возможности без дополнительного софта. 2. сохраняем образ диска, чтоб не переустанавливать когда упадет. (еше прикольнее наверно сделать livecd специально для этой цели) 3. все программы имеют одинаковые права, причем такие чтобы по возможности не могли нарушить работу OS. предлагаю запускать с правами guest. Еще неплохо бы установить критерии выигрыша/ничьей. например каждая прога должна постоянно выполнять какие-нибудь нехитрые действия (например показывать в окне изменяющийся текст). прога считается проигравшей если перестает эти действия выполнять. кстати правило что проги всего две мне кажется необязательным. P.S. предлагаю не ставить ограничений на чем писать. вдруг кто на php что нибудь прикольное напишет ?
Думаю идеальным был бы следующий вариант 1. Выделить комп-сервер, круглосуточно подключенный к инету 2. Создать веб-интерыейс для загрузки "бойцов", то есть участник заходит на сайт, вводит урл к своему екзешнику, после этого "боец" закачивается на сервер и запускается им 3. По правилам каждый участник-боец должен отсылать какой нить айдишник на сервер статистики, на сервере распознаются эти айдишники и по ним выводится статистика, кто есть живой : ) Соответственно, если запись была а потом ее нестало, то данный участник умер. 4. Разрешить по правилам апгрейды своих "воинов", то есть он может даунлоадить и запускать новые фичи 5. В идеале было бы хорошо вести два компа для 3-го кольца, и для "беспредельщиков"-драйверов, а то людям, которые пока в драйверах не особо шарят придется туго, прийдет ктонить типа Ms-rem - и все умрут : ))) А идейка - просто суперрррррр!
>> Выделить комп-сервер, круглосуточно подключенный к >> инету могу поспособствовать, есть не очень нужный комп. >> представляю, какие "бойцы" начнут закачиваться >> в первую очередь ) я тоже представляю. так что поставлю vmware. только надо решить как сделать чтоб туда заливать проги а оттуда инета вообще не было. и заодно не париться восстановлением дисков если заглючит.
еще вариант. в аттаче прога которая 1. ищет все *.dll в текущем каталоге и загружает через LoadLibraryEx(dll_name,0,DONT_RESOLVE_DLL_REFERENCES) 2. создает потоки по числу загруженых dll 3. каждый поток вызывает функцию start() dll должна: 1. экспортировать функцию start() 2. при вызове этой функции выполнять какие-нибудь действия, показывающие что она все еще функционирует. 995325158__TEST.rar
Еще хотелось чтоб проигравиший раскрывал свой исходник... И люди будут учиться и другие советовать... ))
Если война между процесами, то бои будут идти среди перехвата OpenProcess/WriteProcessMemory спускаясь в самый низ ядра. А то открыл процес, Context.EIP = &ExitProcess и досвидания А вот с DLL в процесе-сервере (боевом поле) будет интересней.
ага. я еще прикручу загрузчик dll свой чтоб LoadLibrary не вызывать. или может лучше VirtualAllocEx + CreateRemoteThread ? типа процесс "судья" запускается с правами админа создает другой процесс, в который грузит dll и запускает через CreateRemoteThread. заодно можно будет автоматизировать процесс определения победителя. например каждая dll должна раз в секунду изменять байт по заданному адресу, и если перестает это делать то считается проигравшей.