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

Metro 2033 redux (Steam 1.0.0.3) правка скриптов таблицы CE 6.4


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

Я думаю, судя по описанному, проблема похожа на ту, которая была у меня при написании скриптов "Бесконечные патроны и стрельба без перезарядки". я её решил.  

Посмотрите здесь, здесь, здесь, здесь и окончательный вариант скрипта, при котором уже вылетов не было ТУТА.

 

И вылетает именно после четырех выстрелов из дробовика? То есть, с другим оружием проблем нет?

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

 

да я читал данные статьи, просто меня не тк понимают, я не так поясняю. проблема во мне.

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

 тема такая почти все оружие стандартно кроме 3

1) револьвер после заморозки или нуп адреса +448 при переключении на револьвер игра вылетает

2) хельсинг, типа пневматики которая стреляет металлическими стрелами, при переключении на него все норм, но как только с него делается выстрел игра вылетает

3) обрез, нее важно 2 или 4 там ствола, при но_релоаде после 2/4 выстрелов игра продолжается но вот само оружие не перезаряжается и на другое оружие не переключается, спасает только ручное изменение кол-ва патронов через се. 

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

 

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

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

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

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


 
второй интересный момент что в игре если подобрать оружие вместимостью 30 патронов то оно дает(показывает) оружие с 30 патронами  (но по поиску через СЕ бьется как 29),  как только я жму reload то на экране отображается 31 патрон в обоиме, при этом по поиску он так же пробивается как 30, защита? может в этом дело?

Вот как раз это и приводит к вылету. Если не использовать инструкцию работающую с общим кол-вом патронов. 

 

У  Alexander D   скрипт работает именно с общим кол-вом патронов, но без патронов в обойме.  Alexander D пишет очень много трейнеров, с большим кол-вом опций и поэтому сильно не вылизывает скрипты, если нету в этом необходимости. Т.е. скрипт  Alexander D  это примерно мой первый скрипт, только с небольшой добавкой 

Не в обойму, а в общее к-во патронов.

newMem5:mov[eax+04],#999  // сюда добавлено общее кол-во патронов//sub [eax+04],esi mov ebx,esi        jmp returnHere5   
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

взято по принципу свой\чужой 

ce98c0af072c99f39956c4472878e395.jpeg

все! Позаимствовал построение кода у Alexander D , внес построение фильтра по принципу свой чужой. Пока 3 уровня прошел без глюков, обновил таблицу изменен код фонарика и но_релоад, но-релоад чуть позже доработаю. 

Бессмертие (health) рабочий наконец то  :-D 

[ENABLE]



aobscanmodule(Health_aob,metro.exe,F3 0F 10 81 08 03 00 00 F3) // should be unique
alloc(newmem,$1000,"metro.exe"+820D69)
label(returnhere)
label(Health)
registersymbol(Health)

newmem:
cmp [rcx+2ec],#1                           // проверяем наш ли это персонаж
jnb returnhere                                // перепрыгиваем если неверно

push [rcx+310]                               // копируем базовое значение жизни
pop [rcx+308]                                 // вытаскиваем уже готовое значение жизни
movss xmm0,[rcx+00000308]        // записываем
jmp returnhere

Health_aob:
Health:
jmp newmem
db 90 90 90
returnhere:

[DISABLE]

Health:
movss xmm0,[rcx+00000308]

unregistersymbol(Health)
dealloc(newmem)

 
 
просьба залить на форум сюда по возможности. спасибо!
Изменено пользователем Alexandro
  • Плюс 2
Ссылка на комментарий
Поделиться на другие сайты

 

взято по принципу свой\чужой 

ce98c0af072c99f39956c4472878e395.jpeg

все! Позаимствовал построение кода у Alexander D , внес построение фильтра по принципу свой чужой. Пока 3 уровня прошел без глюков, обновил таблицу изменен код фонарика и но_релоад, но-релоад чуть позже доработаю. 

Бессмертие (health) рабочий наконец то  :-D 

[ENABLE]

aobscanmodule(Health_aob,metro.exe,F3 0F 10 81 08 03 00 00 F3) // should be unique

