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

Как написать скрипт, через структуру игрока?


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

приблизительно так:

push rbx // сохраняем регистр на всякий случайmov rbx,[rdx+18] // считываем из основной структуры указатель на внутреннююmov rbx,[rbx+28] // считываем из внутренней стркутуры максимальное количество патроновmov [rdx+8],rbx // присваиваем текущему значению максимальноеpop rbx // восстанавливаем регистр
Ссылка на комментарий
Поделиться на другие сайты

Привет! Вполне возможно. Берешь свободный регистр и идешь читать справку об инструкции lea. Алгоритм будет примерно такой (допустим, мы инжектимся в инструкцию, отнимающую патроны):

 

0. Сохраняем регистр на стеке

1. Загружаем в него нашу структуру+0х18 - указатель на "подструктуру"

2. Загружаем в него же его значение + 0х28 - максимальное значение патронов

3. Сравниваем его с текущим значением

4. Если равно, то

5. Возвращаем регистр из стека на место

6. Выходим

7. Иначе делаем с патронами то, что нам нужно (например, увеличиваем)

8. Возвращаем регистр из стека на место

9. Выходим.

 

push

lea

mov

cmp

je

pop

ret

add

pop

ret

 

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

 

UPD: А, я плохо прочитал. Да, лучше использовать тупо mov, но про lea тоже советую почитать.

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

Поправил скрипт в своем предыдущем посте. Хотя в данном конкретном случае можно сделать еще проще

mov rax,[rdx+18]mov rax,[rax+28]mov [rdx+8],rax

Поскольку ты используешь инструкцию, которая записывает подготовленное число патронов в текущее значение (в памяти), то можно сразу в регистр считать нужное значение из внутренней стркутуры. Опять же, именно такой подход актуален только для пишушей инстркуции. Для читающей инструкции правильнее будет использовать скрипт подобный тому, что я выше привел.

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

Xipho, у тебя в посте № 2 опечатка, поправь, а то новички запутаются:

нужно не 

mov rbx,[rdx+28] // считываем из внутренней структуры максимальное количество патронов

а

mov rbx,[rbx+28] // считываем из внутренней структуры максимальное количество патронов
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

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

 

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

 

А если надо делать one hit kill, то вытащить поинтер на структуру из инструкции работающей с гуи и сравнивать по нему. Не придется искать фильтров в структурах. Хотя, конечно, это интересно, но не факт, что отличия между структурами могут быть фильтрами всегда и везде. Вариант с гуи имеет большую вероятность на работоспособность.

 

Еще один момент. В разных версия игр смещения от начала структуры могут меняться и их использовать в качестве фильтра из другой игры нельзя будет. На моей памяти несколько было таких игр.

 

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

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

Дело в том, что инструкция с адреса при установке бряка показывает до 1000 адресов. 

А если отталкиваться от поинтера та-же беда.

С фильтрами там если только от поинтера отталкиваться

 

Сейчас попробую выше перечисленные варианты...


Не кодированное выяснил

Но в написании скрипта всеравно проблема пока

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

у тебя в посте № 2 опечатка,

Поправил, спасибо )

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

Это называется Staple Intersection, и у меня будет урок о ней обязательно ) Да, это самый действенный способ, но код анализировать приходится больше и дольше.

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

Зато когда нет фильтра в обычном виде, будет лучше использовать Staple Intersection, и хрен с ним что придётся много кода анализировать)) Я к стате очень жду по этой теме урок, а то мне это было очень нужно несколько раз, а как это делается я не знаю.


offtopic.gif

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

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

Staple intersection нужно делать очень аккуратно и правильно, иначе работать оно будет крайне нестабильно. Самый надежный вариант - это отреверсить код и делать статические инъекции (без сигнатур и без динамического выделения памяти под инъекцию) для каждой версии игры. Лучше всего, конечно, для официальной. Большинство людей ныне на это забивают, вот и выпускают некачественные релизы.

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

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

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

Зато когда нет фильтра в обычном виде, будет лучше использовать Staple Intersection, и хрен с ним что придётся много кода анализировать)) Я к стате очень жду по этой теме урок, а то мне это было очень нужно несколько раз, а как это делается я не знаю.

offtopic.gif

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

 

  

Ну, вот пример взятия поинтера ecx из инструкции, которая работает с нашим персом

// Здесь сохраняем ecx из инструкции чтения, который работает со скоростью постройки нашего персонажа, предположительно из гуи (когда в игру заходим, но ни че не делаем там. Инструкция часто обращаемая)00400314 8B4124 mov eax,[ecx+0x24] jump from staple intersection, original code00400317 890D70034000 mov [0x400370],ecx move staple intersection pointer to 400370 to be compare later. our code0040031d C3 retn get back to call opcode
Вот сравнение по поинтеру

// Здесь код работает с нашими строениями и с чужими. Сравнием по 0x400370, где 400370 некоторый свободный адрес (но лучше из выделенной памяти брать)0040031e 393570034000 cmp [0x400370],esi compare write pointer with our staple intersection pointer00400324 740D je short 0x00400333 if equal go to 40033300400326 8B5624 mov edx,[esi+0x24] if not equal, recreate original code00400329 03D0 add edx,eax recreate original code0040032b 895624 mov [esi+0x24],edx recreate original code0040032e E9578B0B00 jmp 0x004B8E8A jump back to normal next write opcode00400333 BA36000000 mov edx,0x36 move 36 (hex) = 54 (dec) into edx00400338 EBF1 jmp short 0x0040032Bgo to 40032B
Это и есть staple intersection

 

 

Мы некоторый регистр1 (ecx) из 00400314 8B4124 mov eax,[ecx+0x24], с которым работает только наш персонаж, сравниваем

с некоторым регистром2 (esi) из 00400326 8B5624 mov edx,[esi+0x24], с которым работают как боты так и наш персонаж.

 

Т.е. вытащили поинтер на структуру из инструкции ГУИ и сравниваем по нему...

Логичный вопрос, почему бы в инструкцию 00400314 8B4124 mov eax,[ecx+0x24] сразу не делать чит, не вытаскивая никаких поинтеров. Но автор, наверно, школьник и сконцентрировался на создании бесконечного строения через сравнение поинтера в инструкции, которая используется как ботами, так и своим игроком.

 

Источник : статья из темы на форуме CE

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

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

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

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

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

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