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

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

Как проверить какой из указателей правильный.

Ну во-первых это утверждение или вопрос?

Во-вторых, если это всё же вопрос, то тогда отвечу:

Для начала найди указатели, потом перезапускай игру и отсеивай их, и так несколько раз (раза 3-4) будет достаточно.

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

Кстати вот твоя же тема - пост кенга

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

Попробую оттолкнуться от твоих же скриншотов. Итак:

1. Ты нашёл адрес здоровья своего игрока - 0x3590632С.

2. Поставил бряк, получил инструкцию:

MOV [EDI+10],EAX

Что инструкция делает? Она просто кладёт в адрес здоровья ([EDI+10]) новое его значение, хранящееся в EAX. Но фишка вся в том, что при этом в EDI может быть много разных значений, т.е. это структура:


struct Player
{
string Name; //Имя, например, "keng"
float Health; //Здоровье, например, 100
}

Вот и получается, считай, [Player+10], а 0x10 - смещение до поля Health в структуре. Если взять найденный тобой адрес, то получается:


Health = 0x3590632С;
Player = 0x3590632С - 0x10 = 0x3590631С;

Вот, собственно, и выходит, что когда у тебя в регистре EDI лежит 0x3590631С, это значит что пытаются ранить твоего игрока. Пишешь скрипт:


CMP EDI,0x3590631С
JNE back
MOV [EDI+10],EAX
JMP back

Что он делает, построчно:

CMP EDI,0x3590631C

Зная, что в EDI у нас лежит адрес начала структуры (как нашего игрока, так и врагов), а здоровье находится по смещению 0x10 от этого начала ([EDI+10]), то мы сравниваем (CMP = compare = англ. сравнить) содержимое регистра EDI и адрес начала структуры нашего игрока.

После операции сравнения в процессоре устанавливается определённый флаг, сигнализирующий о том, равны ли (или нет) значения.

JNE back

JNE = jump if not equal = англ. прыжок, если не равно - одна из команд условного перехода. Прыжок выполняется тогда, когда последняя операция сравнения дала результат "не равно". В противном случае, процессор пропускает выполнение этой команды и послушно топает выполнять следующую.

MOV [EDI+10],EAX

MOV = move = англ. переместить - команда копирования из A в Б ("mov Б,А", "mov куда,что"). Банально и просто копирует значение здоровья, которое хранится в EAX, в поле структуры игрока, начало которой хранится в EDI. Получается примерно так:

Player.Health = EAX;

Где Player - структура (EDI), Health - поле этой структуры, хранящее здоровье ([EDI+10]). Что у нас остаётся?

JMP back

JMP = jump = англ. прыжок - команда безусловного перехода. Натыкаемся - управление переходит на адрес, указанный после команды. Кстати, back - это адрес команды игрового кода, следующей сразу после MOV [EDI+10],EAX. Т.е. это инъекция получается.

Дык вот, к чему я это всё. Как тебе правильно подсказал ARM4ND0 в [17-м] посте, тебе надо найти разницу между твоей структурой и вражеской. Что-то типа:


struct Player
{
int TeamID; //Идентификатор принадлежности к той или иной команде игроков
string Name;
float Health;
}

Найти такой идентификатор можно всегда, т.к. сама игра всегда знает, кто в кого стреляет и кто какой команде принадлежит. Раз это знает игра - это можно выяснить. Только вот в скрипте придётся сравнивать не EDI с адресом структуры игрока (это вообще не совсем правильно, т.к. игра может использовать DMA и адрес будет каждый раз новый), а этот самый id.

Допустим, что id в структуре находится по смещению 0x14 и наш игрок имеет id = 5, а враги - id = 7, тогда вместо:

CMP [EDI+10],0x3590632С

Надо будет сделать:

CMP [EDI+14],5

Т.е. на Си это выглядело бы примерно так:


if (SomePlayer.ID == 5) { //Если id в структуре = 5 (т.е. это наш игрок)
return; //Просто выходим
} else { //Иначе
DealDamage(SomePlayer); //Наносим урон
}
return; //И только после этого выходим

PS: Можно писать как:

CMP [EDI+10],0x3590632С

Так и:

CMP EDI,0x3590631С

Почему именно - это будет вопросом на самостоятельное изучение.

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

Если у меня в battlefield 2 есть мой герой и мои юниты и враги, то присваивать №1 надо только врагам или юнитам тоже.

Ленивей тебя я ещё никого не видел на этом форуме.

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

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

Если у меня в battlefield 2 есть мой герой и мои юниты и враги, то присваивать №1 надо только врагам или юнитам тоже.

Так в том вся и прелесть!

В игре есть функция DealDamage() - НанестиУрон(), аргументом которой служит структура "Player" - "Игрок". Вот как оно выглядит:


struct Player //Структура "Игрок"
{
int Team; //Поле, хранящее команду игрока. 0 для союзников, 1 для врагов, к примеру
float Health; //Поле, хранящее текущее здоровье игрока
string Name; //Поле, хранящее имя игрока
}