alloc(newmem,$1000,"metro.exe"+820D69)

label(returnhere)

label(Health)

registersymbol(Health)

newmem:

cmp [rcx+2ec],#1                           // проверяем наш ли это персонаж

jnb returnhere                                // перепрыгиваем если неверно

push [rcx+310]                               // копируем базовое значение жизни

pop [rcx+308]                                 // вытаскиваем уже готовое значение жизни

movss xmm0,[rcx+00000308]        // записываем

jmp returnhere

Health_aob:

Health:

jmp newmem

db 90 90 90

returnhere:

[DISABLE]

Health:

movss xmm0,[rcx+00000308]

unregistersymbol(Health)

dealloc(newmem)

 
 
просьба залить на форум сюда по возможности. спасибо!

 

 

За работу плюс.

Но убедительно прошу избегать "взаимных" плюсов. Поясняю - пост garik66 за номером 29 ничем примечательным для форума не является. Следовательно, плюс от Alexandro является плюсом за плюс, а не за стоящий пост, что не есть хорошо. И потому я вынужден garik66 в том посте поставить минус для балансировки. Если не хотите, чтобы снова отключил пользователям возможность плюсовать - воздержитесь от подобных "ответных" плюсов.

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

спасибо за плюсы  :-D  смог сам переделать надеюсь правильно  ...


Но убедительно прошу избегать "взаимных" плюсов. 

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


очередной глупый :-D  вопрос: 

 

где тут ошибка ? 

вариант 1

[ENABLE]


//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048,"metro.exe"+2C0A1A)
label(returnhere)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
cmp [rbx+498],#1                               // фильтр на оружие
jnb returnhere                                    // уходим если false
push rcx                                             // резервим rcx
mov rcx,[rbx+00000450]                    // записываем максимальное кол-во патронов
mov [rbx+448],rcx                              // заносим получившееся значение в обоиму
pop rcx                                               // удаляем rcx
mov eax,[rbx+00000448]
jmp returnhere


exit:
jmp returnhere

"metro.exe"+2C0A1A:
jmp newmem
nop
returnhere:




[DISABLE]
//code from here till the end of the code will be used to disable the cheat
"metro.exe"+2C0A1A:
mov eax,[rbx+00000448]
//Alt: db 8B 83 48 04 00 00
dealloc(newmem)

 

вариант 2


//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048,"metro.exe"+2C0A1A)
label(returnhere)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
cmp [rbx+498],1                               // фильтр на оружие
jnb returnhere                                  // уходим если false
push rcxx                                         // резервим rcx
mov rcx,[rbx+00000450]                  // записываем максимальное кол-во патронов
mov [rbx+448],rcx                            // заносим получившееся значение в обоиму
pop rcx                                             // удаляем rcx
mov eax,[rbx+00000448]
jmp returnhere


exit:
jmp returnhere

"metro.exe"+2C0A1A:
jmp newmem
nop
returnhere:




[DISABLE]
//code from here till the end of the code will be used to disable the cheat
"metro.exe"+2C0A1A:
mov eax,[rbx+00000448]
//Alt: db 8B 83 48 04 00 00
dealloc(newmem)

[ENABLE]

 

вариант 3

[ENABLE]

//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048,"metro.exe"+2C0A1A) 
label(returnhere)
label(exit)
 
newmem: //this is allocated memory, you have read,write,execute access
cmp [rbx+498],#1                                             // фильтр на оружие
jnb returnhere                                                  // уходим если false
push [rbx+00000450]                                       // берем значение из 450
pop [rbx+00000448]                                         // и заносим в 448
mov eax,[rbx+00000448]
jmp returnhere
 
 
exit:
jmp returnhere
 
"metro.exe"+2C0A1A:
jmp newmem
nop
returnhere:
 
 
 
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
"metro.exe"+2C0A1A:
mov eax,[rbx+00000448]
//Alt: db 8B 83 48 04 00 00

dealloc(newmem)

 

при анализе структур стало понятно что револьвер и дробовик  единственный кто не обладает значением 1 в смещении 498

 

