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

Многоуровневый указатель (проблема)


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

Скачал репак. Попробовал по пунктам:

1. Нашёл ячейку с количеством земли.

2. Поставил бряк на запись(write).

3. В найденной инструкции посмотрел значение edi.

4. Его поискал в памяти с галочкой в Writable. Нашлось 18 адресов.

5. Взял и поставил на первую, вторую бряк на доступ. Ничего не нашлось.

В этом случае нужно все адреса проверить на доступ?

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

Скачал репак. Попробовал по пунктам:

1. Нашёл ячейку с количеством земли.

2. Поставил бряк на запись(write).

3. В найденной инструкции посмотрел значение edi.

4. Его поискал в памяти с галочкой в Writable. Нашлось 18 адресов.

5. Взял и поставил на первую, вторую бряк на доступ. Ничего не нашлось.

В этом случае нужно все адреса проверить на доступ?

Попробуй остальные, благо их не так уж много. Где-то должна быть та, от которой игра будет подтормаживать, значит она.

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

Подскажи пожалуйста почему игра вылетать стала? :(

Если использую VEH отладчик то 18-20+ адресов и инструкций нету. Вот по предыдущему поиску. А сейчас на этом же репаке включил в CE windows отладчик нашло ровно 15 адресов. Но при бряке на первый адрес получаю вылет. Вот я заскринил порядок действий:

Нашёл адрес со значением земли:

e4e506e305cc5fc084b953c972bce4b6.jpg

Нашёл что пишет в этот адрес:

d799d0f57b404c2bed1c91c5ba75d832.jpg

Нашёл адреса содержащие адрес инструкции(галочку Writable тоже поставил):

2d2b87b95c280bffbeff986a331022ac.jpg

Поставил бряк на доступ к первому адресу и когда в игре изменилось значение земли, выдало ошибку, игра закрылась:

15e7b9ffdf8aeab1a5584c091d7c7b96.jpg

Что делать? Менять отладчик с windows на VEH? мне почему-то кажется что VEH будет хуже.

Я вот недавно обновил CE до версии 6.4 а была 6.3. Может это проблема, недоработка новой версии? Может лучше откатиться на 6.3? У вас же я смотрю 6.3 до сих пор стоит. Вот примерно день, два как обновился до 6.4 и начались эти вылеты.

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

Версия игры и репак совпадают? И ещё я использую CE 6.3 english. В 6.4 у меня почему-то луа скрипты даже не открываются.

Да. Craft The World [R.G. UPG] v. 0.9.033. Наверное деле в CE новом. Это единственное что изменилось, после чего стало такое твориться. Хотя могло и так что-то повлиять. Попробую откатиться на 6.3 и повторить порядок действий описанный вами выше.

А по поводу "я использую CE 6.3 english" так там просто файлы в папку language добавляются и язык становиться русским. Это офицальный файл языков с офицального сайта CE. Вряд-ли файл языков может испортить работоспособность программы. Или я ошибаюсь в своих рассуждениях и всё-таки может?

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

Да. Craft The World [R.G. UPG] v. 0.9.033. Наверное деле в CE новом. Это единственное что изменилось, после чего стало такое твориться. Хотя могло и так что-то повлиять. Попробую откатиться на 6.3 и повторить порядок действий описанный вами выше.

А по поводу "я использую CE 6.3 english" так там просто файлы в папку language добавляются и язык становиться русским. Это офицальный файл языков с офицального сайта CE. Вряд-ли файл языков может испортить работоспособность программы. Или я ошибаюсь в своих рассуждениях и всё-таки может?

Нет, никак не влияет перевод. Просто привык к английскому, что работать с программами, что программировать.

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

1. Нашёл ячейку с количеством земли.

2. Поставил бряк на запись(write).

3. В найденной инструкции посмотрел значение edi.

4. Его поискал в памяти с галочкой в Writable. Нашлось примерно 15 адресов.

5. Взял и поставил на первый бряк на доступ. Нашлось очень много инструкций.

6. Взял первую. Посмотрел в ней edi. (а смещения то мы записываем!!! здесь +1C). И запустил снова поиск в памяти с теми же параметрами.

7. Нашлась туча значений. Среди них 5-я единственная зелёная(статический адрес и расположен в CraftWorld.exe).

Всё получилось :)

Правда зелёный был не 5-й адрес а второй. Но он такой же как и у вас CraftWorld.exe+3168B4.

