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

Странное смещение


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

Всем доброго времени суток.

Собственно, есть инструкция:


fld dword ptr [ecx+eax*4]

И смещение в структуре, которое мне надо подхватить - B8C.

Написал скрипт так образом:


push ebx
mov ebx,[eax*4+B8C]
mov [ecx+eax*4],ebx
pop ebx
fld dword ptr [ecx+eax*4]
ret 0004

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

Как-бы, не критично, патроны-то есть ведь, но все-же, можно-ли это как-нибудь вылечить? :)

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


mov [ecx+eax*4],(float)100
fld dword ptr [ecx+eax*4]
ret 0004

То отображаемое значение равно 100.

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

Смотри, значение в структуре 4 байта, а значение патронов - флоат. Чтобы не отображался ноль, тебе нужно подхваченное значение перевести в флоат. То есть, код нужно написать так:


fild dword ptr [ecx+eax*4+B8C]
fstp dword ptr [ecx+eax*4]
fld dword ptr [ecx+eax*4]
ret 0004

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

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

  • 3 недели спустя...

Привет всем вот у меня не большая проблемка вот у меня вот такая инструкция

mov [esi+ebp*4+10],edi одна это инструкция отвечает за очки и за жизни хочу сделать фильтр но не знаю как

правильно написать скрипт с фильтром с такой инстркцией mov [esi+ebp*4+10],edi вот например смешение 2F4

помогите пожалуйста.

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

Привет всем вот у меня не большая проблемка вот у меня вот такая инструкция

mov [esi+ebp*4+10],edi одна это инструкция отвечает за очки и за жизни хочу сделать фильтр но не знаю как

правильно написать скрипт с фильтром с такой инстркцией mov [esi+ebp*4+10],edi вот например смешение 2F4

помогите пожалуйста.

А можно поконкретнее: что в esi(скорее всего указатель на игрока), в ebp(номер 4-байтовой ячейки? с жизнями и очками?), и 2F4 - это ebp*4?

В идеале - что за игра?)

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

Risen 3 Titan Lords это игра. Смешение которое я указал 2F4 оно не правильное это смешение для примера то смешение которое будет отделять Жизни игрока от очков я еще не нашол

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

Risen 3 Titan Lords это игра. Смешение которое я указал 2F4 оно не правильное это смешение для примера то смешение которое будет отделять Жизни игрока от очков я еще не нашол

Так как mov [esi+ebp*4+10],edi занимает 4 байта, то захватится ещё одна инструкция.

Также предполагается, что инструкция работает только со структурой игрока(что маловероятно)

Примерно так:


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(life)
label(points)

newmem:
cmp ebp,0 //например ebp = 0 - жизни, 1 - очки
je life
cmp ebp,1
je points

mov [esi+ebp*4+10],edi
ещё_одна_инструкция
jmp returnhere

life:
//что-то делаем с жизнями
//mov [esi+10],#100
jmp returnhere
points:
//что-то делаем с очками
//mov [esi+14],#10
jmp returnhere


адрес_инъекции:
jmp newmem
нопы_будут
returnhere:


[DISABLE]
dealloc(newmem)
адрес_инъекции:
mov [esi+ebp*4+10],edi
ещё_одна_инструкция

Кривовато, но смысл правильный)

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

спасибо. я бы так сделал но вот проблема вот скрипт<p></p>

[ENABLE]

alloc(newmem,2048)

label(returnhere)

newmem:

mov [esi+ebp*4+10],#100 когда делаешь так работает но замораживается и жизни и очки а когда делаешь так mov [esi+10],#100 происходит тоже самое только #100 вообще не как не работает выставляй хоть #500 а когда делаешь так mov [ebp+4]#100 или так mov[ebp+10]#100 игра зависает

mov edx,[esi]

jmp returnhere

;Risen3.exe&amp;quot;+2BF4E8:

jmp newmem

nop

returnhere:

[DISABLE]

dealloc(newmem)

&amp;quot;Risen3.exe&amp;quot;+2BF4E8:

mov [esi+ebp*4+10],edi

mov edx,[esi]

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

а когда делаешь так mov [ebp+4]#100 или так [ebp+10]#100 игра зависает

В этом случае всегда пишешь по адресам близким к нулю ebp в данном случае не больше размера структуры. И надо всё-таки фильтровать что есть что.

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

/*---------------------------------------------------------------------------*/

Привет!

В комплекте с Cheat Engine в той же папочке валяется Tutorial.exe. Это

программка-обучалка работе с CE, в которой рассматривается в том числе и

работа со структурами. Пройди её, она крутая, весёлая и полезная, ещё и с

авторскими объяснениями. Там есть и работа со структурами. Оригинал - на

английском, но можно поискать и на русском.

