Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Как это сделать?


Автор: dead_ricky 3.2.2003, 14:46
Может вкурсе, есть такая прога - ArtMoney, с помощью нее можно у игрушек (и нетолько) делать деньги ну и т.д. во время самой игры. Принцип такой, че у тя етсь какое-то значение в игре (денег), ты Alt-Tab'ом переключаешься на ArtMoney, выбираешь из списка процессов свою игруху и вводиш в некоторое поле значение искомой переменной (денег там или еще че-нить), находиться доху.. всякой шняги. Так вот, потом по ходу игры твоя переменная изменяется (че-нить построил - денег стало меньше), ну и обратно перелазишь в ArtMoney вводишь текущее значение и из раннее найденных "переменных" отсеивается ложные. И так находишь то что те надо и делаешь сколько надо.

Так вот, как это программно выглядит, может кто знает?

З.Ы. Только не пишите, че мол это относиться к взлому, а это хороший форум иди мол на другой форум и спрашивай там... как-то такое было. Лучше тогда вообще не пишите. mad.gif

Еще один З.Ы. Зараннее благодарен smile.gif

Автор: brb 3.2.2003, 16:56
Цитата
вводиш
Цитата
доху.. всякой шняги.
Цитата
нетолько

Так писать НЕЛЬЗЯ!!!

Автор: Baa 3.2.2003, 18:00
dead_ricky
Делается довольно просто... спецом для таких читеров GameWizard сделали дллку, чтобы все проще было.
Объяснять технологию поиска значения не буду, смори описание на ReadProcessMemory WriteProcessMemory
з.ы. впредь фильтруй базар :\

Автор: Step 3.2.2003, 23:46
Baa ну ты спец, может чу-чуть распишеш...

Автор: man2002ua 4.2.2003, 00:09
Недавно сделал себе такую утилитку, к-я ищет переменные значения.
Heroes of Might and Magic III на Duron 1.3/256 находит значения за 2 минуты (драконов себе поставил несколько сотен - тут же интерес к игре пропал - не советую так играть).
Она не требует точного значения переменной, достаточно сказать ей - уменьшилось, увеличилось или не изменилось, плюс режим уменьшилось/увеличилось на "число" и режим поиска точного числа.
Ну и конечно возможность изменения переменной.


Автор: Step 4.2.2003, 00:19
man2002ua кинь исходник если не жалок step_sf@rambler.ru

Автор: Baa 4.2.2003, 02:11
Вот простой пример... на самом деле так делать не стоит, но суть дела он отражает...
char test[] = "test";
AfxMessageBox (test);
char* lpBuffer = new char [0xFF];
ZeroMemory (lpBuffer, 0xFF);
DWORD dwRead = 0;
DWORD *offset = 0;
while (true) {
ReadProcessMemory (GetCurrentProcess (), offset, lpBuffer, 4, &dwRead);
if (!strcmp (lpBuffer, "test"))
{
strcpy (lpBuffer, "gggg");
WriteProcessMemory (GetCurrentProcess(), offset, lpBuffer, 4, &dwRead);
break;
}
offset++;
}
AfxMessageBox (test);
delete [] lpBuffer;

Автор: Step 4.2.2003, 02:29
Цитата
GetCurrentProcess(),
это меня наводит на подозрения...

Автор: Baa 4.2.2003, 19:32
На какие-такие подозрения? ясное дело, что ищу в своем процессе... хочешь искать в чужом? юзай OpenProcess или CreateProcess для получения хэндла на чужой процесс... я просто показал как работать с функциями ReadProcessMemory и т.д., мне ж не сказали, че конкретно вы хотите увидить smile.gif

Автор: Step 4.2.2003, 19:37
Цитата
На какие-такие подозрения? ясное дело, что ищу в своем процессе...
smile.gif

Автор: man2002ua 5.2.2003, 00:03
Step - не жалко, только полную версию не дам, извини. Дам шаровую, в к-й нет делать определенные настройки типа - сканировать только заданную область процесса и искать значения типа byte, dword и изменять значения тоже нельзя (кажется).
Сейчас закончу защиту вешать и вышлю.


Автор: dead_ricky 6.2.2003, 19:29
2 All: очень sorry smile.gif, больше выражаться не буду.
2 man2002ua: отправь плз мне тоже исходник на мыло dead_ricky@mail.ru

Автор: man2002ua 6.2.2003, 19:35
dead_ricky, какой еще исходник? Версия сырая и не распространяется! Могу только идею рассказать

Автор: Step 6.2.2003, 20:14
man2002ua Cпасибо и на этом

Автор: dead_ricky 14.2.2003, 00:27
Цитата(man2002ua @ 6.2.2003, 16:35)
dead_ricky, какой еще исходник? Версия сырая и не распространяется! Могу только идею рассказать

Раскажи тогда идею, только как можно подробней. Лучше со вставками коды. Буду очень признателен smile.gif.

Автор: Baa 14.2.2003, 00:41
dead_ricky помойму вся идея из моего кода ясна была... если уж по нему не понял...

Автор: man2002ua 14.2.2003, 00:49
Идея:
1) открыть процесс;
2) сохранить образ страниц памяти с атрибутами PAGE_READWRITE и MEM_COMMIT, используя функцию VirtualQueryEx;
3) дождаться изменения переменной - пройти по всем страницам - выбирая изменившиеся значения;
4) Освободить память от страниц, переменные в к-х не изменились, а старый слепок памяти - заменить новым.
5) Варить так несколько раз - до готовности.

Желательно все оптимизировать, а то выжрет всю память.

Автор: Baa 14.2.2003, 17:34
man2002ua чтоб память не выжрало можно свапить...
и можно сохранять не весь слепок, а токо смещения...

Автор: dead_ricky 2.3.2003, 19:40
Цитата(Baa @ 13.2.2003, 21:41)
dead_ricky помойму вся идея из моего кода ясна была... если уж по нему не понял...

Отдыхай, понял mad.gif . Я все, как у тя сделал, только int и float искал вместо строки. Че-то она (прога моя) там искала, искала, но нифига не нашла, вернее я ждать запарился smile.gif. Ну а если ты такой мегамозг, то давай полностью готовый исходник, с пояснениями smile.gif. А так сам ты ... smile.gif.

Автор: man2002ua 3.3.2003, 18:13
Baa, cохранять смещения чего?
И смысл в свапаньи (это при винде-то biggrin.gif)

Автор: Baa 4.3.2003, 03:57
dead_ricky
кажется мне хамят? впрочем ладно, спишем на трудное время...
1. раз ты искал этим куском инт или флоат, то ты ничего не понял из моего кода
2. я никому ничего давать не собираюсь, а тем более при такой постановке вопроса, даже не вопроса, а требования.
3. без комментариев
man2002ua
дык можно сохранять смещения найденных значений в памяти, и в след. раз смореть изменения токо по этим смещениям... если захочешь поговорить на эту тему - пиши.
з.ы. тема закрыта.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)