Есть такая программка ArtMoney. Она позволяет достаточно подробно исследовать (делать поиск, выборки и т.д.) данные запущенной программы. Вопрос: как (чем) запретить доступ этой и подобной ей программам к данным процесса в памяти? Главная проблема в том, что защищаемая программа только в виде exe, без исходников. Из опробованного мной это получилось сделать только x-protector'ом. Если зашифровать им файл, то ArtMoney просто не видит данных запущенной программы. Чем еще можно сделать подобное?
Да просто шифруй значения в игре. Т.е. например (набранные_баллы xor 12345678h) ArtMoney просто ищет числа до изменения и после изменения и находит совпадающие адреса. А если у тебя в памяти числа шифрованые, то... [Edited] sorry, не заметил что только exe'шник. Попробуйте разные крипторы, они контролируют целостность кода против crack'а, должны и данные защищать.
Это слишком легко. 1. Найти адрес зашифрованного значения (по абсолютному адресу или относительно незашифрованных данных). 2. И даже методом тыка подобрать нужные значения. Это даже пионер, который про xor ничего не слышал сделает Сейчас, например, разбиваю данные на части, храню байты в разных местах шифрую их и еще их контрольную сумму считаю и храню ее отдельно. Но столкнулся с тем, что мест которые надо защищать слишком много и постоянно находятся новые данные, которые надо шифровать и скрывать. Без исходников таких патчей много не наделаешь. Поэтому и есть желание скрыть все.
yureckor Попробуйте разные крипторы, они контролируют целостность кода против crack'а, должны и данные защищать. Должны то должны, но большинство обпробованных из "Инструментов" защищают только исполняемый код (антипатч в памяти). С данными только с x-prot пока получилось.
> С данными только с x-prot пока получилось Код тут нипричем - надо запретить программам открывать свой процесс с помошью OpenProcess(), чтоб потом не использовали ReadProcessMemory(), и не давать внедрять dll'ки через ловушки и CreateRemoteThread(). Методов много, но все они для нулевого кольца и непацанским патчем функций ядра == нужна дровина (у шпрота она имеется).
>даже пионер, который про xor ничего не слышал сделает Причем здесь человек, если защита от ArtMoney? Если защита от взома, то как говорится, поиск по форуму рулит
Я пишу немного конкурентный Artmoney взломщик игр WinnerGameCheater, и мое имхо - защита памяти процесса дело бессмысленное (к примеру у меня скоро возможно появится ядреный драйвер, позволяющий успешно инфильтровать dll в защищеные игры). Очень хорошо здесь пригодится неявная защита (ее где-то упоминал Крис Касперски), то есть значение будет и находится и менятся, но после этого в логике программы будут возникать проблемы вплоть до вылета ее. То есть защищеному значению должна быть сопоставлена зашифрованная пара. Еще хороший вариант, хотя и не производительный - защищенные данные хранить в странице памяти с аттрибутом PAGE_NOACCESS, и перед доступом к ней аттрибут менять на PAGE_READWRITE. Как результат эта страница с очень малой долей вероятности попадет под внимание взломщика, что при многократных отсевах очень даже хорошо. Ну и наконец чисто алгоритмический метод - значение состоит в разбиении защищаемого значения на два или более шифрованных значения, которые изменяются по очереди при изменении защищаемого.
По-моему при использовании АrtMoney, T-Search итд. - смысл в вылавливании изменившихся значений при изменении игровой ситуации. (я правильно понял - это игра ?).А если при каждом сёрч-некст в переменной показывается разное значение, то ищущий обычно выкидывает его из списка, так заведи лажевые переменные штук 100 или 10000 на вкус(да не убудет от хипа , которые показывают " да, вот ТУТ новое значение" ,а реальное значение заставь динамически меняться, к примеру привяжи его к чему нибудь типа тиков таймера (пяток лишних таймеров - дело хозяйское).Да плюс предложенное выше -> 3атрахаются ковырять (но это для ArtMoney и ПОДОБНЫХ инструментов исследования). P.S. А может, я неправ ))))))))))
severe44 Достаточно с некоторой периодичностью менять положение переменнной в памяти. При этом ее можно даже не шифровать.
Для предотвращения взлома с участием отладки, важно что-бы программа не оставляла вычисленный результат зашифрованного значения, на одном и том же месте (например в стеке, как это часто бывает). Тогда не удасться его обнаружить методом послеовательных отсевов (в том числе, через поиск неизвестного значения) и поставить data breakpoint.
Я че мешает делать так: 1) Создать 4 массива переменных 2) Получить в первый наше значение 3) Заполнить 2 массив нашим значением 4) Заполнить 3 массив нашим значением 5) Заполнить 4 массив нашим значением 6) Очистить 4 и получить в него первое значение + Скопировать значение 4 массива в дополнительный массив и изменять его при изменении реального значения и т.д. + x-protector. + Нахождение ArtMoney
Все критичные для взлома данные храни в динамически выделяемой памяти, а не в виде глобальный переменных, которые у тебя лежат в секции данных.