Перейти к содержанию

Рекомендуемые сообщения

Есть такой авиасимулятор как Lock On. Что это за игра описывать не буду, но те трудности с которыми столкнулся напишу. В игре конечно присутствуют настройки сложности от аркады до полного реализма и многое возможно настроить "под себя", но есть такие функции которые через обычные настройки не изменишь. В игре есть возможность делать свои LUA-скрипты, но мне если честно проще делать что-то на обычном языке программирования (для языка LUA нашел только английский учебник, собственно не все написанное там понимаю).

Что я хочу сделать:

1) увеличить запас ловушек для ракет на истребителях

2) уменьшить к-во топлива до 100 кг и заморозить его (игра столько выставлять не позволяет)

Что я уже делал и к чему пришел...

Первое что делал это полазил по интернету, почитал как делают трейнеры, скачал для себя самый простой исходник, потом модернизировал его, несколько доработал. Внимательно делал все по поиску указателей как было указано в справке Артмани. Вроде находит его (хотя там несколько штук получается), как ни странно но каждый у меня работает, даже после перезапуска игры. Но стоит переустановить систему или игру - всё, трейнеры становятся нерабочими. Также носил их на другие компьютеры - также не работали.

Какие шаги я предпринимал:

1) вычитал что это симптомы когда указатель на dll. Но как проверить это я так и не нашел?...

2) также вычитал что бывают инструкции "указатель на указатель". И это меня еще больше пугает, т.к. мануалов в интернете как это делать не нашел...

Хочу чтобы мне кто-то помог с этим разобраться... В программировании я бывший любитель. На данный момент потихоньку осваиваю Делфи.

Какая информация от меня нужна то можете писать, по возможности буду сразу же отвечать.

  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

Проблему хорошо описал. Это редкость на форуме.

Коротко об общих понятиях (весь текст ниже это только очень сжатый обзор)

Простой указатель (одного уровня) можно представить таким видом:

[0x00445566] = значение

Или таким

[game.exe + 0x5566] = значение

Писать можно и так и этак. Но когда указатель находится в dll-ке, то обязательно её нужно писать, т.к. она загружается как пожелает того операционная система.

[game.dll + 0x5566] = значение

Узнать находится ли адрес в памяти DLL можно и в Артмани посмотрев "карту процесса" и в других инструментах Cheat Engine или MHS.

Переходим к цепочкам. Например, можно с помощью MHS проветь такую цепочку

[[game.dll + 0x5566]+0x44] = значение

Если она будет правильная, значит будет отображаться правильное значение. Можно потренироваться по составлению цепочек (см. справку MHS).

Цепочки можно искать автоматическим средством Cheat Engine:

post-3-1301958145,35_thumb.png

Путем проб и ошибок методом "тыка" можно научиться им пользоваться. Это может оказаться долгим процессом.

Но дело в том, что часто цепочки указателей часто искать совершенно ненужно. Достаточно найти только одну инструкцию машинного кода работающую только с адресом какого-то параметра. Важно чтобы адрес был изначально правильным, т.е. иначе говоря Артманиевская заморозка работала. Пока она может работать, то адрес рабочий. Инструкцию эту можно найти поставив брейкпоинт на адрес игрового параметра при помощи инструмента Cheat Engine. Затем нужно зайти в игру и сделать так чтобы параметр изменился. Иногда в игре можно ничего не делать, т.к. инструкции срабатывают сами и в этом случае можно просто перейти к окнy прервавшихся инструкций. Выделяешь пробную инструкцию и переходишь в дизассемблер. Там же переходишь в автоассемблер и пишешь скрипт по изменению инструкции. Вот и всё. Я описал только самый простой случай.

К сожалению, я готовое решение по описанной проблеме предоставить не могу. Почитай статьи на форуме и на сайте. Да и мой совет. Не писать трейнеры на языке программирования пока не будет понятно как писать скрипты на CE автоассемблере. После чего Cheat Engine может помочь в создании трейнера. А когда тебе это надоест можешь писать на языке программирования. Самое главное понять принципы по которым создаются читы.