Блин, как же злит криворукость разработчиков. Всё дело было в новой версии CE. Я с отладчиками мучился, игру перекачивал... Но никак не мог подумать на CE, пока он не стал единственным на что осталось думать.

А ещё спасибо вам за помощь. И за галочку :) Получается раньше без квадрата в ней я не все адреса видел которые могли обращаться к интересующему меня адресу.

A1t0r, Но если бы так случилось что когда в пункте 7 "Нашлась туча значений. Среди них 5-я единственная зелёная" не нашлось бы этого зелёного адреса, то пришлось бы по очереди перебирать предыдущие адреса поиска("Нашлось примерно 15 адресов"), а затем и все адреса текущего поиска("Нашлась туча значений"), лазить по всем ответвлениям этих адресов и инструкций до тех пор пока не нашёлся бы статический, зелёный адрес?

И ещё вопрос:

Вот вы ставили бряк на запись, а я всегда ставлю на доступ. Есть-ли большая разница в этом? Может ли это быть причиной моих неудач в поиске указателей?

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

Всё получилось :)

Правда зелёный был не 5-й адрес а второй. Но он такой же как и у вас CraftWorld.exe+3168B4.

Блин, как же злит криворукость разработчиков. Всё дело было в новой версии CE. Я с отладчиками мучился, игру перекачивал... Но никак не мог подумать на CE, пока он не стал единственным на что осталось думать.

Я его в первый же день как скачал забраковал. Захотел написать трейнер на луа, нажал Table->Show cheat table Lua Script, и ничего. Даже старые CT-шки со скриптами не работали, и забил на это дело)

A1t0r, Но если бы так случилось что когда в пункте 7 "Нашлась туча значений. Среди них 5-я единственная зелёная" не нашлось бы этого зелёного адреса, то пришлось бы по очереди перебирать предыдущие адреса поиска("Нашлось примерно 15 адресов"), а затем и все адреса текущего поиска("Нашлась туча значений"), лазить по всем ответвлениям этих адресов и инструкций до тех пор пока не нашёлся бы статический, зелёный адрес?

Конечно перебирать все несколько тысяч адресов не нужно. Я бы попробовал несколько с бряком на доступ. Чаще всего все они используют одинаковое смещение, только названия регистров разные. Если бы не получилось, то попробовал докопаться до структуры через другие ресурсы, такое было несколько раз, что через некоторые находишь множество адресов и дальше, проще чем копаться во всём этом попробовать "зайти" с другого ресурса или навыка, смотря что ищем.

Ну и никто не запрещал Pointer scan, но это уже когда совсем всё плохо, но такого у меня ещё не было)

И ещё вопрос:

Вот вы ставили бряк на запись, а я всегда ставлю на доступ. Есть-ли большая разница в этом? Может ли это быть причиной моих неудач в поиске указателей?

На запись ставится, чтобы чётко определить инструкции, которые только пишут по данному адресу. Если вам достаточно найти адрес для таблицы, или же вы хотите писать фильтр, то этого достаточно и можно сравнивать структуры свои и врагов, естественно, через функцию "Узнать кто получает доступ через эту инструкцию"(перевод вольный).

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

А вообще можно всегда ставить на доступ, тогда придётся по внешнему виду инструкций фильтровать нужные, например:


mov [esi+10], eax
mov ebx,[ecx+4*esi]

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

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

например:


mov [esi+10], eax
mov ebx,[ecx+4*esi]

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

Подскажите пожалуйста, как найти смещение к такому указателю как во второй инструкции выше?

если указатель в инструкции "mov ebx, [ecx+1C]" то "1C" и будет смещение. Но когда в инструкции такое: mov ebx,[ecx+esi*4] то непонятно какое смещение и я наугад перебираю их.

Подскажите как его узнать?

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

Подскажите пожалуйста, как найти смещение к такому указателю как во второй инструкции выше?

если указатель в инструкции "mov ebx, [ecx+1C]" то "1C" и будет смещение. Но когда в инструкции такое: mov ebx,[ecx+esi*4] то непонятно какое смещение и я наугад перебираю их.

Подскажите как его узнать?

Тебе нужно искать ecx. В esi должен находиться номер ячейки(0, 1, 2 и т.д.). Такая адресация используется для доступа к адресу или количеству по номеру персонажа, существа в армии, ресурса и др.