/*---------------------------------------------------------------------------*/

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

Пожалуйста покажи на примере на каком ни буть скрипте

Так вот в 8 посте пример

О_о Risen докачался, ща ломанём)

Указатель на героя


[[[Risen3.exe+DD6CC0]+1C]+1С]+X
X:
+14 - ближний бой
+18 - дальний бой
+1C - проворность
+20 - влияние
+24 - выносливость
+28 - Ловкость
+2C - магия
+30 - дух
+34 - число+20 = макс. здоровье
+38 - здоровье
+3C - слава
+40 - репутация

Скрипт на бессмертие(вариант с записью 100 здоровья):


[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)

newmem:
cmp ebp,0A
jne originalcode
mov edi,64
originalcode:
mov [esi+ebp*4+10],edi
mov edx,[esi]
jmp returnhere

"Risen3.exe"+2BF4E8:
jmp newmem
nop
returnhere:

[DISABLE]
dealloc(newmem)
"Risen3.exe"+2BF4E8:
mov [esi+ebp*4+10],edi
mov edx,[esi]

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

Спасибо Большое A1t0r и keng

Еще вопросик объяснити мене дураку я не как понять не могу для меня это очень важно я знаю как писать с крипты зная как делать не сложные фильтры но до сих пор не могу понять вот есть инструкция она отвечает за все и за жизни моего игрока и за жизни врага как сделать фильтр я знаю а вот как найти смешение которое будет различать меня от врага я не могу понять вот я нахожу адрес здоровья моего игрока делаю АНАЛИЗ ДАННОЙ СТРУКТУРЫ ищу значения которые не меняются после перезагрузки игры например у меня 1 значение а у врага 2 это мене понятно вот объясните а если его там нет нет вот просто хоть убейте нет его и все чем я еще могу воспользоватся кроме АНАЛИЗ ДАННОЙ СТРУКТУРЫ что бы найти это смешение различие или как еще можно найти смещение не используя АНАЛИЗ ДАННОЙ СТРУКТУРЫ мене это учен важно извеняюсь если вопрос не по теме

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

Спасибо Большое A1t0r и keng

Еще вопросик объяснити мене дураку я не как понять не могу для меня это очень важно я знаю как писать с крипты зная как делать не сложные фильтры но до сих пор не могу понять вот есть инструкция она отвечает за все и за жизни моего игрока и за жизни врага как сделать фильтр я знаю а вот как найти смешение которое будет различать меня от врага я не могу понять вот я нахожу адрес здоровья моего игрока делаю АНАЛИЗ ДАННОЙ СТРУКТУРЫ ищу значения которые не меняются после перезагрузки игры например у меня 1 значение а у врага 2 это мене понятно вот объясните а если его там нет нет вот просто хоть убейте нет его и все чем я еще могу воспользоватся кроме АНАЛИЗ ДАННОЙ СТРУКТУРЫ что бы найти это смешение или как еще можно найти смещение не используя АНАЛИЗ ДАННОЙ СТРУКТУРЫ мене это учен важно извеняюсь если вопрос не по теме

Ну чтоб уж так всё серьёзно было, чтобы совсем не за что зацепиться, бывает чертовски редко. Можно цепляться не за конкретное число, а, например, у игрока отлично от 0 у врага 0. Или в структуре игрока указатель ведёт не в пустоту P->00000000. Что-нибудь да можно придумать.

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

/*---------------------------------------------------------------------------*/

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

Исключений не бывает. Просто посиди подольше и поищи как следует.

/*---------------------------------------------------------------------------*/

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

Бесконечные вещи (использовать на свой страх!!!):


[ENABLE]
alloc(newmem,2048)
label(returnhere)

newmem:
lea ecx,[esi+04]
cmp dword ptr[esi+24],eax
jg returnhere
mov [esi+24],eax
jmp returnhere

"Risen3.exe"+33FFD8:
jmp newmem
nop
returnhere:

[DISABLE]
dealloc(newmem)
"Risen3.exe"+33FFD8:
lea ecx,[esi+04]
mov [esi+24],eax

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

Привет всем все таки придется попросит мене вас что бы вы на примере показали пожалуйста как можно еще найти это смешение или ID игрока для различия свой чужой не используя АНАЛИЗ ДАННОЙ СТРУКТУРЫ по кажите пожалуйста на примере.

Тут A1t0r говорил можно что ни бут придумать покажите пожалуйста на примере что именно не используя АНАЛИЗ ДАННОЙ СТРУКТУРЫ как без него можно найти смешения или как там еще говорят ID игрока 

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

Привет всем все таки придется попросит мене вас что бы вы на примере показали пожалуйста как можно еще найти это смешение или ID игрока для различия свой чужой не используя АНАЛИЗ ДАННОЙ СТРУКТУРЫ по кажите пожалуйста на примере.