спрашиваю потому что при выше сделанном фильтре игра УРА не вылетает и О БЕДА максимальное значение патронов записанный в строке 450 не учитывается,  у калаша например в обоиме всегда "1" патрон, у обреза однозарядного "0", а у револьвера 6 как и положено . При чем  без перезарядки у всех кроме дробовика работает как положено(в смысле процесса а не того что мелькает на экране). что это? смещение кода целиком?

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

Вариант 3 самый правильный из 3, если фильтр нашёл верно, он по идее должен работать для всего вида оружия.

Код чуть-чуть подправь:

и ещё label и метку exit - можно убрать, они у тебя лишние.

не ещё одна ошибка, лучше полностью код покажу:

Перепиши как в последнем моём варианте.

 

 

cmp byte ptr [rbx+498],1  // При использовании памяти (а не регистра) в коде лучше jne returnhere            // всегда указывать его размер                                    push [rbx+00000450]       // и 1 - она во всех системах - еденица, поэтому ставить # необязательно   pop [rbx+00000448]                                       mov eax,[rbx+00000448]jmp returnhere 
[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048,"metro.exe"+2C0A1A) label(returnhere)label(exit) // не удалить, а изменить название, если изменишь не забудь изменить везде,             // где я проставил exitnewmem: //this is allocated memory, you have read,write,execute accesscmp byte ptr [rbx+498],1                                             jne exit            // здесь должен быть прыжок на оригинальные инструкции с последующим выходом                                        push [rbx+00000450]                                       pop [rbx+00000448] exit:               // метка оригинальных инструкций                         mov eax,[rbx+00000448]jmp returnhere  //exit:            // удалить обе//jmp returnhere   // строчки "metro.exe"+2C0A1A:jmp newmemnopreturnhere: [DISABLE]//code from here till the end of the code will be used to disable the cheat"metro.exe"+2C0A1A:mov eax,[rbx+00000448]//Alt: db 8B 83 48 04 00 00dealloc(newmem) 
Ссылка на комментарий
Поделиться на другие сайты

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

Вариант 3 самый правильный из 3, если фильтр нашёл верно, он по идее должен работать для всего вида оружия.

Код чуть-чуть подправь:лучше полностью код покажу:

Перепиши как в последнем моём варианте.

правильно я понял ?

[ENABLE]

//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048,"metro.exe"+2C0A1A)
label(returnhere)

 

newmem: //this is allocated memory, you have read,write,execute access

 

 

cmp dword ptr [rbx+498],1
jne returnhere // здесь должен быть прыжок на оригинальные инструкции с последующим выходом
push [rbx+00000450]
pop [rbx+00000448]


"metro.exe"+2C0A1A:
jmp newmem
nop
returnhere:

[DISABLE]
//code from here till the end of the code will be used to disable the cheat
"metro.exe"+2C0A1A:
mov eax,[rbx+00000448]
//Alt: db 8B 83 48 04 00 00
dealloc(newmem)

[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048,"metro.exe"+2C0A1A) label(returnhere)label(exit) // не удалить, а изменить название, если изменишь не забудь изменить везде,             // где я проставил exitnewmem: //this is allocated memory, you have read,write,execute accesscmp byte ptr [rbx+498],1                                             jne exit            // здесь должен быть прыжок на оригинальные инструкции с последующим выходом                                        push [rbx+00000450]                                       pop [rbx+00000448] exit:               // метка оригинальных инструкций                         mov eax,[rbx+00000448]jmp returnhere  //exit:            // удалить обе//jmp returnhere   // строчки "metro.exe"+2C0A1A:jmp newmemnopreturnhere: [DISABLE]//code from here till the end of the code will be used to disable the cheat"metro.exe"+2C0A1A:mov eax,[rbx+00000448]//Alt: db 8B 83 48 04 00 00dealloc(newmem) 
Изменено пользователем Alexandro
Ссылка на комментарий
Поделиться на другие сайты

Не правильно. Сек


Вот так.


У тебя в структуре по смещению 498h значение было 4 байта или байт?


если 4 байта, то cmp dword ptr [rbx+498],#1

 если байт, то cmp byte ptr [rbx+498],1

