Ramil Опубликовано 29 июля, 2012 Автор Поделиться Опубликовано 29 июля, 2012 Как проверить какой из указателей правильный. Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 29 июля, 2012 Поделиться Опубликовано 29 июля, 2012 Как проверить какой из указателей правильный.Ну во-первых это утверждение или вопрос?Во-вторых, если это всё же вопрос, то тогда отвечу:Для начала найди указатели, потом перезапускай игру и отсеивай их, и так несколько раз (раза 3-4) будет достаточно.И я думаю не нужно напоминать тебе использовать Google и поиск по форуму, ты самый ленивый человек, которого я когда-либо видел на этом форуме.Кстати вот твоя же тема - пост кенга Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 30 июля, 2012 Поделиться Опубликовано 30 июля, 2012 Попробую оттолкнуться от твоих же скриншотов. Итак: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 backMOV [EDI+10],EAXJMP backЧто он делает, построчно:CMP EDI,0x3590631CЗная, что в EDI у нас лежит адрес начала структуры (как нашего игрока, так и врагов), а здоровье находится по смещению 0x10 от этого начала ([EDI+10]), то мы сравниваем (CMP = compare = англ. сравнить) содержимое регистра EDI и адрес начала структуры нашего игрока.После операции сравнения в процессоре устанавливается определённый флаг, сигнализирующий о том, равны ли (или нет) значения.JNE backJNE = jump if not equal = англ. прыжок, если не равно - одна из команд условного перехода. Прыжок выполняется тогда, когда последняя операция сравнения дала результат "не равно". В противном случае, процессор пропускает выполнение этой команды и послушно топает выполнять следующую.MOV [EDI+10],EAXMOV = move = англ. переместить - команда копирования из A в Б ("mov Б,А", "mov куда,что"). Банально и просто копирует значение здоровья, которое хранится в EAX, в поле структуры игрока, начало которой хранится в EDI. Получается примерно так:Player.Health = EAX;Где Player - структура (EDI), Health - поле этой структуры, хранящее здоровье ([EDI+10]). Что у нас остаётся?JMP backJMP = 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СПочему именно - это будет вопросом на самостоятельное изучение. Ссылка на комментарий Поделиться на другие сайты Поделиться
Ramil Опубликовано 30 июля, 2012 Автор Поделиться Опубликовано 30 июля, 2012 Если у меня в battlefield 2 есть мой герой и мои юниты и враги, то присваивать №1 надо только врагам или юнитам тоже. Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 30 июля, 2012 Поделиться Опубликовано 30 июля, 2012 Если у меня в battlefield 2 есть мой герой и мои юниты и враги, то присваивать №1 надо только врагам или юнитам тоже.Ленивей тебя я ещё никого не видел на этом форуме.Я тебе скинул твой старый топик, рассказал что и как сделать, тебе кенг рассказал что и как сделать, я дал тебе видео урок, и ты всё равно задаёшь глупые вопросы, вместо того, чтобы просто сделать. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 30 июля, 2012 Поделиться Опубликовано 30 июля, 2012 Если у меня в 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 30 июля, 2012 Поделиться Опубликовано 30 июля, 2012 Нет смысла объяснять, если он забывает про свои же темы и не хочет читать. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 30 июля, 2012 Поделиться Опубликовано 30 июля, 2012 Нет смысла объяснять, если он забывает про свои же темы и не хочет читать.Есть отличная от нуля вероятность в будущем наткнуться на эту же тему и перечитывать, перечитывать, перечитывать!!!!11111 Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 30 июля, 2012 Поделиться Опубликовано 30 июля, 2012 Есть отличная от нуля вероятность в будущем наткнуться на эту же тему и перечитывать, перечитывать, перечитывать!!!!11111По-моему Рамиль нам достаточно даёт понять, то что он хочет, чтобы мы за него проделали эту работу, у него достаточно материалов для того, чтобы воплотить задуманное наяву, но он продолжает задавать вопросы и ничего не делает. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 30 июля, 2012 Поделиться Опубликовано 30 июля, 2012 Ребят, давайте-ка без сторонних обсуждений, ок? Ссылка на комментарий Поделиться на другие сайты Поделиться
JIeXA Опубликовано 1 августа, 2012 Поделиться Опубликовано 1 августа, 2012 Здравствуйте. Я на счёт идентификатор игрока, игра 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 [адресс+смещение],1jne на оригинальный код если не совпадаети будет тебе счастьеДополню предыдущий пост, если не найти разницу в структурах между игроком и врагом, то можно сравнивать регистр, хранящий в момент выполнения инструкции адрес здоровья того, кому наносится урон, с указателем. Это менее надёжный вариант, но более простой в реализации.мб..... регистры всегда смотрю в первую очередь а потом уже остальноеНапример я хочу для игры Battlefield 2. У меня получилось так то сделать бессмертие для игрока, найдя многоуровневый указатель.ковырял эту игру давно какая версия не помню но вроде 1.0искал я искал ид игрока так и не нашёлзабил на ид нашёл указательно там как то странно с указателем один чисто на самого ГГ а другой на ГГ и на технику в которую ты залезеш морозил адресс на 10 000 и гонял ботов до Канадской граници))))))))))Если можешь идентификатор найти - делай через него, если нет - через указатель. Это дело вкуса и умений исключительно.А всётаки я считаю что найти ID и юзать его самого лучше чем указатель т.к.при использование ID актуален аобскан а при указателе врятли я думаю Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 1 августа, 2012 Поделиться Опубликовано 1 августа, 2012 А всётаки я считаю что найти ID и юзать его самого лучше чем указатель т.к.при использование ID актуален аобскан а при указателе врятли я думаю Аобскан актуален для поиска функции, при чём тут id или указатели? Указатель не всегда надёжен тем, что в некоторых ситуациях он не работает, а вот id работает хотя бы в рамках текущего патча игры. Ссылка на комментарий Поделиться на другие сайты Поделиться
JIeXA Опубликовано 1 августа, 2012 Поделиться Опубликовано 1 августа, 2012 Аобскан актуален для поиска функции, при чём тут id или указатели? Указатель не всегда надёжен тем, что в некоторых ситуациях он не работает, а вот id работает хотя бы в рамках текущего патча игры.Не чувак ты меня походу не понял я имел ввиду что после патча возможно ИД и его расположение в структуре останутся прежними а указатель 100500 процентов поменяется ВОТ Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 1 августа, 2012 Поделиться Опубликовано 1 августа, 2012 Не чувак ты меня походу не понял я имел ввиду что после патча возможно ИД и его расположение в структуре останутся прежними а указатель 100500 процентов поменяетсяВОТНу да, мы об одном и том же говорим, просто с разных сторон. Я стараюсь не пользоваться указателями вообще, т.к. есть вероятность, что даже если игра будет одинаковой версии - на разных компьютерах указатель может не работать. Не знаю, может просто вбилось в голову - я не выяснял. Ссылка на комментарий Поделиться на другие сайты Поделиться
Ramil Опубликовано 7 августа, 2012 Автор Поделиться Опубликовано 7 августа, 2012 здравствуйте геймхакеры. Я сделал многоуровневый указатель и скрипт в игре по статье ZOCKIR. Не знаю когда играю герой не умирает от пуль, другие умирают. Гранатой может убить. Вылетает игра. Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 7 августа, 2012 Поделиться Опубликовано 7 августа, 2012 здравствуйте геймхакеры. Я сделал многоуровневый указатель и скрипт в игре по статье ZOCKIR. Не знаю когда играю герой не умирает от пуль, другие умирают. Гранатой может убить. Вылетает игра.Ну и чего хочешь ?) Ссылка на комментарий Поделиться на другие сайты Поделиться
Ramil Опубликовано 7 августа, 2012 Автор Поделиться Опубликовано 7 августа, 2012 Или может быть я не правильно нашёл указатель, или не правильно написал скрипт, я не знаю.Вот мой скрипт[ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)newmem:originalcode:fld dword ptr [esi+10]mov [[[[BF2.exe+00551080]+0]+38]+10],(float)100000fcomp dword ptr [ecx+00000134]jmp returnhere"BF2.exe"+2095D8:jmp newmemnopnopnopnopreturnhere:[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 Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 7 августа, 2012 Поделиться Опубликовано 7 августа, 2012 Откуда мы знаем валидный у тебя указатель или нет ? И почему-бы mov [[[[bF2.exe+00551080]+0]+38]+10],(float)100000 не писать под newmem.PS: Ты уже год как ломаешь BF2 и находишь указатель... Ссылка на комментарий Поделиться на другие сайты Поделиться
Ramil Опубликовано 8 августа, 2012 Автор Поделиться Опубликовано 8 августа, 2012 Ну ладно тогда уж я сам помучаюсь, я и таки ночами не сплю. Пока не сделаю бессмертие, не успокоюсь. Трейнеры для други игр буду делать потом когда дисковод заработает. Тогда пока отдохните от меня, пока не сделаю бессмертие, Вы смеялись надо мной, но я не обижаюсь на вас, вы правильно говорили что я для battlefield 2 сделаю через 5 лет, но я сделаю бессмертие. Я начну усердно работать, пока не научусь всему. Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 8 августа, 2012 Поделиться Опубликовано 8 августа, 2012 Ну ладно тогда уж я сам помучаюсь, я и таки ночами не сплю. Пока не сделаю бессмертие, не успокоюсь. Трейнеры для други игр буду делать потом когда дисковод заработает. Тогда пока отдохните от меня, пока не сделаю бессмертие, Вы смеялись надо мной, но я не обижаюсь на вас, вы правильно говорили что я для battlefield 2 сделаю через 5 лет, но я сделаю бессмертие. Я начну усердно работать, пока не научусь всему.Ты можешь задавать любые вопросы, только не те, которые ты уже задавал в своих же темах. Так держать! Ссылка на комментарий Поделиться на другие сайты Поделиться
Coder Опубликовано 8 августа, 2012 Поделиться Опубликовано 8 августа, 2012 Ну ладно тогда уж я сам помучаюсь, я и таки ночами не сплю. Пока не сделаю бессмертие, не успокоюсь. Трейнеры для други игр буду делать потом когда дисковод заработает. Тогда пока отдохните от меня, пока не сделаю бессмертие, Вы смеялись надо мной, но я не обижаюсь на вас, вы правильно говорили что я для battlefield 2 сделаю через 5 лет, но я сделаю бессмертие. Я начну усердно работать, пока не научусь всему.Мы тебе всё объяснили, что и как делается, если ты отказываешься воспринимать информацию, то помочь тебе не представляется возможным.P.S. Мне твой пост напомнил "Виталю" (см. ролик на YouTube). Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 8 августа, 2012 Поделиться Опубликовано 8 августа, 2012 Или может быть я не правильно нашёл указатель, или не правильно написал скрипт, я не знаю.Дык а как мы тебе это проверим-то? Если у тебя работает - значит всё ок. Ссылка на комментарий Поделиться на другие сайты Поделиться
Ramil Опубликовано 8 августа, 2012 Автор Поделиться Опубликовано 8 августа, 2012 Я сегодня играл в battlefield 2 и ни разу не умирал, ни одно оружие не могло убить меня танк гранаты взравчатка пули и тд. Вылет был только тогда я переходил на другой уровень или ставил заморозку билетов 200 на 200. А так всю миссию без вылета. До этого играл в версию 1.5 трейнером ДЕВАЙТЕД при поподании танка мог умереть, ну короче когда мочили ножом автоматом и гранатой написано было что игрок убит, но игрок жив. Спасибо ARM4ND0 что он сказал надо писать под newmem, я это сделал, и почти получилось. Спасибо вам всем за помощь. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 8 августа, 2012 Поделиться Опубликовано 8 августа, 2012 Я сегодня играл в battlefield 2 и ни разу не умирал, ни одно оружие не могло убить меня танк гранаты взравчатка пули и тд. Вылет был только тогда я переходил на другой уровень или ставил заморозку билетов 200 на 200. А так всю миссию без вылета. До этого играл в версию 1.5 трейнером ДЕВАЙТЕД при поподании танка мог умереть, ну короче когда мочили ножом автоматом и гранатой написано было что игрок убит, но игрок жив. Спасибо ARM4ND0 что он сказал надо писать под newmem, я это сделал, и почти получилось. Спасибо вам всем за помощь.Молодец! Здорово, что всё получилось. Ссылка на комментарий Поделиться на другие сайты Поделиться
ARM4ND0 Опубликовано 8 августа, 2012 Поделиться Опубликовано 8 августа, 2012 Рад был помочь. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения