d0c Опубликовано 30 марта, 2014 Поделиться Опубликовано 30 марта, 2014 Как создать фильтр в игре на жизнь? Т.е. Когда я заменяю инструкцию нопом на уменьшение жизни то бессмертные становятся все враги и я! Я знаю что надо сделать какой то фильтр с помощью cmp но не знаю как, надо еще и какой-то айди игрока находить а как это сделать?Искал на форуме темы с фильтрами нашел темы НО! ни в одной из этих тем я не нашел подробного описания, а только готовые скрипты.В гугле тоже искал вообще находит какую-то бредятину.Пожалуйста помогите и желательно подробно, с примерами, скриншотами.Игра: Shank v1.0 Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 30 марта, 2014 Поделиться Опубликовано 30 марта, 2014 Именно v1.0, а не v1.0u3? Ссылка на комментарий Поделиться на другие сайты Поделиться
krocki Опубликовано 30 марта, 2014 Поделиться Опубликовано 30 марта, 2014 С начало попробуй так:1.Найди адрес жизней своего героя.2.Сделай брякпоинт на запись и потеря немного жизней.3.Появится инструкция отвечающая жизни твои и скорее всего врагов.4.Переходим в отладчик и жмем правой кнопкой мыши на эту инструкциюи выбираем Найти адреса получающие доступ к этой инструкции. И ударь врага чтоб он потерял немного жизней.Таким образом ты узнаешь адреса врагов и добавь их в таблицу.5.Поставь брякпоинт на чтение свой адрес и адрес врагов, потрать немного жизней своих и врага, таким образом ты узнаешь какие инструкции работаютс твоей жизнь и жизнью врагов.6.Если среди них есть инструкция которой нет у врагов, то тебе возможно не придётся делать фильтр.7.Если они все одинаковые тогда ищи на свой адрес здоровья, многоуровневый указатель.И пиши скрипт сним. Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 30 марта, 2014 Поделиться Опубликовано 30 марта, 2014 Фу, блин нашёл! Вот:0076584C=>[...+9A4]=>[...+64]=>начало_структуры_игрока+70=здоровьеили630B5023=>[...+9A4]=>[...+64]=>начало_структуры_игрока+70=здоровьеЗаморозил - бессмертен, враги дохнут)Скрипт, уж извините, писать лень) Ссылка на комментарий Поделиться на другие сайты Поделиться
d0c Опубликовано 31 марта, 2014 Автор Поделиться Опубликовано 31 марта, 2014 Именно v1.0, а не v1.0u3?Мне кажется это неважно так как скрипт пишу aobscan'ом.С начало попробуй так:1.Найди адрес жизней своего героя.2.Сделай брякпоинт на запись и потеря немного жизней.3.Появится инструкция отвечающая жизни твои и скорее всего врагов.4.Переходим в отладчик и жмем правой кнопкой мыши на эту инструкциюи выбираем Найти адреса получающие доступ к этой инструкции. И ударь врага чтоб он потерял немного жизней.Таким образом ты узнаешь адреса врагов и добавь их в таблицу.5.Поставь брякпоинт на чтение свой адрес и адрес врагов, потрать немного жизней своих и врага, таким образом ты узнаешь какие инструкции работаютс твоей жизнь и жизнью врагов.6.Если среди них есть инструкция которой нет у врагов, то тебе возможно не придётся делать фильтр.7.Если они все одинаковые тогда ищи на свой адрес здоровья, многоуровневый указатель.И пиши скрипт сним.Спасибо большое!!Фу, блин нашёл! Вот:0076584C=>[...+9A4]=>[...+64]=>начало_структуры_игрока+70=здоровьеили630B5023=>[...+9A4]=>[...+64]=>начало_структуры_игрока+70=здоровьеЗаморозил - бессмертен, враги дохнут)Скрипт, уж извините, писать лень)Ммм.. Если не сложно объясните что это? Я новичок неделю назад начал трейнеры делать.P.S Пока что только умею делать скрипты с помощью aobscan...Вот пока такое надумално как я уже говорил у всех жизнь бесконечная буду дальше делать как вы подсказали[ENABLE]aobscan(infhsh,D9 5D 70 E8 ?? ?? ?? ?? 8B C8 E8 ?? ?? ?? ?? D9 45 70)//004C53A9label(_infhsh)registersymbol(_infhsh)aobscan(perehod,55 8B EC 51 89 4D FC 8B 45 FC 8B 40 5C 8B E5 5D C3) //0040E350label(exit)alloc(newmem,1024)infhsh:_infhsh:jmp newmemnopnopnopnewmem:nopcall perehodexit:jmp infhsh+8[DISABLE]_infhsh:fstp dword ptr [ebp+70]call 0040E350dealloc(newmem)unregistersymbol(_infhsh)С начало попробуй так:1.Найди адрес жизней своего героя.2.Сделай брякпоинт на запись и потеря немного жизней.3.Появится инструкция отвечающая жизни твои и скорее всего врагов.4.Переходим в отладчик и жмем правой кнопкой мыши на эту инструкциюи выбираем Найти адреса получающие доступ к этой инструкции. И ударь врага чтоб он потерял немного жизней.Таким образом ты узнаешь адреса врагов и добавь их в таблицу.5.Поставь брякпоинт на чтение свой адрес и адрес врагов, потрать немного жизней своих и врага, таким образом ты узнаешь какие инструкции работаютс твоей жизнь и жизнью врагов.6.Если среди них есть инструкция которой нет у врагов, то тебе возможно не придётся делать фильтр.7.Если они все одинаковые тогда ищи на свой адрес здоровья, многоуровневый указатель.И пиши скрипт сним.Проверил как вы сказали. Придётся делать фильтр так как они получают доступ к одной инструкции.А многоуровневые указатели искать не хочу не удобно их использовать. С инструкциями получше.Ну а на счёт ID игрока поможете?? как его находить? и сверять? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 31 марта, 2014 Поделиться Опубликовано 31 марта, 2014 У нас на форуме есть видео по анализу структур. Когда ты нашел, как писали выше, адрес своего здоровья и здоровья хотя бы пары врагов - через СЕ можешь воспользоваться функцией Dissect Data/Structures, и добавить туда все адреса. Потом надо сидеть и анализировать структуру в поиске такого значения, которое1. Отличается у твоего игрока и одинаково у врагов2. При перезапуске игры не изменяется.А дальше - дело техники: пишешь фильтр на проверку этого значения. Вот и все. Более подробно ты сможешь посмотреть все это в видео от keng или Coder. Поищи по форуму, их у нас полно. Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 31 марта, 2014 Поделиться Опубликовано 31 марта, 2014 Вот что нашлось: стоит обратить внимание на 002CА вот примерный скрипт:[ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(exit)newmem:cmp [ebp+2C],#15jne exitoriginalcode:fstp dword ptr [ebp+70]exit:call 0040E350jmp returnhere004C53A9:jmp newmemnopnopnopreturnhere:[DISABLE]dealloc(newmem)004C53A9:fstp dword ptr [ebp+70]call 0040E350Но не всё так радужно. После смерти, например от падения, эти цифры меняются, но для врагов равны между собой.Не вижу другого варианта кроме как проходить по цепочке указателей и сравнивать с ebp.С указателями ошибочка вышла. Хоть они и статичные, но после выхода в главное меню и продолжения игры, ни один не указывает туда куда надо. Выходит они одноразовые? Работают каждый новый запуск игры. Ссылка на комментарий Поделиться на другие сайты Поделиться
d0c Опубликовано 31 марта, 2014 Автор Поделиться Опубликовано 31 марта, 2014 Спасибо Вам всем, пойду пробовать! Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 31 марта, 2014 Поделиться Опубликовано 31 марта, 2014 Когда победил первую инструкция по отниманию здоровья, то вылезла другая:004C6B17 - D9 5C 24 1C - fstp dword ptr [esp+1C]004C6B1B - D9 44 24 1C - fld dword ptr [esp+1C]004C6B1F - D9 53 70 - fst dword ptr [ebx+70] <--- Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 31 марта, 2014 Поделиться Опубликовано 31 марта, 2014 Введу одно уточнение - чтобы удобнее было проводить анализ, адреса Enemy1..3 лучше объединить в одну группу Enemies. Тогда цветами он будет выделять адреса, которые одинаковы для группы, но разнятся для других групп. По себе знаю - так анализировать проще. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 31 марта, 2014 Поделиться Опубликовано 31 марта, 2014 [ENABLE]alloc(newmem, 2048)label(function)label(returnhere)label(exit)newmem:push ecxmov ecx,00cmp ecx,01pop ecxje functionmovss [ebp-1C],xmm6function:mov [ebp-1C],(float)1exit:jmp returnhere00BF04C1:jmp newmemreturnhere:[DISABLE]dealloc(newmem)00BF04C1:movss [ebp-1C],xmm6Всем привет, почему всегда выполняется function?je - это ведь переход,когда равно.Да если даже сделать cmp ecx,00 всеравно перейдет по function.Раньше делал и все нормально работало, а тут то ли не выспался,то ли что. Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 31 марта, 2014 Поделиться Опубликовано 31 марта, 2014 Действительно не выспался)movss [ebp-1C],xmm6function:mov [ebp-1C],(float)1У тебя всегда будет выполняться function, т.к. нет прыжка через неё. Сделай:movss [ebp-1C],xmm6jmp exitfunction:mov [ebp-1C],(float)1exit:jmp returnhereЕсли же ты говорил по поводу нерабочего перехода на je function, то всё работает нормально.00 01 не переходит, 00 00 переходит. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 1 апреля, 2014 Поделиться Опубликовано 1 апреля, 2014 Да))Спасибо)) jmp exit не хватало))) Ссылка на комментарий Поделиться на другие сайты Поделиться
d0c Опубликовано 1 апреля, 2014 Автор Поделиться Опубликовано 1 апреля, 2014 Вот что нашлось: стоит обратить внимание на 002CА вот примерный скрипт:[ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(exit)newmem:cmp [ebp+2C],#15jne exitoriginalcode:fstp dword ptr [ebp+70]exit:call 0040E350jmp returnhere004C53A9:jmp newmemnopnopnopreturnhere:[DISABLE]dealloc(newmem)004C53A9:fstp dword ptr [ebp+70]call 0040E350Но не всё так радужно. После смерти, например от падения, эти цифры меняются, но для врагов равны между собой.Не вижу другого варианта кроме как проходить по цепочке указателей и сравнивать с ebp.С указателями ошибочка вышла. Хоть они и статичные, но после выхода в главное меню и продолжения игры, ни один не указывает туда куда надо. Выходит они одноразовые? Работают каждый новый запуск игры.Сделал как у вас в скрипте Вы там написали смещение 2С как это было в анализаторе структур, я сделал так же но результата 0, потом прибавил свое смещение к 70 в HEX получилось 7С и скрипт работает!!!! НО через раз почему-то т.е. 60% ударов не наносят урон, а остальные 40% наносят урон. Что же делать?Вот что получилось[ENABLE]alloc(newmem,1024)label(exit)label(returnhere)label(shank)004C53A9:jmp newmemnopnopnopreturnhere:newmem:cmp [ebp+7C],(float)60je shankfstp dword ptr [ebp+70]jmp exitshank:nopnopnopexit:jmp returnhere[DISABLE]004C53A9:fstp dword ptr [ebp+70]dealloc(newmem)Может что-то просто не правильно? Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 1 апреля, 2014 Поделиться Опубликовано 1 апреля, 2014 d0c, здоровье всё равно отнимается в этом скрипте или в каком-то другом месте. см. пост #9(float)60 у Шенка всегда? Ссылка на комментарий Поделиться на другие сайты Поделиться
d0c Опубликовано 3 апреля, 2014 Автор Поделиться Опубликовано 3 апреля, 2014 d0c, здоровье всё равно отнимается в этом скрипте или в каком-то другом месте. см. пост #9(float)60 у Шенка всегда?В том то и дело у него оно почему-то меняется но как-то странно 60 потом другое, потом опять другое, и опять 60 - как-то так(и у врагов то же самое)Короче, после каждого удара ID игрока меняется например сначала у shank'a ID (float)60, после удара уже (float)109.6764896796; потом еще удар и (float)80; еще удар и обратно (float)60Что же делать?как-то же без указателей можно по-любому Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 3 апреля, 2014 Поделиться Опубликовано 3 апреля, 2014 В том то и дело у него оно почему-то меняется но как-то странно 60 потом другое, потом опять другое, и опять 60 - как-то так(и у врагов то же самое)Короче, после каждого удара ID игрока меняется например сначала у shank'a ID (float)60, после удара уже (float)109.6764896796; потом еще удар и (float)80; еще удар и обратно (float)60Что же делать?как-то же без указателей можно по-любомуВряд ли ID персонажа имеет тип float, нужно искать целое 1-4 байт.Можно, если привязаться к какому-нибудь уникальному параметру, который есть только у героя. Например, это мог быть опыт, кол-во гранат, патронов и др. Эти параметры не важны для противников, т. к. они бесконечны или не учитываются. Ссылка на комментарий Поделиться на другие сайты Поделиться
d0c Опубликовано 3 апреля, 2014 Автор Поделиться Опубликовано 3 апреля, 2014 И еще спрошу кое-что(наверное не по теме) есть код:Я выделил красным то что мне не понятно - alloc(newmem.2048,а это тут для чего????) - ведь без этого не работаетВряд ли ID персонажа имеет тип float, нужно искать целое 1-4 байт.Можно, если привязаться к какому-нибудь уникальному параметру, который есть только у героя. Например, это мог быть опыт, кол-во гранат, патронов и др. Эти параметры не важны для противников, т. к. они бесконечны или не учитываются.Ну я сначала искал 4 байта но ничего не нахожу(4 байт просто нет! а если и есть то там вообще фигня написана никак не относящаяся к ID Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 3 апреля, 2014 Поделиться Опубликовано 3 апреля, 2014 И еще спрошу кое-что(наверное не по теме) есть код:Я выделил красным то что мне не понятно - alloc(newmem.2048,а это тут для чего????) - ведь без этого не работаетВот что нашлось, если с английским хорошо:alloc(allocname,sizeinbytes, preferedregion OPTIONAL) //same as label, but allocates the memory it points to itselfПохоже на адрес, из которого будет совершён прыжок в выделенную область. И адрес 5 байтовый. Ссылка на комментарий Поделиться на другие сайты Поделиться
d0c Опубликовано 3 апреля, 2014 Автор Поделиться Опубликовано 3 апреля, 2014 Хммм... А зачем же это? Если там ниже в скрипте и так показано откуда будет jmp newmem. Ну да ладно - это не важно.И вы сказали что привязать к какому-то уникальному идентификатору которого нет у врагов верно?Я попробовал но ничего не получилось(пробовал привязать к гранатам, можете наглядно показать? Можно на любой игре.) Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 3 апреля, 2014 Поделиться Опубликовано 3 апреля, 2014 Я попробовал но ничего не получилось(пробовал привязать к гранатам, можете наглядно показать? Можно на любой игре.)Сейчас пробую на этой)Кажись поддалось)В структуре по смещению +128h у Шенка всегда 4, у противников 0.[ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(exit)newmem:cmp [ebp+128],4je exitoriginalcode:fstp dword ptr [ebp+70]exit:call 0040E350jmp returnhere004C53A9:jmp newmemnopnopnopreturnhere:[DISABLE]dealloc(newmem)004C53A9:fstp dword ptr [ebp+70]call 0040E350Как и в прошлый раз не доломал я и d0c. Здоровье всё равно отнималось, это происходило из-за ранений от комбо атак противников. Заплатка:[ENABLE]alloc(newmem2,2048)label(returnhere2)label(originalcode2)label(exit2)newmem2:cmp [ebx+128],4je exit2originalcode2:fstp dword ptr [ebx+70]exit2:fld dword ptr [esi+000000D0]jmp returnhere2004C6B1F:jmp newmem2nopnopnopnopreturnhere2:[DISABLE]dealloc(newmem2)004C6B1F:fstp dword ptr [ebx+70]fld dword ptr [esi+000000D0]Прошёл весь первый уровень и часть второго на макс. уровне сложности, перезапускал игру - всё работает нормально)P.S.004C6B37 - D9 5B 70 - fstp dword ptr [ebx+70] - лечение004841E4 - FF 48 10 - dec [eax+10] - уменьшение гранатP.S.S. Можно было попробовать заморозить гранаты и привязываться к ним, но память под них в данном случае выделяется в другом месте. Так что не вариант)Скрипт 2 в 1[ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(exit)label(returnhere2)label(originalcode2)label(exit2)newmem:cmp [ebp+128],4 - нет ранений от атакje exitoriginalcode:fstp dword ptr [ebp+70]exit:call 0040E350jmp returnherenewmem+30:cmp [ebx+128],4 - нет ранений от комбо-атакje exit2originalcode2:fstp dword ptr [ebx+70]exit2:fld dword ptr [esi+000000D0]jmp returnhere2004C53A9:jmp newmemnopnopnopreturnhere:004C6B1F:jmp newmem+30nopnopnopnopreturnhere2:[DISABLE]dealloc(newmem)004C53A9:fstp dword ptr [ebp+70]call 0040E350004C6B1F:fstp dword ptr [ebx+70]fld dword ptr [esi+000000D0]Теперь самое интересное: если сделать гранаты бесконечными, то после гибели персонажа скрипт не работает))) Ссылка на комментарий Поделиться на другие сайты Поделиться
d0c Опубликовано 3 апреля, 2014 Автор Поделиться Опубликовано 3 апреля, 2014 Сейчас пробую на этой)Кажись поддалось)В структуре по смещению +128h у Шенка всегда 4, у противников 0.[ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(exit)newmem:cmp [ebp+128],4je exitoriginalcode:fstp dword ptr [ebp+70]exit:call 0040E350jmp returnhere004C53A9:jmp newmemnopnopnopreturnhere:[DISABLE]dealloc(newmem)004C53A9:fstp dword ptr [ebp+70]call 0040E350Как и в прошлый раз не доломал я и d0c. Здоровье всё равно отнималось, это происходило из-за ранений от комбо атак противников. Заплатка:[ENABLE]alloc(newmem2,2048)label(returnhere2)label(originalcode2)label(exit2)newmem2:cmp [ebx+128],4je exit2originalcode2:fstp dword ptr [ebx+70]exit2:fld dword ptr [esi+000000D0]jmp returnhere2004C6B1F:jmp newmem2nopnopnopnopreturnhere2:[DISABLE]dealloc(newmem2)004C6B1F:fstp dword ptr [ebx+70]fld dword ptr [esi+000000D0]Прошёл весь первый уровень и часть второго на макс. уровне сложности, перезапускал игру - всё работает нормально)P.S.004C6B37 - D9 5B 70 - fstp dword ptr [ebx+70] - лечение004841E4 - FF 48 10 - dec [eax+10] - уменьшение гранатP.S.S. Можно было попробовать заморозить гранаты и привязываться к ним, но память под них в данном случае выделяется в другом месте. Так что не вариант)Скрипт 2 в 1[ENABLE]alloc(newmem,2048)label(returnhere)label(originalcode)label(exit)label(returnhere2)label(originalcode2)label(exit2)newmem:cmp [ebp+128],4 - нет ранений от атакje exitoriginalcode:fstp dword ptr [ebp+70]exit:call 0040E350jmp returnherenewmem+30:cmp [ebx+128],4 - нет ранений от комбо-атакje exit2originalcode2:fstp dword ptr [ebx+70]exit2:fld dword ptr [esi+000000D0]jmp returnhere2004C53A9:jmp newmemnopnopnopreturnhere:004C6B1F:jmp newmem+30nopnopnopnopreturnhere2:[DISABLE]dealloc(newmem)004C53A9:fstp dword ptr [ebp+70]call 0040E350004C6B1F:fstp dword ptr [ebx+70]fld dword ptr [esi+000000D0]Теперь самое интересное: если сделать гранаты бесконечными, то после гибели персонажа скрипт не работает)))А вот на счет заплатки, Вы где-то сверху писали то что поймали еще какую-то(вторую) инструкцию которая отвечает за уменьшение здоровья, как вы ее нашли? Последовательностью каких действий?А еще можете скинуть скрин анализа структур?И как вы написали адреса в анализаторе структур?1 группа:1 Адрес) Адрес здоровья шанка2 Адрес) кол-во гранат2 группа:1 Адрес) здоровье enemy12 Адрес) здоровье enemy2 ???Мне бы хотелось узнать сам процесс привязки к гранатам. Пожалуйста потерпите меня еще немножко, задаю много вопросов...Добавлю кое-что.Вы по-моему что-то упустили(или может у меня что-то тупит) в первом уровне когда выходишь из здания там есть большой человек и у него хп столько же сколько у shank'a, он тоже бессмертный опять же проблема 1 уровень пройти невозможно...(такая проблема только с врагом под именем "Big" с другими здоровяками проблем нет) Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 3 апреля, 2014 Поделиться Опубликовано 3 апреля, 2014 А вот на счет заплатки, Вы где-то сверху писали то что поймали еще какую-то(вторую) инструкцию которая отвечает за уменьшение здоровья, как вы ее нашли? Последовательностью каких действий?Можно на ты) где-то читал, что со времён фидо такие правила пошли)Просто применил первую заплатку, поставил отслеживание инструкций, которые пишут по этому адресу, и дал врагам себя сильно побить. Вот она и выплыла. Можно было через поиск инструкций, но здесь они оказались разные ebp и ebx.А еще можете скинуть скрин анализа структур?Проанализировал в CE и не сохранял. Если очень надо, то да.И как вы написали адреса в анализаторе структур?1 группа:1 Адрес) Адрес здоровья шанка2 Адрес) кол-во гранат2 группа:1 Адрес) здоровье enemy12 Адрес) здоровье enemy2 ???Мне бы хотелось узнать сам процесс привязки к гранатам. Пожалуйста потерпите меня еще немножко, задаю много вопросов...Гранаты, как оказалось не входят в эту структуру или просто не нашёл связи. Обычным поиском отсевом типа byte.Тебе нужен процесс занесения в структуру? Ссылка на комментарий Поделиться на другие сайты Поделиться
d0c Опубликовано 3 апреля, 2014 Автор Поделиться Опубликовано 3 апреля, 2014 Добавлю:А нет такое случается и с другими здоровяками, я думаю что когда выходят здоровяки для них генерируется айди похожий на айди шанка, следовательно есть такие здоровяки у которых айди совпадает с айди шанка. Ссылка на комментарий Поделиться на другие сайты Поделиться
A1t0r Опубликовано 3 апреля, 2014 Поделиться Опубликовано 3 апреля, 2014 Добавлю:А нет такое случается и с другими здоровяками, я думаю что когда выходят здоровяки для них генерируется айди похожий на айди шанка, следовательно есть такие здоровяки у которых айди совпадает с айди шанка.Не знаю как без скриптов, но здоровяки и собачки мочатся с комбо 30-60, либо гранатами. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения