#1 17-09-2010 08:26

Kostyan
Registered: 27-09-2009
Posts: 94

Как получить нужный адрес в .exe

В общем раньше экзешники никогда не копал и не доганяю, как получить нужный адрес (допустим адрес активирования чита 6 звёзд розыска) объясните кто-нибудь пожалуйста

Offline

#2 17-09-2010 17:41

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Как получить нужный адрес в .exe

Объяснить непросто, хотя ничего особосложного там нет. Здесь лучший учитель - собственный опыт.
В exe есть 2 основных типа адресов - data и text (есть и другие типы). Если проводить аналогию со скриптами, то адреса типа data можно сравнить с глобальными переменными - в них хранятся различные значения (например, 0xB7CB84 - [dword] Глобальный таймер в ms, 0x8D2530 - [float] Плотность движения пешеходов). В ходе игры отдельные процедуры exe читают эти значения или записывают в эти адреса новые значения. Эти адреса (не все) можно читать/перезаписывать и в скрипте с помощью опкодов 0A8C/0A8D. Назначение некоторых часто употребляемых data-адресов, а также смещений в структурах можно найти тут: http://gtamodding.ru/wiki/Адреса_Памяти_(SA)
Что касается адресов типа text, то в них записаны отдельные команды, из которых в свою очередь состоят процедуры exe. Сами по себе значения этих адресов во время игры не меняются, но их, как и адреса data, можно (не все) менять скриптом - в этом случае в опкодах 0A8C/0A8D следует ставить значение параметра virtual protect, равное 1. Понятно, что в случае изменения значения text-адреса, процедура, которой он принадлежит, станет работать уже по новому алгоритму.
Для поиска нужных адресов и процедур незаменима idb-база от listener. Открыть её можно с помощью IDA 5. В окне программы есть несколько вкладок, которые представляют код exe в различном виде. Основные из них: "IDA View-A" - основной вид. Если текущий участок exe состоит из адресов типа data, то они отображаются в виде списка, а если текущий участок является какой-то процедурой (text-адреса), то она отобразится в виде блок-схемы. "Hex View-A" - побайтовое отображение кода.
Многие data-адреса и процедуры в базе проименованы, при активной вкладке "IDA View-A" можно осуществлять их поиск по названию (Search - Text).
Есть ещё полезная вкладка Functions - список всех процедур exe. Если эта вкладка активна, то можно осуществить поиск процедуры по названию (Search). Например, осуществив поиск по слову train, можно найти процедуры, имеющие отношение к поездам. При щелчке по названию процедуры, активируется вкладка "IDA View-A" и появится блок-схема этой процедуры, по которой можно исследовать, как она работает (какие процедуры вызывает, со значениями каких адресов оперирует и т.д.).

Last edited by Den_spb (17-09-2010 23:46)

Offline

#3 17-09-2010 21:57

Kostyan
Registered: 27-09-2009
Posts: 94

Re: Как получить нужный адрес в .exe

Den_spb, спасибо большое, буду пробывать

Offline

#4 17-09-2010 22:40

Kostyan
Registered: 27-09-2009
Posts: 94

Re: Как получить нужный адрес в .exe

Ну вот допустим нашёл адрес 0x438E40 (чит добавляет броню,деньги и здоровье), но как только его в игре не использовал, ничего не происходит, потом немного покапавшись по сайтам нашёл 0x969133 - вот этот работает, а который я нашёл нет, почему?

Offline

#5 17-09-2010 23:40

Den_spb
From: Ленинград
Registered: 23-11-2008
Posts: 941
Website

Re: Как получить нужный адрес в .exe

0x438E40 - адрес начала процедуры _cheatHeathArmor250k, а не data-адрес. Поэтому не надо было пытаться записать по этому адресу значение, а следовало вызвать эту процедуру. Для вызова процедур используются опкоды 0AA5 - 0AA8 (как определить, когда какой опкод надо использовать, смотри тут: http://sannybuilder.com/forums/viewtopic.php?id=941 ). В данном случае процедура не является методом, параметров она не возвращает, поэтому используем 0AA5:

0AA5: call 0x438E40 num_params 0 pop 0

Второй способ активации чита - data-адрес 0x969133. В него просто записывается значение с помощью 0A8C.
Кстати, в IDA есть способ быстрого перехода к нужному адресу. При активной вкладке "IDA View-A" жмём G и вводим нужный адрес.

Last edited by Den_spb (17-09-2010 23:43)

Offline

#6 18-09-2010 02:49

Kostyan
Registered: 27-09-2009
Posts: 94

Re: Как получить нужный адрес в .exe

Den_spb, спасибо братишка, очень выручаешь

p.s.
дай пожалуйста ссыль на свой сайт

Offline

#7 15-10-2010 05:41

VintProg_Pro
Registered: 17-06-2010
Posts: 153

Re: Как получить нужный адрес в .exe

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

Offline

Board footer

Powered by FluxBB