Тут A1t0r говорил можно что ни бут придумать покажите пожалуйста на примере что именно не используя АНАЛИЗ ДАННОЙ СТРУКТУРЫ как без него можно найти смешения или как там еще говорят ID игрока 

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

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

Привет A1t0r мене не лень анализировать через АНАЛИЗ ДАННОЙ СТРУКТУРЫ просто он бывает без полезен в примом смысле этого слова вот я и прошу вас помочь мене найти это смешение или ID игрока не используя АНАЛИЗ ДАННОЙ СТРУКТУРЫ ведь есть другие способы вот я и прошу их показать на примере пожалуйста

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

Оффтоп: похоже, пора вводить правило на использование знаков препинания в постах. Надоело ломать мозг в попытках понять, что говорят юзеры.

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

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

Привет A1t0r мене не лень анализировать через АНАЛИЗ ДАННОЙ СТРУКТУРЫ просто он бывает без полезен в примом смысле этого слова вот я и прошу вас помочь мене найти это смешение или ID игрока не используя АНАЛИЗ ДАННОЙ СТРУКТУРЫ ведь есть другие способы вот я и прошу их показать на примере пожалуйста

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

Откопал у себя пример, очень простой. Взлом UnEpic. Цепочка очень маленькая, но принцип будет понятен.

00492345:fst dword ptr [esi+000003C0] - сохраняется новое значение жизни, используется и для игрока и для противника

Если лезть и анализировать структуру лень - ищем указатель в статической памяти.

Когда нашли эту инструкцию при ранении игрока, смотрим чему равно esi и ищем это значение в памяти.

В данном случае сразу найдётся указатель в статике.

И получается такой скрипт

newmem:push eax - сохр.mov eax, [00B6A2C0] - считываем указатель по найденному адресуcmp esi, eax - сравниваем его со значением esipop eaxje exit - если будет запись значения в структуру игрока, то выходимoriginalcode:fst dword ptr [esi+000003C0] - иначе раним противникаexit:jmp returnhere

Но не всегда бывает так просто.

Предположим, после поиска значения esi нам выдало несколько адресов не статичных. Тогда берём любой, ставим бряк на доступ и продолжаем игру. Чаще всего достаточно просто зайти и выйти, т.к. доступ производится множество раз, если только указатель не оказался "левым", тогда пробуем другой. Если что-то выскочило, смотрим как инструкция обращается к нашему указателю. Например, пусть будет mov eax,[ecx+24]. Берем значение ecx и ищем дальше, повторяем пока не найдём статичный адрес.

Для данного случая скрипт будет такой(удлиню нашу цепочку, в 00B6A2C0 будет ecx)

newmem:push eax - сохр.mov eax, [00B6A2C0]mov eax, [eax+24] - дополнительное звено в нашей цепиcmp esi, eaxpop eaxje exit originalcode:fst dword ptr [esi+000003C0]exit:jmp returnhere
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Спасибо A1t0r


Xipho я имел в виду бывает без полезен АНАЛИЗ ДАННОЙ СТРУКТУРЫ в некоторых играх я конечно не специалист но бывает что делаешь АНАЛИЗ ДАННОЙ СТРУКТУРЫ но смешение нет как там еще называется ID игрока не на ходиш я знаю по то му что мене у же попадались такие игры что и АНАЛИЗ ДАННОЙ СТРУКТУРЫ становится без полезен может быть и я не внимателен но это из ключенно по тому что я не лодырь не халявщик работать люблю  проверяю я не пять минут а бывает целый день а тои несколько дней очень долго и внимательно вот потому я говорю что он бывает без полезен

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

/*---------------------------------------------------------------------------*/

 

Привет! У меня есть видео с использованием способа, похожего на способ A1t0r,

поищи на канале youtube (ссылка в подписи). Хотелось бы заметить, что

анализатор структур CE не всегда корректно обрабатывает поля структуры - он

лишь предполагает, так что в некоторых случаях поле float может оказаться

указателем, а DWORD - четырьмя отдельными байтами. Работа со структурами - 

долгая, муторная и очень утомительная, не безумно эффективная. Раньше всё это

происходило в 16-ричном редакторе и при любом неверном действии случался вылет

из ОС, так что все действия, адреса, смещения и указатели структур (а бывало,

что и участки кода) записывались на бумагу. CE очень и очень сильно облегчает

в этом плане жизнь.

 

По поводу поиска ID могу добавить, что можно поискать инструкции сравнения 

(cmp, test и так далее)выше по коду от инструкции, которую требуется изменить,

но хотя бы частичный разбор структуры часто оказывается куда полезнее.

 

/*---------------------------------------------------------------------------*/

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

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

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

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