void DealDamage(Player p) { //Функция нанесения урона. В аргументах принимает структуру Player
if(p.Health > 0) { //Если здоровье игрока больше нуля
p.Health = p.Health - 10; //Вычитаем из здоровья десяточку
}
}

Теперь представь, что есть игровое поле и две команды - наша и не наша, по два игрока в каждой:


Команда 0: Игрок А, Игрок Б
Команда 1: Игрок В, Игрок Г

А вот, какие у этих игроков будут структуры:


Player
{
Team = 0;
Health = 100;
Name = "Vasya"
}


Player
{
Team = 0;
Health = 100;
Name = "Petya"
}


Player
{
Team = 1;
Health = 100;
Name = "Grisha"
}


Player
{
Team = 1;
Health = 100;
Name = "Dima"
}

Теперь представим, что Дима стреляет в Васю. Вызывается функция:

DealDamage(p);

Здесь p - адрес структуры Васи, потому что в него стреляют и ему наносится урон.

По логике, наши от врагов отличаются только одним полем - полем Team. Вот мы берём и пишем скрипт:


HackedDealDamage(Player p) {
if(p.Health > 0) { //Если здоровье больше нуля
if(p.Team != 0) { //И ранят игрока НЕ нашей команды (наша - 0)
p.Health = p.Health - 10; //Наносим урон!
}
}
}

Вот, типа того. Функции на самом деле до лампочки, кто в кого стреляет, а мы просто берём и слегка её меняем, заставляя ранить только тех, кто не в нашей команде. Сравнивать же можно что угодно - такое вот поле Team, или какой-нибудь уникальный идентификатор игрока (ID), или же вообще адрес его здоровья (через указатель). Т.е. игра ВСЕГДА отличает игрока, его союзников и врагов - то есть ВСЕГДА будет какой-то уникальный признак, который и надо искать в структуре. Надеюсь, начинает проясняться.

Ramil, главное, не надо сидеть и тыкать пальцем в небо, надеясь что оно вдруг возьмёт и заработает - лучше приводи конкретные примеры того, что именно тебе не ясно. Вопрос вида "Как мне написать скрипт?" слишком широк и абстрактен, чтобы так вот взять и ответить - не бывает универсальных решений, надо рассматривать конкретику.

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

Нет смысла объяснять, если он забывает про свои же темы и не хочет читать.

Есть отличная от нуля вероятность в будущем наткнуться на эту же тему и перечитывать, перечитывать, перечитывать!!!!11111

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

Есть отличная от нуля вероятность в будущем наткнуться на эту же тему и перечитывать, перечитывать, перечитывать!!!!11111

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

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

Здравствуйте. Я на счёт идентификатор игрока, игра Hitman - Контракты. Взламываю патроны. Я всё сделал по статье, и у меня вот что получилось в окне "Анализ памяти"

http://s2.ipicture.r...25/3S7mTF2r.jpg

инструкция 00477CD0 - 89 8E 83000000 - mov [esi+00000083],ecx. Как правильно узнать угадать ID.

В анализаторе структур (при открытом отладчике СЕ) жмёш на адрессе пробел в показываемой памяти (в отладчике)

переходиш на свой адресс и тыкаеш на нём определить проскакивающие адресса и если всё сработает(а если нет идёш к следующему адрессу ) то ты всё сам увидеш(допустим есть ГГ его напарник и соперники если ГГ и напарник пренадлежит комманде с ID=1 а соперники имеют ID=0 то увидеш что то типа этого адресс1=1(наш ГГ) адресс2=1(его напарник) адресс3=0(бот) адресс4=0(бот) )

А дальше делаеш сравнение в скрипте типа

cmp [адресс+смещение],1

jne на оригинальный код если не совпадает

и будет тебе счастье

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

мб..... регистры всегда смотрю в первую очередь а потом уже остальное

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

ковырял эту игру давно какая версия не помню но вроде 1.0

искал я искал ид игрока так и не нашёл

забил на ид нашёл указатель

но там как то странно с указателем один чисто на самого ГГ а другой на ГГ и на технику в которую ты залезеш

морозил адресс на 10 000 и гонял ботов до Канадской граници))))))))))

Если можешь идентификатор найти - делай через него, если нет - через указатель. Это дело вкуса и умений исключительно.

А всётаки я считаю что найти ID и юзать его самого лучше чем указатель т.к.

при использование ID актуален аобскан а при указателе врятли я думаю

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

А всётаки я считаю что найти ID и юзать его самого лучше чем указатель т.к.

при использование ID актуален аобскан а при указателе врятли я думаю

Аобскан актуален для поиска функции, при чём тут id или указатели? Указатель не всегда надёжен тем, что в некоторых ситуациях он не работает, а вот id работает хотя бы в рамках текущего патча игры.

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

Аобскан актуален для поиска функции, при чём тут id или указатели? Указатель не всегда надёжен тем, что в некоторых ситуациях он не работает, а вот id работает хотя бы в рамках текущего патча игры.

