Работа с памятью игры, exe
|
|
Den_spb | Дата: Воскресенье, 02.01.2011, 18:14 | Сообщение # 76 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (walk) А как понять, что какая-либо функция обращается к структуре? Предположим, указатель на структуру объекта находится в ecx. Команда записи числа 0x10 по смещению 5 структуры будет выглядеть так:Часто указатели на структуру имеют буквенные обозначения, тогда будет написано что-то вроде этого:Code mov [ecx+CObject.field_5], 10h Quote (walk) И можно ли их использовать в своих целях? Это смещения в какой-то структуре. Записывать/читать можно многие адреса. Для этого используются опкоды read memory и write memory.
|
|
| |
walk | Дата: Воскресенье, 02.01.2011, 18:17 | Сообщение # 77 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| Quote (Den_spb) Это смещения в какой-то структуре. Записывать/читать можно многие адреса. Для этого используются опкоды read memory и write memory. Получается так обозначены неизвестные смещения?
|
|
| |
Den_spb | Дата: Воскресенье, 02.01.2011, 18:19 | Сообщение # 78 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Получается да. Известные смещения обычно имеют названия. Кстати, на скрине видно смещение IsWastedBusted. Можно попробовать записать в него 2.
|
|
| |
walk | Дата: Воскресенье, 02.01.2011, 18:23 | Сообщение # 79 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| Quote (Den_spb) mov [ecx+5], 10h mov обязательно будет присутствовать И можно по подробней, что означают эти mov, cmp и т.д. Ну это наверное последнее на сегодня, я смотрю вас уже порядком достал вопросами Добавлено (02.01.2011, 18:23) ---------------------------------------------
Quote (Den_spb) Кстати, на скрине видно смещение IsWastedBusted. Можно попробовать записать в него 2. Неа, пробовал, даже код остался: Code :TEST_10 wait 0 if Player.Defined($player_char) else_jump @TEST_82 if 00E1: key_pressed 0 14 else_jump @TEST_82 05E6: 0@ = actor $player_actor struct 0@ += 0xCC 05DF: write_memory 0@ size 1 value 2 virtual_protect 0
wait 1000
:TEST_82 jump @TEST_10
|
|
| |
Den_spb | Дата: Воскресенье, 02.01.2011, 18:24 | Сообщение # 80 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (walk) mov обязательно будет присутствовать В зависимости от того, как используется значение, будет стоять соответствующая команда. Вот неплохая статья по ассемблеру для новичков: http://sannybuilder.com/forums/viewtopic.php?id=41 Quote Неа, пробовал, даже код остался Наверно в смещение записывается 2, когда уже сработал основной процесс, отвечающий за арест игрока.
|
|
| |
walk | Дата: Воскресенье, 02.01.2011, 18:25 | Сообщение # 81 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| Кстати, хорошо былоб еслиб ты взглянул на этот код, мне кажется, что я неправильно обращаюсь к структуре (CPlayer)
|
|
| |
Den_spb | Дата: Воскресенье, 02.01.2011, 18:32 | Сообщение # 82 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| По-моему ошибок нет.
|
|
| |
walk | Дата: Понедельник, 03.01.2011, 09:38 | Сообщение # 83 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| Вобщем ещё вопросы: Как именно работает значения .data и .bss, что может делать команда set_wasted_or_busted_check? Добавлено (03.01.2011, 07:17) --------------------------------------------- Ещё вопрос, как обращаться к структурам CCam, CMenuManager и т.д.? Вобще как я понял, надо в .data искать название структуры, потом прибавлять к этому значению смещение в самой структуре, я так понял? Добавлено (03.01.2011, 09:38) ---------------------------------------------
Code 0A8C: write_memory 0xBA67A4 size 4 value 0x000001 virtual_protect 0 0A8C: write_memory 0xBA68A4 size 4 value 0x290501 virtual_protect 0 0AA5: call 0x7469A0 num_params 0 pop 0 //mouse while 0AB0: key_pressed 9 wait 0 end 0A8C: write_memory 0xBA67A4 size 4 value 0x000000 virtual_protect 0 0A8C: write_memory 0xBA68A4 size 4 value 0x000000 virtual_protect 0 0AA5: call 0x746F70 num_params 0 pop 0 //mouse off Распишите мне пожалуйста, за что отвечают эти параметры, сам не могу найти
|
|
| |
Den_spb | Дата: Понедельник, 03.01.2011, 14:01 | Сообщение # 84 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| В exe есть 2 основных типа адресов: data и text. В data-адресах хранятся различные данные, которые читаются и перезаписываются функциями. Эти адреса можно сравнить с глобальными переменными в скриптах. В text-адресах записаны отдельные команды различных функций exe. Т.е. если изменить значение, записанное по какому-то text-адресу, то функция, частью которой является данный адрес, станет работать по новому алгоритму. Не видел такого. Quote (walk) команда set_wasted_or_busted_check Если не ошибаюсь, она активирует автоматический провал миссии при аресте или смерти игрока (постоянно проверять факт ареста или смерти в миссии не нужно). Вроде описание к ней было в справке СБ или в одной из тем СБ-форума. Quote (walk) Ещё вопрос, как обращаться к структурам CCam, CMenuManager и т.д.? Работа со структурами всегда одинаковая: вычисляется начало структуры (указатель), к указателю прибавляется нужное смещение, затем читается или пишется значение полученного адреса. Quote (walk) Распишите мне пожалуйста, за что отвечают эти параметры, сам не могу найти Переход на нужный адрес: жмёшь G, вводишь адрес. Просмотр функций, обращающихся к адресу - вставляешь текстовый курсор между буквами названия адреса, жмёшь X.
|
|
| |
walk | Дата: Понедельник, 03.01.2011, 16:47 | Сообщение # 85 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| Quote (Den_spb) Не видел такого. Вайс сити Quote (Den_spb) вычисляется начало структуры (указатель) Как вычислить? Так это не правильно я понял: Quote Вобще как я понял, надо в .data искать название структуры, потом прибавлять к этому значению смещение в самой структуре, я так понял? wacko ? Добавлено (03.01.2011, 16:47) --------------------------------------------- Всёравно всё не особо получается, допустим не могу узнать кол-во денег на счету игрока(СА): http://savepic.org/1173713.jpg Код: Code :Noname_2 wait 0 if Player.Defined($PLAYER_CHAR) jf @Noname_232 if 0AB0: key_pressed 9 jf @Noname_232 0A96: 0@ = actor $PLAYER_ACTOR struct 0@ += 0xB8 0A8D: 1@ = read_memory 0@ size 4 virtual_protect 0 054C: use_GXT_table 'POOL' 01E3: text_1number_styled 'NUM' 1@ 5000 ms 1 // ~1~
wait 500
:Noname_232 jump @Noname_2 В чём ошибка?
Сообщение отредактировал walk - Понедельник, 03.01.2011, 16:48 |
|
| |
Den_spb | Дата: Понедельник, 03.01.2011, 18:30 | Сообщение # 86 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (walk) В чём ошибка? Начало структуры CPlayer - 0x00B7CD98. Вот так работает:Code {$CLEO} wait 0 :Noname_2 wait 0 if Player.Defined($PLAYER_CHAR) jf @Noname_232 0@ = 0x0B7CD98 0@ += 0xB8 0A8D: 0@ = read_memory 0@ size 4 virtual_protect 0 03F0: enable_text_draw 1 045A: draw_text_1number 300.0 200.0 GXT 'NUMBER' number 0@ // ~1~
:Noname_232 jump @Noname_2
|
|
| |
walk | Дата: Понедельник, 03.01.2011, 18:38 | Сообщение # 87 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| Den_spb, то есть это относится Code 0A96: 0@ = actor $PLAYER_ACTOR struct к структре CPlayerPed (ну или что-то в этом роде)?
|
|
| |
Den_spb | Дата: Понедельник, 03.01.2011, 18:46 | Сообщение # 88 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| 0A96 употребляется для вычисления указателя на структуру педа (и педа игрока в том числе). А CPlayer - это отдельная структура, в которой хранятся значения свойств, имеющихся только у игрока (деньги и т.п.). П.С. Код в сообщении 79 тоже надо переделать подобным образом, только в VC адрес CPlayer другой.
|
|
| |
walk | Дата: Вторник, 04.01.2011, 10:14 | Сообщение # 89 |
Группа: Проверенные
Сообщений: 96
Статус: Offline
| В вайсити в структуре CCam имеется смещение TargetEntity (float) - за что оно может отвечать ? Добавлено (04.01.2011, 10:14) --------------------------------------------- Ещё вопрос, где примерно может содержаться указатель на педа под прицелом(мне для вайсити)?
Сообщение отредактировал walk - Вторник, 04.01.2011, 06:18 |
|
| |
Den_spb | Дата: Вторник, 04.01.2011, 15:58 | Сообщение # 90 |
Создатель сайта
Группа: Администраторы
Сообщений: 1595
Статус: Offline
| Quote (walk) В вайсити в структуре CCam имеется смещение TargetEntity (float) - за что оно может отвечать ? float обычно используется для каких-то коэффициентов, расстояний, углов, скоростей и т.п. Quote (walk) Ещё вопрос, где примерно может содержаться указатель на педа под прицелом(мне для вайсити)? А есть ли там такой указатель? Ведь треугольник над целью в VC не создаётся.
|
|
| |