Рекомендую почитать также статью чтобы быть в курсе дел. Методы там описанные не идеальны. В частности мне не понравилось то, как я описал из каких соображений сделал фильтр, а также мне не понравилось что я сделал длинный активирующий скрипт, который только всех путает. Надо было мне писать короткие скрипты.

Ссылка на комментарий
Поделиться на другие сайты

Спасибо за подсказку по Артмани с "Картой процесса", раньше не обращал особого внимания на него. Поскольку считал что там отображается лишь код самой программы в памяти, но это я путал с "Редактором памяти".

Вобщем произвел снова поиск, нашло те же указатели что и раньше, тоесть адреса полность совпали. Но подставляя их в трейнер ничего не работает. Сегодня (как и раньше) предметом поиска у меня был некий флаг в игре (включено=1, выключено=0), потому что топливо искать очень долго, там используется тип "с точкой 4 байта", а в этом случае процесс поиска и отсеивания может занять с пол часа, а то и более. Поэтому пока хочу разобраться как именно устроено хранение данных в памяти именно в этой игре.

Вобщем вот что я нашел, используя справку Артмани по поиску указателей (больше не отсеивается):

003F41A8 + 1264

003F41CC + 1260

03A6DaB0 + 176

2f6b718c28e1.jpg

Вот наглядно все видно на скриншоте. Справа в колонке адрес с названием "Самолеты" это и есть мой флаг, на этот адрес я и искал указатели. После открыл "Карту процесса" и наивный такой считал что напротив одного из найденных мной адресов указателей будет видно откуда этот адрес берется (game.exe или dll). Но проблема в том что там таких адресов я не обнаружил. Или в "Карте процессов" показывается лишь диапазон адресов? Вобщем експортировал их в Ексель.

Тоесть я наверно так понимаю что нужно таки идти по второму пути поиска указателей? Тоесть без дизассемблера не обойтись? Если больше никак, тогда последую второму совету.

Кстати, я все же пока подставлял адреса в обычный трейнер, тоесть пока не использовал не TMK не похожие утилиты, тоесть в среде Делфи. Незнаю, но мне как бы проще самому видеть откуда я читаю значение указателей и куда их потом записываю. Хотя если я не прав в этом, то поправьте, будем исправляться :huh:

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Экселя у меня нет сейчас - я за ПК на котором его нет. Устанавливать его нет желания :)

В Карте процессов может не указываться имя модуля или процесса игры. Если же указано имя модуля, тогда использовать "имя модуля + смещение"

Если в Артмани не получается найти указатель, то надо использовать другие способы описанные выше. Через это многие проходили. В том числе и я около 6 лет назад. Теперь Артмани я почти никогда не использую, если только не приходится искать разные типы данных. Я никогда не ищу в Артмани указателей - трата времени.

А TMK - уже давно себя изжил. Альтернатива ему Cheat Engine.

Ссылка на комментарий
Поделиться на другие сайты

Скачал с вашего же сайта Cheat Engine Rus, при запуске выдает сообщение с ошибкой

---------------------------

ucc12 not found

---------------------------

ucc12.dll was not found. No c-scripting abilities

---------------------------

ОК

---------------------------

Это так и должно быть или только у меня так?  :grin:

ОС Windows XP SP3

Ссылка на комментарий
Поделиться на другие сайты

Xipho, спасибо! Теперь запустилось без ошибок.

MasterGH, последовал Вашему совету, использовал Cheat Engine. Программка действительно пофункциональней Артмани, и даже намного быстрее ищет значения в памяти. Что очень понравилось  :grin:

Теперь по делу... Нашел я обычный адрес с моим "флагом", стал искать указатель "автоматическими средствами Cheat Engine", как Вы указали на скриншоте во втором сообщении этой темы. Процесс поиска выдался очень длинным. Но там я так понял указывается откуда идет адрес, тоесть с dll или game.exe? Вобщем до конца не поняв что с этим делать (в справке Cheat Engine не нашел где указаны действия с указателями), решил включить отладчик. В таблице, на найденном мной адресе ПКМ->Брекпоинт "На запись", в игре изменил свой "флаг", после чего вылезло окно отладчика, а игра вывалилась, без единой ошибки - просто закрылась. К счастью, отладчик кое-что успел записать:

1) 03a3c14d - 89 81 b0 00 00 00 - mov [ecx+000000b0],eax

