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

[Delphi]Создание трейнера для DMA игры


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

РАЗ

ДВА

Поиском по форуму воспользоваться, и в тематические разделы заглянуть религия не позволила, или лень? И да, небольшой оффтоп: не понял сути жалобы, поданной через одноименную кнопку.

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

РАЗ

ДВА

Поиском по форуму воспользоваться, и в тематические разделы заглянуть религия не позволила, или лень? И да, небольшой оффтоп: не понял сути жалобы, поданной через одноименную кнопку.

По первой ссылке... довольно странный код...

Я думал запись значение в адрес, сообственно будет проходить через адрес+массив из офсетов(типо 5745646+56+2a+35)

А тут используются, какие-то байты...


ProcessName='PlantsVsZombies.exe';//Процесс Игры
Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт
SignatyreOn: array[0..3] of Byte = ($83,$47,$24,$67);//Байты для записи в процесс игры

SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры
[size=4]

Можно какую инфу по работе с байтами найти? или байты и есть офсеты?

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

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

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

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

Полностью согласен )) геморой ))

Юзай Delphi AOBScan что вы выкладивал или ищи в интернете !!

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

Полностью согласен )) геморой ))

Юзай Delphi AOBScan что вы выкладивал или ищи в интернете !!

Попробую заняться этим вопросом, если будут проблемы/вопросы/успехи буду писать сюда.

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

Я тебе могу даже подкинуть парочку тем по которым я писал свой сканер сигнатур

http://www.cyberforum.ru/delphi-beginners/thread520030.html

http://cheaton.ru/f30/poisk-signatur-bazovyh-adresov-dlya-dayz-8343/

http://www.cyberforum.ru/delphi-beginners/thread1068560.html

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

Я тебе могу даже подкинуть парочку тем по которым я писал свой сканер сигнатур

http://www.cyberforu...read520030.html

http://cheaton.ru/f3...dlya-dayz-8343/

http://www.cyberforu...ead1068560.html

Как то все страшно) Есть на эту тему уроки в видео-формате?

Через "байты" не оптимальнее работать или я путаю понятия?

Сигнатура это вроде бы работа с офсетами... :sleep:

Во всяком случае, мне нужен как то в кратце понять как появился этот код


ProcessName='PlantsVsZombies.exe';//Процесс Игры
Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт
SignatyreOn: array[0..3] of Byte = ($83,$47,$24,$67);//Байты для записи в процесс игры
SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры

Откуда взялись?

SignatyreOn: array[0..3] of Byte = ($83,$47,$24,$67);//Байты для записи в процесс игры

SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры

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

Как то все страшно) Есть на эту тему уроки в видео-формате?

Через "байты" не оптимальнее работать или я путаю понятия?

Сигнатура это вроде бы работа с офсетами... :sleep:

Во всяком случае, мне нужен как то в кратце понять как появился этот код


ProcessName='PlantsVsZombies.exe';//Процесс Игры
Adress = $0048B35C ; //Адрес по которому будет производиться запись сигнатуры байт
SignatyreOn: array[0..3] of Byte = ($83,$47,$24,$67);//Байты для записи в процесс игры
SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры

Откуда взялись?

SignatyreOn: array[0..3] of Byte = ($83,$47,$24,$67);//Байты для записи в процесс игры

SignatyreOFF: array[0..3] of Byte = ($83,$47,$24,$01);//Байты для записи в процесс игры

Сигнатура это и есть байты , а точнее цепочка байт по которым программу ищет совпадения в процессе !

Взялись у меня с головы ))

можешь как хочешь назвать ))

fire32222.png а теперь подробней : fire32222.png

Next.pngProcessName - название процесса

Next.pngAdress -а адрес по которому будет происходить запись

Next.pngSignatyreOn - назвал так потому что отвечает за активацию левых байт (т.д 90 90 90 90 и так далие)

Next.pngSignatyreOFF - назвал так потому что отвечает за де активацию (восстановление первоначальных байт )

Next.pngarray[0..3] of Byte - 0..3 длинна наших байт ($83,$47,$24,$01) или можно сделать так array[1..4]

Next.png$83,$47,$24,$01 - наши байты которые будет записывать по адресу

думаю все понятно показал и написал ))

http://forum.gamehac...81%D1%81%D0%B5/

вот смотри тута )) правда код не мой !! ну в теме есть мои модификации

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

Сигнатура это и есть байты , а точнее цепочка байт по которым программу ищет совпадения в процессе !

Взялись у меня с головы ))

можешь как хочешь назвать ))

fire32222.png а теперь подробней : fire32222.png

Next.pngProcessName - название процесса

Next.pngAdress -а адрес по которому будет происходить запись

Next.pngSignatyreOn - назвал так потому что отвечает за активацию левых байт (т.д 90 90 90 90 и так далие)

Next.pngSignatyreOFF - назвал так потому что отвечает за де активацию (восстановление первоначальных байт )

Next.pngarray[0..3] of Byte - 0..3 длинна наших байт ($83,$47,$24,$01) или можно сделать так array[1..4]