Не чувак ты меня походу не понял я имел ввиду что после патча возможно ИД и его расположение в структуре останутся прежними а указатель 100500 процентов поменяется

ВОТ

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

Не чувак ты меня походу не понял я имел ввиду что после патча возможно ИД и его расположение в структуре останутся прежними а указатель 100500 процентов поменяется

ВОТ

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

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

здравствуйте геймхакеры. Я сделал многоуровневый указатель и скрипт в игре по статье ZOCKIR. Не знаю когда играю герой не умирает от пуль, другие умирают. Гранатой может убить. Вылетает игра.

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

здравствуйте геймхакеры. Я сделал многоуровневый указатель и скрипт в игре по статье ZOCKIR. Не знаю когда играю герой не умирает от пуль, другие умирают. Гранатой может убить. Вылетает игра.

Ну и чего хочешь ?)

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

Или может быть я не правильно нашёл указатель, или не правильно написал скрипт, я не знаю.

Вот мой скрипт


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

newmem:
originalcode:
fld dword ptr [esi+10]
mov [[[[BF2.exe+00551080]+0]+38]+10],(float)100000
fcomp dword ptr [ecx+00000134]
jmp returnhere

"BF2.exe"+2095D8:
jmp newmem
nop
nop
nop
nop
returnhere:

[DISABLE]
"BF2.exe"+2095D8:
fld dword ptr [esi+10]
fcomp dword ptr [ecx+00000134]
dealloc(newmem)
//Alt: db D9 46 10 D8 99 34 01 00 00

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

Откуда мы знаем валидный у тебя указатель или нет ? И почему-бы mov [[[[bF2.exe+00551080]+0]+38]+10],(float)100000 не писать под newmem.

PS: Ты уже год как ломаешь BF2 и находишь указатель...

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

Ну ладно тогда уж я сам помучаюсь, я и таки ночами не сплю. Пока не сделаю бессмертие, не успокоюсь. Трейнеры для други игр буду делать потом когда дисковод заработает. Тогда пока отдохните от меня, пока не сделаю бессмертие, Вы смеялись надо мной, но я не обижаюсь на вас, вы правильно говорили что я для battlefield 2 сделаю через 5 лет, но я сделаю бессмертие. Я начну усердно работать, пока не научусь всему.

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

Ну ладно тогда уж я сам помучаюсь, я и таки ночами не сплю. Пока не сделаю бессмертие, не успокоюсь. Трейнеры для други игр буду делать потом когда дисковод заработает. Тогда пока отдохните от меня, пока не сделаю бессмертие, Вы смеялись надо мной, но я не обижаюсь на вас, вы правильно говорили что я для battlefield 2 сделаю через 5 лет, но я сделаю бессмертие. Я начну усердно работать, пока не научусь всему.

Ты можешь задавать любые вопросы, только не те, которые ты уже задавал в своих же темах. Так держать! :lol:

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

Ну ладно тогда уж я сам помучаюсь, я и таки ночами не сплю. Пока не сделаю бессмертие, не успокоюсь. Трейнеры для други игр буду делать потом когда дисковод заработает. Тогда пока отдохните от меня, пока не сделаю бессмертие, Вы смеялись надо мной, но я не обижаюсь на вас, вы правильно говорили что я для battlefield 2 сделаю через 5 лет, но я сделаю бессмертие. Я начну усердно работать, пока не научусь всему.

Мы тебе всё объяснили, что и как делается, если ты отказываешься воспринимать информацию, то помочь тебе не представляется возможным.

P.S. Мне твой пост напомнил "Виталю" (см. ролик на YouTube).

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

Или может быть я не правильно нашёл указатель, или не правильно написал скрипт, я не знаю.

Дык а как мы тебе это проверим-то? Если у тебя работает - значит всё ок.

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

Я сегодня играл в battlefield 2 и ни разу не умирал, ни одно оружие не могло убить меня танк гранаты взравчатка пули и тд. Вылет был только тогда я переходил на другой уровень или ставил заморозку билетов 200 на 200. А так всю миссию без вылета. До этого играл в версию 1.5 трейнером ДЕВАЙТЕД при поподании танка мог умереть, ну короче когда мочили ножом автоматом и гранатой написано было что игрок убит, но игрок жив. Спасибо ARM4ND0 что он сказал надо писать под newmem, я это сделал, и почти получилось. Спасибо вам всем за помощь.

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

Я сегодня играл в battlefield 2 и ни разу не умирал, ни одно оружие не могло убить меня танк гранаты взравчатка пули и тд. Вылет был только тогда я переходил на другой уровень или ставил заморозку билетов 200 на 200. А так всю миссию без вылета. До этого играл в версию 1.5 трейнером ДЕВАЙТЕД при поподании танка мог умереть, ну короче когда мочили ножом автоматом и гранатой написано было что игрок убит, но игрок жив. Спасибо ARM4ND0 что он сказал надо писать под newmem, я это сделал, и почти получилось. Спасибо вам всем за помощь.

Молодец! Здорово, что всё получилось.

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

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

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

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