29bac6b0550c.jpg

После чего мне нужна помощь по таким пунктам...

1) Как расшифровать показания отладчика? Понятное дело что оно что-то записало в мою ячейку памяти. Тоесть я так понимаю в физическую ячейку с моим "флагом" 0d8ce9e8 было обращение с адреса 03a3c14d? В игре больше ничего не трогал, даже мышкой не водил, только переключил "флаг". И мне хочется знать что конкретно означает mov [ecx+000000b0],eax? У вас на форуме нашел тему "Ассемблерные инструкции", но там для меня сильно вскольз все написано...

2) Почему игра все же вылетела и есть ли для этого какое-то лекарство?

3) Как все же узнать откуда работает указатель dll или game.exe, через Pointer Scan?

Ссылка на комментарий
Поделиться на другие сайты

Даже если я дам ответы на твои вопросы это мало поможет решению проблемы. Мне проще самому посмотреть. Надеюсь это будет не долго.

Объясни как ты отсеивал значение в игре... я пока поставлю игру на закачку

------------------

Добавление1:

Ладно пока ты спишь или завтра будешь писать. Я напишу, что все твои вопросы сейчас не очень важны. Инструкция которую ты увидел в логах пишет "флаг" из eax по адресу [ecx+ b0]. Поскольку игра аварийно завершилась, то невозможно посмотреть значения регистров, а также не возможно посмотреть близлежащие инструкции рядом с mov [ecx+b0].

Однако, теперь если игра вылетать больше не будет (надо выяснить почему она вылетает, об этом позже), то тебе возможно не придётся искать вновь твой флаг. Ты уже знаешь что эта инструкция работает с адресом "флага". Тебе надо запустить вновь игру. Подключиться к её процессу и перейти в дизассемблер на инструкцию на скриншоте: 0x3a3c14d. Если там будет такая же инструкция к mov [ecx+b0], то тебе повезло. Вызови меню ПКМ и вызови функцию "Определить адреса на инструкции". Иди в игру измени в игре "флаг". Возвращайся в CE в окно определившихся адресов и ты должен увидеть адрес флага или несколько адресов. Если адрес один, то пиши скрипт инъекции на автоассемблере по записи в [ecx+b0] постоянного значения флага. Если много, то будут проблемы с написанием скрипта.

Если игра опять рухнула иди в настройки CE и включи "скрытый отладчик" и "режим ядра" (точные названия опций я не помню). Попробуй всё снова как описано выше. Если игра опять рухнула установи последнюю альфа версию CE 6.1 из форума "Реализы CE-> Тестирование CE 6.1". Зайди в настройки и попробуй эти опции:

post-3-1302135958,21_thumb.png

Попробуй всё снова как описано выше. Игра после этого не должна аварийно завершаться.

Если не знаешь как скрипт написать, то посмотри примеры наших пользователей в разделе скриптов. Если будут затруднения, то пиши.

Изменено пользователем MasterGH
"Добавление1"
Ссылка на комментарий
Поделиться на другие сайты

В общем полазил я по этой игре... СтрарФорс своей "звёздной силой" не позволяет ставить брейкпоинты на выполнение кода в функции (видимо, в игре в агонии рассинхронизируются потоки и синхронизировать их как надо не представляется возможным):



int __thiscall AFM__JetEngine__getFuelConsumption(void *this, int a2)
{
int result;
void *v3;
void *v4;

v4 = this;
if ( a2 )
{
v3 = v4;
*(_DWORD *)a2 = *((_DWORD *)v4 + 68);
result = *((_DWORD *)v3 + 69);
*(_DWORD *)(a2 + 4) = result;
}
return result; // возврат расхода топлива
}

При чем все равно какой режим скрытности ставить в CE в опциях отладчика.

Также рядом есть и функция установки расхода топлива. Но из-за невозможности подключить отладчик исследовать их не представляется возможным. Пока самый простой выход искать и далее использовать многоуровневые указатели на адрес топлива и на адрес тепловых ракет - ловушек....

Ссылка на комментарий
Поделиться на другие сайты

Не знаю, как в текущей версии старфорса, но в одной из предыдущих старфорс являл собой виртуальную машину, и весь основной код игры мало того, что криптовался показателями углов считывания с диска, так еще и транслировался в байт-код, который на лету раскриптовывался кусками и выполнялся. Задействовать отладчик тоже не представлялось возможным. Но такая практика заметно снижала производительность игры, так что, возможно, от нее в новых версиях старфорса уже отказались.

Ссылка на комментарий
Поделиться на другие сайты

Вчера целый вечер мучался с отладчиком... Все опции скрытности перепробовал - все одно и то же... Как я вижу если уже знающие люди и с огромным опытои ничего сделать не могут, то что уже про меня говорить...

Тогда может попробовать сделать тоже самое для Локон 2.0? Там защита другая.

Ссылка на комментарий
Поделиться на другие сайты

Не знаю, как в текущей версии старфорса, но в одной из предыдущих старфорс являл собой виртуальную машину, и весь основной код игры мало того, что криптовался показателями углов считывания с диска, так еще и транслировался в байт-код, который на лету раскриптовывался кусками и выполнялся. Задействовать отладчик тоже не представлялось возможным. Но такая практика заметно снижала производительность игры, так что, возможно, от нее в новых версиях старфорса уже отказались.

Версия 3.X. Игру запустил под эмуляцией в даймон тулс с простым отключением физического привода, с включением расширенной эмуляцией и миним образом точной топологии с ключём диска (это сделал только ради исследования игру потом сразу удалю т.к. я в игры уже давно не играю). Когда в игре ставишь аппаратный бряк на доступ к коду. Игра тут же замораживается. А после начинает работать с частотой один кадр в пять-10 секунд. Слышен звук игры. А после происходит остановка звука, а затем и анимации. Если снять бряк игра работает как и работала. Если описанное выше делать часто, то рано или поздно игра зависнет. При чем бряк ставил на коде в dll-ке и код там явно CPU-шный. Dll-ка ничем не запротокчена по свединям пейда. Пытался же ставить бряк на чтение самого кода, тот же эффект - игра тут же морозится без прерывания. Ставил разные режимы скрытности отладчика CE. Всё бестолку. Но под Olly я ещё не запускал... у ней есть различные плагины - надо попробовать. Но Олька конечно отладчик третьего ринго, на неё надежды очень мало в том чтобы понять из-за каких конкретных причин невозможна отладка... Тут можно ещё долго всего писать.

Вчера целый вечер мучался с отладчиком... Все опции скрытности перепробовал - все одно и то же... Как я вижу если уже знающие люди и с огромным опытои ничего сделать не могут, то что уже про меня говорить...

Тогда может попробовать сделать тоже самое для Локон 2.0? Там защита другая.

Да что мучиться с отладчиком и так понятно, что не работает. Второй версией я заниматься не буду. На это не желания.

Попробую в первой версии найти цепочки указателей предположительно меньше 4-х уровней. С этим вопросы.

1) В первой версии где на панели пилота посмотреть сколько осталось ракет-ловушек? Желательно скриншот привести.

2) Возможно ли увеличить количество топлива в игре - как происходит заправка и как её сделать?

Ссылка на комментарий
Поделиться на другие сайты

>даже намного быстрее ищет значения в памяти

Просто надо скачать актуальную версию ArtMoney 7.35.1, а не пользоваться стыренной ArtMoney PRO 7.27 - судя по скрину, у Вас она (сентябрь 2007 г.).

Что нового в версии 7.35 (20 января 2011 года)

Скорость поиска точного значения и диапазона значений увеличена на 20-100% (в зависимости от условий поиска).

Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

Доброго времени суток. Был пропал на некоторое время, но вернулся и сразу же занялся недоделанной работой.

Перепробовал многое. При включении отладчика игра все же вылетала, никакие опции скрытности в СЕ не помогали, дело было дошло даже до SoftIce, но тоже безрезультатно. Указатель нашел старым добрым способом с помощью Артмани (там отладчик не нужен).

Благодаря M4K, скачал новую версию Артмани, и там в описании оказалось что:

Что нового в версии 7.35.1 (13 марта 2011 года)

* Исправлена ошибка в неправильной работе поиска указателя на начало блока памяти.

