Что нового

Как вычислить offset значения?

Автор
S

Shaman

Знающий
Сообщения
33
Репутация
5
Я пользовался только средствами Cheat Engine,
Для этого:
1. Находим адрес нужного нам значения
2. Добавляем его для редактирования
3. Жмём на нём правой кнопкой и выбираем "Find out what writes to this address"
4. Если появится окно MsgBox, жмём "Да/Ok"
5. В появившемся окне нажимаем "Show disassembler"
 

Sirioga

Знающий
Сообщения
48
Репутация
7
Хороший, гайд, именно им и пользовался. Но правда нашел на другом сайте. А более простого способо вычислить оффсет я не нашел, да и куда проще чем просто посмотреть?
 

killbond

Осваивающий
Сообщения
96
Репутация
32
прошу прощения, что открываю тему, но вопрос как раз по гайду...
пользуюсь СЕ впервые, так что не ругайте. Что это значит, когда находишь значение, жмешь "Find out what writes to this addres" и появляется окно, но ничего не происходит??? Т.е. так:
2009-11-15_213104.png


Моё личное предположение - это значит, что адрес в виртуальном и физическом пространстве памяти используется без смещения... т.е. оффсет значения нет и не может быть???

Хотя после долгой перекопки этой софтины нашел вот что, к каждому значению в редакторе памяти можно применить "Pointer scan", а тот находит кучу указателей, которые хоть все можно переместить в окно для работы и у каждого указателя есть свой оффсет:
2009-11-15_214803.png

Что это значит - ничего не понимаю :wacko:
Если все-таки найдется базовый адрес, то данное значение будет вычислятся одинаково верно находится на всех компах???
 

xamd

AION bot developer
Сообщения
66
Репутация
24
Отследил CE адрес ХП моба. Проблема в том, что он постоянно меняется, а когда я попытался дисасемблировать, мне выдало сл:

mov edi,283f36d5

в строке с моим адресом. А теперь вопрос: что с этим делать? )))
Как я понимаю, если адрес со значениями меняется, то надо искать оффсет и искать по оффсету, верно? Какой тут оффсет, что это вообще такое?

*паника*
 
Автор
S

Shaman

Знающий
Сообщения
33
Репутация
5
xamd сказал(а):
Отследил CE адрес ХП моба. Проблема в том, что он постоянно меняется, а когда я попытался дисасемблировать, мне выдало сл:

mov edi,283f36d5

в строке с моим адресом. А теперь вопрос: что с этим делать? )))
Как я понимаю, если адрес со значениями меняется, то надо искать оффсет и искать по оффсету, верно? Какой тут оффсет, что это вообще такое?

*паника*

xamd, не паникуйте. Найденная вами строчка не соответствует истинному значению здоровья. Подобную строчку вы должны получить в самом конце - когда найдёте базовый адрес. По вашему вопросы - современные игры реализуют динамическое распределение памяти - т.е. запущенная игра при разных запусках будет располагаться в разных областях памяти. Поэтому, что бы знать где хранятся данные игры (а это нужно и самой игре) в игре есть некоторый постоянный, базовый адрес и относительного него с помощью офсетов (офсет - смещение относительно указателя) игра (ну или мы=) ) обращается к разным параметрам, например здоровью, деньгам и т.п. Для разных параметров может быть разная длина (ну или уровень вложенности) офсетов. Например [BA] +1C + 20 + 4A. Или просто [BA] + 1C + 10. Я раньше приводил ссылку на гайд - пользуйтесь им, т.к. на уровне поиска офсетов не очень рационально пользоваться чистым дизассемблированием, оно возможно пригодится потом - например для написания ASM инъекций. Немного поясню - на чём основан этот гайд. Итак, вы запустили игру и нашли здоровье чара - отлично. Теперь с помощью CE ищем строчки кода, которые меняют этот адрес - т.е. заходим в игра и получаем по голове от монстров что бы уменьшить здоровье =) . В окне отладки появятся строки - какая-то из них будет нам нужна для поиска офсета (возможны на этом шаге вы выбрали не ту строку). Выбираем ту - которая нам больше нравится (здесь нет алгоритмов - только несколько советов, которые сами приходят с опытом). Смотрим его в окне дополнительного просмотра. Например там содержится строка mov eax, dword ptr[ecx + AC]. Итак - самый последний офсет - AC. Это офсет (смещение) относительно ecx. Т.е. теперь нам нужно найти указатель на адрес хранящийся в ecx. Ищем как это описанно в гайде. Опять находим какой-то офсет и адрес. Опять повторяем etc пока не найдём строчку, подобную mov eax, AC9943FA. Вот этот AC9943FA и будет нашим базовым адрес, относительно которого мы и можем добраться с помощью цепочки офсетов до нужного нам значения здоровья чара.
Надеюсь я немного прояснил - что за зверь такой "Базовый адрес" и "Офсет" :smile:
Советую погуглить DMA и прочитать статью http://www.chemax.ru/articles/tutorial_dma_nondma.php
 

xamd

AION bot developer
Сообщения
66
Репутация
24
mov [ecx+4ccd451a],hs
mov [eax+500c4200],eax
add [eax-3232ffc1],al

что-нибудь из этого похоже? Мне кажется 2-й )
 
Автор
S

Shaman

Знающий
Сообщения
33
Репутация
5
xamd сказал(а):
mov [ecx+4ccd451a],hs
mov [eax+500c4200],eax
add [eax-3232ffc1],al

что-нибудь из этого похоже? Мне кажется 2-й )
Да, скорее всего. Вы точно не ошиблись про hs? Сколько работал с ASM ни разу не встречал =) Ну и al - 8 битный кусок EAX (точнее половинка AX, который тоже половинка EAX)
 

xamd

AION bot developer
Сообщения
66
Репутация
24
голова кругом ) Теперь бы вспомнить, где встретил и к чему это относится )
про hs точно не ошибся, ибо тупо копипастил )

p.s.
искать только mov?
eax, ecx, edi, <- что это? ) И какой из них мне нужен?
Их смещение обязательно должно находиться рядом? Ибо я его нашел пролистав странички 2 asm кода )
 

Nurgllz

Новичок
Сообщения
26
Репутация
2
Попробовал получить этими методами оффсеты из вов... полный феил, попробовал артмани и СЕ. артмани долго искал и ниче не нашел, а СЕ выдал пустую таблицу.
То ли лыжи не едут... :wall_brake:
 

Belfigor

Модератор
Локальный модератор
Сообщения
3,608
Репутация
941
... или яйца мешают :smile:.
Вот эту вот статью ты сколько раз прочитал? http://www.chemax.ru/articles/tutorial_dma_nondma.php
Вдумчиво прочитал
psychotic.png
 
Верх