[ENABLE]alloc(newmem,256,"metro.exe"+2C0A1A) label(returnhere)label(Originalcod)newmem: cmp byte ptr [rbx+498],1                                             jne Originalcod                                                  push [rbx+00000450]                                       pop [rbx+00000448] Originalcod:                                   mov eax,[rbx+00000448]jmp returnhere "metro.exe"+2C0A1A:jmp newmemnopreturnhere: [DISABLE]"metro.exe"+2C0A1A:mov eax,[rbx+00000448]dealloc(newmem)  
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Не правильно. Сек

Вот так.

У тебя в структуре по смещению 498h значение было 4 байта или байт?

если 4 байта, то cmp dword ptr [rbx+498],#1

 если байт, то cmp byte ptr [rbx+498],1

спасибо, попробую. там 4 байта... :)

[ENABLE]alloc(newmem,256,"metro.exe"+2C0A1A) label(returnhere)label(Originalcod)newmem: cmp byte ptr [rbx+498],1                                             jne Originalcod                                                  push [rbx+00000450]                                       pop [rbx+00000448] Originalcod:                                   mov eax,[rbx+00000448]jmp returnhere "metro.exe"+2C0A1A:jmp newmemnopreturnhere: [DISABLE]"metro.exe"+2C0A1A:mov eax,[rbx+00000448]dealloc(newmem)  
Ссылка на комментарий
Поделиться на другие сайты

помогите осознать мы имеем инструкцию mov eax,[rbx+00000448], есть 3 оружия, автомат, хельсинг и револьвер, у них есть обоима, если их через поиск выцеплять и морозить отдельно то все как бы нормально, если делать скрипт на mov eax,[rbx+00000448] которая за них отвечает то происходит вылет, а если отдельно морозить через поиск с отсеиванием то нет, делать фильтр именно на этой инструкции или на инструкции выше? мне эта перезарядка всю плешь проела...

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

помогите осознать мы имеем инструкцию mov eax,[rbx+00000448], есть 3 оружия, автомат, хельсинг и револьвер, у них есть обоима, если их через поиск выцеплять и морозить отдельно то все как бы нормально, если делать скрипт на mov eax,[rbx+00000448] которая за них отвечает то происходит вылет, а если отдельно морозить через поиск с отсеиванием то нет, делать фильтр именно на этой инструкции или на инструкции выше? мне эта перезарядка всю плешь проела...

Посмотри первое видео из этого сообщения внимательно (если понадобится несколько раз).

А то переспрашивать тебя:

а правильно ли ты нашёл инструкцию?

правильно ли нашёл фильтр?

отвечает ли твоя инструкция за все виды оружия?

и т.д., как я понял - это запутывать тебя ещё больше.

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

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

Посмотри первое видео из этого сообщения внимательно (если понадобится несколько раз).

А то переспрашивать тебя:

а правильно ли ты нашёл инструкцию?

правильно ли нашёл фильтр?

отвечает ли твоя инструкция за все виды оружия?

и т.д., как я понял - это запутывать тебя ещё больше.

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

не просто просмотрел а скачал обе части на hdd и просмотрел раз ё10 каждый. Но суть уловил посмотрю еще раз, может  действительно не туда повернул.

не ... так золотуха, вот такой адрес накопал в истоках процесса:

[ENABLE]

aobscanmodule(noreload_aob,metro.exe,B2 48 8B 06 48 8B CE) // should be unique

alloc(newmem,$1000,"metro.exe"+2C0E4E)

label(returnhere)

label(no_reload)

registersymbol(no_reload)

newmem:

push rdi

mov rdi,[rsi+450]

mov [rsi+448],rdi

mov rax,[rsi]

mov rcx,rsi

pop rdi

jmp returnhere

noreload_aob+01:

no_reload:

jmp newmem

nop

returnhere:

registersymbol(noreload_aob)

[DISABLE]

no_reload://"metro.exe"+2C0E4E

mov rax,[rsi]

mov rcx,rsi

unregistersymbol(noreload_aob)

dealloc(newmem)

с ним работает no_reload но теперь однозарядный обрез подвисает после 2ух ( !) выстрелов, зато и с хельсингом работает и не вылетает, порекомендуйте упростить скрипт. спасибо.

 