А именно этим я и пользовался для поиска указателя. Тоесть теперь все нашло.

Теперь непосредственно ко взлому   dry.gif...

Указатель находится в Dll, об этом сообщают и Артмани и СЕ:

7ade68289065.jpg

1fb75d480206.jpg

Тоесть как я понял мой указатель (найденный с помощью Артмани) 003F41A8+1264 входит в диапазон модуля Inter.dll от адреса 003F0000. Адрес 003F0000 я так понял указывает на первый байт в модуле Inter.dll? (кстати такая библиотека присутствует в каталоге игры).

Тоесть чтобы мне найти смещение на указатель мне нужно вычесть разницу между адресами 003F41A8 и 003F0000 и потом перевести в десятичную систему? Я правильно мыслю?   :rolleyes: Если так, тогда что делать со смещением которое указывается в поиске указателя 1264?

И еще вопросик по программированию...

Сразу оговорюсь что в интернете по подобному информация очень скудная. Собственно как в Делфи прилепить это смещение на Dll?

Путем поиска нашел что используется некая функция GetModuleBase(ProcessId, 'Game.dll'); которая как я понял должна возвращать адрес первого байта в памяти этой Dll. Дело в том что когда ее прописываю то компилятор ругается что незнает такой фукции. Такое впечатление что что-то упустил в uses. Но проверить этого несмогу, потому что кругом находил лишь отрывки кода.

Ссылка на комментарий
Поделиться на другие сайты

>>Адрес 003F0000 я так понял указывает на первый байт в модуле Inter.dll?

Правильно

>>Тоесть чтобы мне найти смещение на указатель мне нужно вычесть разницу между адресами 003F41A8 и 003F0000 и потом перевести в десятичную систему? Я правильно мыслю?

003F41A8+1264

=

0x003F4000 + 0x1A8 + 1264

Если я не ошибаюсь, надо искать указатель на 0x003F4000, а не на 003F0000.

>> И еще вопросик по программированию... Сразу оговорюсь, что в интернете по подобному информация очень скудная. Собственно как в Делфи прилепить это смещение на Dll?

Подключиться к процессу, извлечь PID и т.п.

Найти базовый адрес модуля используя CreateToolHelp32Snapshot...

Использовать циклически ReadProcessMemory с добавлением смещений.

Почему скудно написано? Смотри сколько ссылок я нашёл (это я ещё не искал специально на иностранных сайтах)

Нужная функция: ссылка

В uses добавь: Windows, Tlhelp32 и может быть SysUtils

Пример как этой функций пользоваться: ссылка

Ещё так для размышлений: ссылка

-----

Может пригодится, а может нет на языке C: ссылка

Ссылка на комментарий
Поделиться на другие сайты

Работает и на другом компьютере   ;). Теперь переустановка игры или ОС ничего уже не сделает.

...Если я не ошибаюсь, надо искать указатель на 0x003F4000, а не на 003F0000.

Я тоже так сначала думал. Но ведь 0x003F4000 это же не есть адрес первого байта?! Артмани, СЕ и эта функция - все они показывают один и тот же адрес - 0x003F0000. Следственно от него и нужно было отталкиваться.

Кстати все же нужно было вычесть разницу между:

$003F41A8 - $003F0000 = $41A8

Только в десятичную систему переводить не нужно было, записал просто:

Address_New:= GetModuleBase(ProcessId,'Inter.dll') + $41A8;

И все получилось!

Теперь все остальное что хотел доделать - лишь дело техники.

Еще раз большое спасибо за помощь!   :)

Ссылка на комментарий
Поделиться на другие сайты

Не за что.

Судя по типам защит блоков виртуальной памяти думаю ты ошибаешься с + $41A8, но если работает, то пускай работает.

Я уверен, что нет кода, который бы обращался к этому адресу через + $41A8. Обращение должно происходить совсем другим образом по другой цепочке указателей. Но как я писал, если работает, то пускай работает. Возможно блоки памяти распределяются "устойчивым" образом и их расположение не меняется. Остаётся только на это надеяться.

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Здравствуйте. Уже и не рад что взялся за создание этого трейнера, но хоть опыта немного набрался.

Вобщем сейчас добавляю новые функции в него, и на одной из них появилась небольшая проблемка...