Next.png$83,$47,$24,$01 - наши байты которые будет записывать по адресу

думаю все понятно показал и написал ))

http://forum.gamehac...81%D1%81%D0%B5/

вот смотри тута )) правда код не мой !! ну в теме есть мои модификации

Я наверное даун... :-D

Я не могу понять как работать/находить эти байты... я никак не могу выбросить из головы офсеты..

Если тебе не очень трудно, покажи на примере каком нибудь поиск... :unsure:

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

Это, на самом деле, весьма просто:

1. Находишь адрес нужного параметра (жизни, здоровье, патроны и тп) обычным поиском

2. Ставишь бряк на этот адрес (правой кнопкой в таблице СЕ - find out what accesses to this address)

3. Выделяешь найденную инструкцию в списке и нажимаешь Show Disassembler.

4. В появившемся окне отладчика будет выделена ассемблерная инструкция, а слева от нее будут байты, которые ей соответствуют. Это они и есть.

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

Это, на самом деле, весьма просто:

1. Находишь адрес нужного параметра (жизни, здоровье, патроны и тп) обычным поиском

2. Ставишь бряк на этот адрес (правой кнопкой в таблице СЕ - find out what accesses to this address)

3. Выделяешь найденную инструкцию в списке и нажимаешь Show Disassembler.

4. В появившемся окне отладчика будет выделена ассемблерная инструкция, а слева от нее будут байты, которые ей соответствуют. Это они и есть.

Если это так просто... почему раньше пользовались оффсетами?

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

Раньше, как правило, инструкции располагались прямо в исполняемом модуле, и никогда не меняли своего адреса. Тогда можно было использовать смещение от базового адреса модуля до инструкции. Далее, еще оффсеты применялись при использовании указателей. Сейчас же зачастую проще выйти на инструкцию, чем реверсить до статичного указателя. Впрочем, бывают случаи, когда проще найти цепочку указателей, чем анализировать километровую структуру на наличие ID игрока. Все зависит от каждой конкретной игры, на самом деле. И, как правило, выбор методики целиком зависит от ломаемой игры и затрат времени на тот или иной способ.

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

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

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

Раньше, как правило, инструкции располагались прямо в исполняемом модуле, и никогда не меняли своего адреса. Тогда можно было использовать смещение от базового адреса модуля до инструкции. Далее, еще оффсеты применялись при использовании указателей. Сейчас же зачастую проще выйти на инструкцию, чем реверсить до статичного указателя. Впрочем, бывают случаи, когда проще найти цепочку указателей, чем анализировать километровую структуру на наличие ID игрока. Все зависит от каждой конкретной игры, на самом деле. И, как правило, выбор методики целиком зависит от ломаемой игры и затрат времени на тот или иной способ.

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

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

В общем, в долгих поисках... я ничего так и не нашел, даже и не понял...

Делал так:

1. Открыл GTA:SA

2. Открыл CE 6.3

3. Нашел адрес денег (gta_sa.exe+77CE50) похоже он DMA(так как зеленый).

П.С. Может нельзя найты байты в неDMA играх? Или как? Если в гта так нельзя, приведите другой пример.

4. Изменил количество денег, адрес оказался рабочий...

Теперь самое главное!!! Где найти байты и от какого адреса их читать? Если я правильно понял...

5. Я жму на адрес и прошу открыть регион памяти... но там так все страшно...

a69b1e7d2813.png

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

Спасибо большое за видео(плюсик кинуть не могу - пишет лимит)...

Но, реально большое спасибо, теперь хоть как нибудь смогу разобраться!

Единственное, я не понял зачем ставить ?? вместо байт? Кто расскажет суть?

Когда я буду писать массив в паскале, мне что писать примеру массив байт {5a, 3a, ??, ??, 2d} заменить на {3a, 5a, ??, ??, 2d }?

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

Спасибо большое за видео(плюсик кинуть не могу - пишет лимит)...

Но, реально большое спасибо, теперь хоть как нибудь смогу разобраться!

Единственное, я не понял зачем ставить ?? вместо байт? Кто расскажет суть?

Когда я буду писать массив в паскале, мне что писать примеру массив байт {5a, 3a, ??, ??, 2d} заменить на {3a, 5a, ??, ??, 2d }?

В некоторых играх сигнатура может изменяться, т.е. байты в сигнатуре поэтому прописываются знаки вопроса

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

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

В некоторых играх сигнатура может изменяться, т.е. байты в сигнатуре поэтому прописываются знаки вопроса

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

А все таки как записывать такую структуру с вопросиками в делфи?

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

А все таки как записывать такую структуру с вопросиками в делфи?

здесь так и писать

http://forum.gamehac...81%D1%81%D0%B5/

а вот здесь просто замени ?? на FF и когда будешь делать маску просто став 1 ?

http://forum.gamehacklab.ru/topic/2615-%D1%81%D0%BA%D0%B0%D0%BD%D0%B5%D1%80-%D1%81%D0%B8%D0%B3%D0%BD%D0%B0%D1%82%D1%83%D1%80-%D0%B4%D0%BB%D1%8F-delphi-by-arxlex/

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

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

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

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