Например ecx = 01234500 начало стека армии персонажа, тогда при esi = 0, [01234500] - первый монстр, esi = 1, [01234504] - 2-ой и т.д.

Также может использоваться такой приём для перезаписи большого массива данных:


...
mov ecx,4
mov esi,XXXXXXXX
mov edi,YYYYYYYY
repe movsb
...

В ecx заносится кол-во перезаписываемых байт. esi - адрес откуда пишем(считывание)(s - source, источник), edi - адрес куда пишем(запись)(d - destination, назначение), repe movsb - повторить перезапись ecx байта с адреса esi в edi. Можно также перемещать 2 байта(word, слово) - movsw, и 4 байта(double word, двойное слово).

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

Тебе нужно искать ecx. В esi должен находиться номер ячейки(0, 1, 2 и т.д.). Такая адресация используется для доступа к адресу или количеству по номеру персонажа, существа в армии, ресурса и др.

Например ecx = 01234500 начало стека армии персонажа, тогда при esi = 0, [01234500] - первый монстр, esi = 1, [01234504] - 2-ой и т.д.

Также может использоваться такой приём для перезаписи большого массива данных:


...
mov ecx,4
mov esi,XXXXXXXX
mov edi,YYYYYYYY
repe movsb
...

В ecx заносится кол-во перезаписываемых байт. esi - адрес откуда пишем(считывание)(s - source, источник), edi - адрес куда пишем(запись)(d - destination, назначение), repe movsb - повторить перезапись ecx байта с адреса esi в edi. Можно также перемещать 2 байта(word, слово) - movsw, и 4 байта(double word, двойное слово).

Как-то сложно. ecx это указатель?

а смещение я так и не понял как найти

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

Как-то сложно. ecx это указатель?

а смещение я так и не понял как найти

Если под смещением понимается вся конструкция [ecx+esi*4], то просто в отладчике посмотри значения регистров и вычисли это значение и всё.

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

Если под смещением понимается вся конструкция [ecx+esi*4], то просто в отладчике посмотри значения регистров и вычисли это значение и всё.

Я ничего не понимаю из того что это [ecx+esi*4] значит. Знаю только что эта инструкция получает доступ к нужному мне адресу. На неё есть указатель. Но указатель не указывает сразу на мой адрес, а значит есть смещение. А оно точно есть, так как я добавляю смещения по очереди, пока не увижу свой адрес. Но это очень долго и нудно, а ещё и не правильно. Вот поэтому хотелось бы узнать как найти то смещение сразу которое я ищу перебором.

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

Извините меня если что не так пишу, просто я ещё "чайник"

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

Я ничего не понимаю из того что это [ecx+esi*4] значит. Знаю только что эта инструкция получает доступ к нужному мне адресу. На неё есть указатель. Но указатель не указывает сразу на мой адрес, а значит есть смещение. А оно точно есть, так как я добавляю смещения по очереди, пока не увижу свой адрес. Но это очень долго и нудно, а ещё и не правильно. Вот поэтому хотелось бы узнать как найти то смещение сразу которое я ищу перебором.

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

Извините меня если что не так пишу, просто я ещё "чайник"

ecx+esi*4 - обычная арифметика. В окне бряка, где у тебя появились инструкции - нажми по ней дважды, откроется окно "Дополнительная информация", где отображены регистры и их значения. Теперь предположим, что регистр ecx равен 016B14A8, а регистр esi равен 8. Дальше мы делаем следующее: открываем Калькулятор Windows, в режиме "Программист", и слева переключаем на "HEX", теперь значение регистра esi умножаем на 4, получаем "20", это и есть нужное смещение.

Дальше составляем указатель, допустим, базовый адрес: "GameName.exe"+245300, и смещение, которое мы рассчитали - 20[/b}.

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

ecx+esi*4 - обычная арифметика. В окне бряка, где у тебя появились инструкции - нажми по ней дважды, откроется окно "Дополнительная информация", где отображены регистры и их значения. Теперь предположим, что регистр ecx равен 016B14A8, а регистр esi равен 8. Дальше мы делаем следующее: открываем Калькулятор Windows, в режиме "Программист", и слева переключаем на "HEX", теперь значение регистра esi умножаем на 4, получаем "20", это и есть нужное смещение.

Дальше составляем указатель, допустим, базовый адрес: "GameName.exe"+245300, и смещение, которое мы рассчитали - 20.

Спасибо. Это более понятно. Буду пробовать.

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

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

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

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