Сейчас задача состоит в том чтобы вывести из памяти значение высоты полета (ее можно посмотреть и в самолете, но мне нужна именно высота над уровнем моря, вообще это долго объяснять и не нужно думаю тут). Эту высоту возможно увидеть при внешнем виде на самолет, она внизу пишется. Так вот, значение высоты не находится никакими типами данных, только текст... Такое впечатление что она как-то выщитывается и этот результат сразу загоняется в текстовое поле. Исходя из того что отладчик так и не подключается (даже СЕ 6.1 не помог), вынужден был брать значение с текста. И тут начались проблемы... Ну я один вечер помучался чтобы только считать текстовое значение с памяти. В среде разработки это все получилось. Но! Адрес этого текста то меняется постоянно, причем ни СЕ ни Артмани не сообщают откуда работает это значение. Я для себя сделал вывод что это game.exe

Конечно, функция GetModuleBase что приведена выше тут не помогает, потому что адрес game.exe должен начинаться с нуля (если я правильно понял). Но, адрес начинался не с нуля, а с 0x00400000. Вариант вышеописанный не прокатил со смещениями...

Да, и по поводу указателей. Как мне показалось искать указатель на текстовое значение это абсурд. Помоему если текст является частью интерфейса игры он должен быть и так статичным. И Артмани отказалась конечно искать указатель на текст.

Какие есть варианты решения данной проблемы? Как мне выйти на статический адрес этого текста в игре? %)

Ссылка на комментарий
Поделиться на другие сайты

Адрес Game.exe вовсе необязательно должен начинаться с нуля. И то смещение, что ты привел, весьма характерно для экзешников, написанных на Ассемблере или С++. Но то, что ни артемон, ни СЕ не показывают, модуль или экзешник, скорее всего, говорит о том, что найденный адрес хранится в так называемой "куче" (heap). Внутри кучи этот адрес может быть статичен, но само местоположение кучи в адресном пространстве процесса может меняться. Указатель в данном случае лучше искать реверсингом.

Ссылка на комментарий
Поделиться на другие сайты

Xipho, реверсинг как способ для новичка конечно очень хорошо  :grin:. Но ничего, когда-то и до этого нужно было бы добраться. Но раз на то дело пошло, может подскажете плагин к OllyDbg чтобы обойти Старфорс? Испробовал PhantOm v1.54, но результата не дало - игра вылетела. Кстати при запуске приложения сразу из-под отладчика - вылазит окно Старфорса в котором сообщается что нельзя запускать игру вместе с отладчиком  :rolleyes:

Ссылка на комментарий
Поделиться на другие сайты

Есть несколько плагинов для олли, которые прячут его как отладчик, гугли, ибо на память я не помню. В конце недели буду дома, тогда смогу глянуть.

Ссылка на комментарий
Поделиться на другие сайты

Я с этой игрой возился. Бряки ставить не даёт Старфорс. Т.е. вообще нельзя прерваться на инструкции чтобы посмотреть на адреса регистров и вычислять указатели на что-либо.

Там надо Старфорс снимать через виртуалку или через удалённый отладчик ядра. Не сняв Старфорс никак отладку не провести: не узнать указателей и т.п. Никогда этим не занимался и времени нету.

Ссылка на комментарий
Поделиться на другие сайты

Xipho, погуглил и нашел что выше написал. Знал бы названия плагинов - то конечно же проблем не было бы. У самого сейчас небольшой напряг со свободным временем, поэтому могу если что подождать недельку.

MasterGH, Старфорс конечно же хорошо, выходит что я тогда делаю невозможное, потому что некоторые функции уже работают )))Если серьезно, то нашел вот такую статью как еще проще избавиться от Старфорса (если такое выкладывать нельзя - тогда удалите ее от сюда):

http://www.xakep.ru/...806/default.asp

Сразу возник вопрос по этому. Дело в том что это физически убирает Старфорс. Тоесть если таким методом его вырезать и найти нужные адреса в памяти, а потом снова вернуть Старфорс - адреса что я нашел поменяются или нет? Дело в том что мне нужна игра со Старфорсом - это чтобы потом патчи спокойно ставить и т.д.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.