вышел на него так, на хельсинг на  запись идет 2 адреса:

1) 13FC10008 - 48 89 BE 48040000  - mov [rsi+00000448],rdi взял за основу его вероятное место значения 1FD50BA0 *

 

2) 13FEE0B2F - 44 89 B6 48040000  - mov [rsi+00000448],r14d

 
* в нем нашел все 3 оружия и больше никаких инструкций, пробил его по "найти какие адреса..."
в нем взял за основу mov rax,[rsi] (вот с этим сижу и думаю а ту ли я инструкцию взял ?)
 
есть какие мысли по поводу выбора инструкции и грамотности написания скрипта, принимается любая критика... :)
e51633b04bcd51a37f536858df7ca654.jpeg
 
Ссылка на комментарий
Поделиться на другие сайты

Alexandro мне кажется, что основная проблема в том, что ты пытаешься работать только с одной частью. А нужно с обоими: и с количеством патронов в обойме и с общим количеством патронов.


упростить:


выбора инструкции - ошибки не вижу

newmem:push [rsi+450]pop [rsi+448]mov rax,[rsi]mov rcx,rsijmp returnhere 
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

Alexandro мне кажется, что основная проблема в том, что ты пытаешься работать только с одной частью. А нужно с обоими: и с количеством патронов в обойме и с общим количеством патронов.

упростить:

выбора инструкции - ошибки не вижу

да извини по этому моменту не отписал, кучу способов перепробовал что бы найти общее кол-во патронов обоимы и запаса, и с учетом+1 и без него и либо мне опыта и знания ассемблера не хватает или такой параметр не задействован :)

за подсказку и поправку спс +

 

 

з.ы. уже 14 запоротый сейв ушел :)))

newmem:push [rsi+450]pop [rsi+448]mov rax,[rsi]mov rcx,rsijmp returnhere 
Изменено пользователем Alexandro
Ссылка на комментарий
Поделиться на другие сайты

 но теперь однозарядный обрез подвисает после 2ух ( !) выстрелов - вариант тогда либо как я и говорил работать с обоими частями (патроны в обойме + патроны общие), либо делай плюс 1 патрон приблизительно так:

Но не уверен, что сработает. 


да извини по этому моменту не отписал, кучу способов перепробовал что бы найти общее кол-во патронов обоимы и запаса, и с учетом+1 и без него и либо мне опыта и знания ассемблера не хватает или такой параметр не задействован :)

за подсказку и поправку спс +

 

 

з.ы. уже 14 запоротый сейв ушел :)))

По поиску общего - в игре есть возможность не выстреливать, а выбрасывать патроны - по одному, по несколько? 

push [rsi+450]pop [rsi+448]add dword ptr [rsi+448],1 
Ссылка на комментарий
Поделиться на другие сайты

 но теперь однозарядный обрез подвисает после 2ух ( !) выстрелов - вариант тогда либо как я и говорил работать с обоими частями (патроны в обойме + патроны общие), либо делай плюс 1 патрон приблизительно так

до слез  :lol:  теперь обрез работает а хельсингом вылетает это если c add, а если без как ты указал ранее то работает хельсинг и все остальное оружие кроме обреза

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

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

Попробуй так


до слез  :lol:  теперь обрез работает а хельсингом вылетает это если c add, а если без как ты указал ранее то работает хельсинг и все остальное оружие кроме обреза

Наверное всё-таки придётся искать общее к-во патронов.

Поэтому повторю вопрос, наверное ты не заметил:

По поиску общего - в игре есть возможность не выстреливать, а выбрасывать патроны - по одному, по несколько? 


а по-поводу add - я писал, что не уверен, что сработает.

[ENABLE]aobscan(noreload_aob, B2 48 8B 06 48 8B CE) alloc(newmem,64)label(returnhere)registersymbol(noreload_aob)newmem:push [rsi+450]pop [rsi+448]mov rax,[rsi]mov rcx,rsijmp returnherenoreload_aob:jmp newmemnopreturnhere:[DISABLE]noreload_aob://"metro.exe"+2C0E4Emov rax,[rsi]mov rcx,rsiunregistersymbol(noreload_aob)dealloc(newmem) 
Ссылка на комментарий
Поделиться на другие сайты

 

