Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Серьезная штука с памятью |
Автор: alex134 4.2.2003, 04:25 |
Пишу программу, которая читит игры, даже не знаю, как это объяснить. Короче, играю в Starcraft - выставляю себе 10000 минералов, или в Counter-strike 100 жизней, и так почти в любой игре. Схема такая. (1) Играю в тот же старкрафт, смотрю - у меня 8 минералов. Просканировал память старкрафта, и нашел там n адресов со значением 8. Подождал чуть-чуть - стало 16 минералов. В списке найденных адресов ищу те, значение которых изменилось на 16. Теперь я могу изменять содержимое этих ячеек памяти как душе угодно - поставить себе 8000 минералов, или по таймеру в Counter-Strike десять раз в секунду ставить 100 процентов жизни. Естественно, такая штука не только для Starcrafta & Counter-Strike пригодна. Хочу теперь это дело автоматизировать. Т.е., чтобы мой чит работал без вмешательства человека. Запустил чит, указал ему поддерживать уровень хелсов на отметке 100, запустить контру и играть спокойно. Ведь сложновато при каждом запуске игры проделывать схему (1)"подчеркнутая". Как быть, от чего оттолкнуться? Жду Ваших советов знатоки системы. |
Автор: [auxx] 4.2.2003, 09:24 |
Ты схему1 ужо реализовал? Полностью автоматизировать не вохможно. Надо будет указывать имя ехе-шкика игры =), исходное значение (8 или 16) и т.п. А вот алгоритм не плохой. |
Автор: alex134 4.2.2003, 21:50 | ||
Да, я схему 1 уже реализовал. Еще разок опишу проблему: Принцип такой: Играю в тот же старкрафт, смотрю - у меня 8 минералов. Просканировал память старкрафта, и нашел там n адресов со значением 8. Подождал чуть-чуть - стало 16 минералов. В списке найденных адресов ищу те, значение которых изменилось на 16. И так каждый раз при запуске игры ![]()
Имя exe-шника игры - ессно придется указывать, но это можно сделать не во время игры - вот в чем суть. А вот (8 или 16) - надо придумать другой способ. 1) Ну, например, я запускал некую программу "Х" много раз, и на разных компах, и каждый раз искомые значения содержались по двум адресам : 6738148 и 8140032. Но, к сожалению в последнее время они начали "прыгать" по другим адресам (((( 2) Может можно как-то установить закономерность по такому прыганию? 3) Как-то исследовать саму программу, и узнать куда она пишет искомые значения, и т.д. Вариант 3 мне нравится больше всех. Может есть другие способы? P.S: догадаетесь ли вы что это за программа "Х"? Если угадаете, сразу поймете мою настырность в этом вопросе... Подсказка- начинается на "Cas.." заканчивается на "..esta". |
Автор: Baa 4.2.2003, 22:19 |
Дело в том, что под переменные память выделяться может динамически, соотв. выделяется из того места, где свободно, а где свободно определить не получится, соотв. и не получится определить закономерность. |
Автор: December 4.2.2003, 22:50 | ||
Разве что если запускать на только что стартанувшей машине с минимумом сервисов - тогда вероятность стабильности адреса повышается. А если присвоить твоей сканилке хоткей, точнее, два хоткея, и давить на них при хелс=100 и хелс=90 (например), то уже можно пару адресов отыскать. |
Автор: Baa 4.2.2003, 23:09 | ||
Ага, а если еще написать свою ОС... Не, это все игры в Настрадамуса... з.ы. он там стремную фишку ломает... наерно какую-нить Casino Fiesta %) |
Автор: December 5.2.2003, 01:32 | ||
Зато интересные игры. Каждая партия - перезагрузка, каждый проигрыш - новый адрес... Компьютерная рулетка. |
Автор: [auxx] 5.2.2003, 02:23 |
напиши свой отладчик (довольно просто кстати, по этому делу много статей есть) пусть ставит breakpoint на том месте, где выделяется память для переменной. тогда при каждом запуске у тебя будет адрес переменной твоей. плюс к этому breakpoint можно сделать на запись туды. тогда у тебя автоматически будет поддерживаться значение количества минералов и т.п. мне кстати тоже такая прога нужна: хочу друга в квейк сделать ![]() |
Автор: dim 5.2.2003, 04:23 | ||
Ну и что это дает? Какой признак того что при следующем запуске память выделилась именно под нужную переменную? |
Автор: [auxx] 5.2.2003, 09:46 | ||
а очень простой:
прога выполняется сама до первого VirtualAlloc. Затем получаешь в EAX адрес кол-ва минералов. Тогда можно автоматизировать исправление значения. Как узнать, куды ставить этот брикпоинт? по схеме 1. |
Автор: Baa 5.2.2003, 19:28 |
[auxx] ну мне кажется, что память там будет выделятся через CRT (new), но эт лана, а ведь там не две переменные... а, скажем, сотня... куда бряк ставить бум? а если они еще в разных последовательностях выделяются (в зависимости от условия например)? Не, эт все гадание на кофейной гуще. з.ы. а если значение содержится в динам. массиве? при расширении массива будет перераспределение памяти... |
Автор: Step 5.2.2003, 20:50 |
А ты не пыталя создавать в своей проге алгоритмы, запускаеш прогу, запускаеш игру, и запускаеш алгоритм который по раннее заложенному алгоритму производит поиск и потдержание переменных. Проблема состоит в том что при таком подходе некоторое время мниуту гдето придется играть по одному и томуже алгоритму... |
Автор: alex134 5.2.2003, 22:42 |
ОК! Вопрос такой: как можно отследить создание всех переменных? Или как узнать, какая часть виртуального адресного пространства отведена для данных? (Программа называется CashFiesta)))) |
Автор: dim 6.2.2003, 01:15 | ||
[auxx]
Ну ты молодец!!! Так ведь ведь вопрос был в том что схема 1 не подходит. А ты предлагешь еще кроме нее еще дополнительный гемор - так, чтоб жизнь скучной не была ![]() |
Автор: [auxx] 6.2.2003, 02:14 |
Дык если схема 1 не подходит, как по-другому? Ну можно всю прогу пошагово в отладчике выполнить, тогда может найдешь. |
Автор: dim 6.2.2003, 04:42 | ||
[auxx]Ты пойми, если уже известны искомые адреса, то остальные извраты уже нафиг не нужны.
Ну допустим можно узнать расположение кучи и расположение стека, но что дальше ? |
Автор: [auxx] 6.2.2003, 08:21 | ||
Чето я совсем запутался.
А если не известны? Вот я и думаю, как их найти. Но если не по схеме 1, то придется прослеживать работу программы, а это сложно. И еще не ясно: чем схема 1 не подходит? |
Автор: [auxx] 6.2.2003, 08:31 |
Расположение кучи и стека узнать не сложно, а дальше зависит от того, где именно хранится значение. Оно может быть: в стеке, гдето в статических данных, выделено динамически. (ничего не забыл?) Если в стеке, то для какогото конкретного места проги адресс будет равет начальный_ESP + какоето_постоянное_значение. (а вот найти это значение сложно) Если в статических данных, то все просто: смещение от начала данных постоянно, тока его найти надо. А если оно гдето в динамически выделенной памяти, то хрен его найдещь. |
Автор: Unregistered 7.2.2003, 21:03 |
Как узнать расположение кучи и стека? |
Автор: alex134 7.2.2003, 21:08 | ||
Прослеживать работу программы это отлаживать? И как можно узнать расположение кучи и стека? |
Автор: [auxx] 7.2.2003, 23:46 | ||
Стека - SS:ESP Кучи - не помню. Это не сложно и пока не столь важно.
Ну типа того. |
Автор: Unregistered 9.2.2003, 01:12 |
А если программа не отлаживается? В чем причина? |
Автор: [auxx] 9.2.2003, 03:27 | ||
Это как? Все отлаживается. |
Автор: setq 11.2.2003, 01:12 | ||
эх в жизни бы так... |
Автор: CaNIBaLchik 8.2.2006, 15:17 |
Чуваки, как напишите киньте ссылку, а то меня на этаже в старик рвут как котенка, надоело |