По поиску общего - в игре есть возможность не выстреливать, а выбрасывать патроны - по одному, по несколько? 

 

 

или выпил или еще чего , не понимаю вопроса, есть возможность подбирать, есть возможность выстреливать, и обмениваться на станциях патронами

все, устал!

пара свежих кодов, саму таблицу пока не обновляю ввиду ее не готовности.

мины

[ENABLE]

//code from here to '[DISABLE]' will be used to enable the cheat

alloc(newmem,2048,"metro.exe"+1EA308)

label(returnhere)

label(originalcode)

label(exit)

newmem: //this is allocated memory, you have read,write,execute access

mov [rcx+0000031C],#5

originalcode:

mov eax,[rcx+0000031C]

exit:

jmp returnhere

"metro.exe"+1EA308:

jmp newmem

nop

returnhere:

[DISABLE]

//code from here till the end of the code will be used to disable the cheat

dealloc(newmem)

"metro.exe"+1EA308:

mov eax,[rcx+0000031C]

//Alt: db 8B 81 1C 03 00 00

 

аптечки

[ENABLE]

//code from here to '[DISABLE]' will be used to enable the cheat

alloc(newmem,2048,"metro.exe"+346C60)

label(returnhere)

label(originalcode)

label(exit)

newmem: //this is allocated memory, you have read,write,execute access

mov [rcx+00000478],0000001F

originalcode:

mov edx,[rcx+00000478]

exit:

jmp returnhere

"metro.exe"+346C60:

jmp newmem

nop

returnhere:

[DISABLE]

//code from here till the end of the code will be used to disable the cheat

dealloc(newmem)

"metro.exe"+346C60:

mov edx,[rcx+00000478]

//Alt: db 8B 91 78 04 00 00

 
и второй вариант но_релоад (на револьвере игра вылетает!)

aobscanmodule(noreload_aob,metro.exe,B2 48 8B 06 48 8B CE) // should be unique

alloc(newmem,$1000,"metro.exe"+2C0E4E)

label(returnhere)

label(no_reload)

registersymbol(no_reload)

newmem:

push [rsi+450]

pop [rsi+448]

mov rax,[rsi]

mov rcx,rsi

jmp returnhere

noreload_aob+01:

no_reload:

jmp newmem

nop

returnhere:

registersymbol(noreload_aob)

[DISABLE]

no_reload://"metro.exe"+2C0E4E

mov rax,[rsi]

mov rcx,rsi

unregistersymbol(noreload_aob)

dealloc(newmem)

[ENABLE]
 
пока забросил это дело нужен моральный отдых ))
Изменено пользователем Alexandro
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

можно ли объеденить 3 инструкции в одну если относятся к разным адресам exe?

эту (ножи бомбы) :

[ENABLE]

//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048,"metro.exe"+1EA318)
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
mov [rcx+000006EC],00000005

originalcode:
mov eax,[rcx+000006EC]

exit:
jmp returnhere

"metro.exe"+1EA318:
jmp newmem
nop
returnhere:




[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"metro.exe"+1EA318:
mov eax,[rcx+000006EC]
//Alt: db 8B 81 EC 06 00 00

и эту (мины):

[ENABLE]

//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048,"metro.exe"+1EA308)
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
mov [rcx+0000031C],#5

originalcode:
mov eax,[rcx+0000031C]

exit:
jmp returnhere

"metro.exe"+1EA308:
jmp newmem
nop
returnhere:




[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"metro.exe"+1EA308:
mov eax,[rcx+0000031C]
//Alt: db 8B 81 1C 03 00 00

и вот эту :)  (аптечки):

[ENABLE]

//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048,"metro.exe"+346C60)
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
mov [rcx+00000478],0000001F

originalcode:
mov edx,[rcx+00000478]

exit:
jmp returnhere

"metro.exe"+346C60:
jmp newmem
nop
returnhere:




[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
"metro.exe"+346C60:
mov edx,[rcx+00000478]
//Alt: db 8B 91 78 04 00 00

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

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

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

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