-
Постов
51 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные d0c
-
-
Ага))) а можешь объяснить пару команд?
Что обозначают команды fstp, fld ?
fadd например добавляет значение в значение float, fsubr вычитает из float значения значение, а вот fstp, fld
-
Эхх не могу тебе положительную оценку поставить, почему-то не могу, пишет исчерпали лимит но я еще НИ разу ничего не ставил...
Ну если что-то ломать возьмешься ко мне тоже обращайся, мне самому интересно посмотрю может что-то добавлю(вряд ли конечно), ну короче что будешь разбирать можешь писать в личку, создавать темы и звать меня туда, и всё такое.
Удачи!!!)))
А я пока попробую разобраться с собаками, если разберусь напишу и ты если разберешься с ними напишешь ок?
-
А администрацию прошу наградить
A1t0r'a за пояснения, за скрины, за разжёвывание каждой буквы, за скрипты, за сдержанность ко мне...
Всем спасибо!!!( A1t0r'y БОЛЬШЕ ВСЕГО).
Ну если что пишите в этой теме на счёт фильтров.
И еще A1t0r если что-то новое сделаешь с Shank'ом там скрипт модифицируешь или еще что-нибудь пиши разберём)))
Ну не знаю aobscan как-то надежнее, а вдруг что-то изменится в каком-то патче, есть шанс что он будет продолжать работать.
-
Спасибо большое!!!!
Вот - я немного модифицировал скрипт:
[ENABLE]
aobscan(generalscript,D9 5D 70 E8 ?? ?? ?? ?? 8B C8 E8 ?? ?? ?? ?? D9 45 70) //004C53A9
label(_generalscript)
registersymbol(_generalscript)
aobscan(zaplatka,D9 5B 70 D9 86 ?? ?? ?? ?? ?? ?? ?? ?? F6 C4 05 7A 09) //004C6B1F
label(_zaplatka)
registersymbol(_zaplatka)
aobscan(perehod,55 8B EC 51 89 4D FC 8B 45 FC 8B 40 5C 8B E5 5D) //0040E350
label(exit)
label(exit2)
label(originalcode)
label(originalcode2)
alloc(newmem,2048)
generalscript:
_generalscript:
jmp newmem
nop
nop
nop
newmem:
cmp [ebp+128],4
je exit
originalcode:
fstp dword ptr [ebp+70]
exit:
call perehod
jmp generalscript+8
zaplatka:
_zaplatka:
jmp newmem+30
nop
nop
nop
nop
newmem+30:
cmp [ebx+128],4
je exit2
originalcode2:
fstp dword ptr [ebx+70]
exit2:
fld dword ptr [esi+000000D0]
jmp zaplatka+9
[DISABLE]
aobscan(perehod,55 8B EC 51 89 4D FC 8B 45 FC 8B 40 5C 8B E5 5D) //0040E350
_generalscript:
fstp dword ptr [ebp+70]
call perehod
_zaplatka:
fstp dword ptr [ebx+70]
fld dword ptr [esi+000000D0]
dealloc(newmem)
unregistersymbol(_generalscript)
unregistersymbol(_zaplatka)Работает так же проверял
Эхх есть же такие люди)))...
-
Ну в общем скрипт рабочий.
P.S жду скрины
Только что убивал собаку как ты и сказал с 50 комбо начала раниться
И еще один вопрос возник - а почему собаки то дохнут только после 50 ударов?? оО
-
Да скрины пожалуйста скиньте скинь а то очень сложно понять(я недавно только начал этим заниматься).
И процесс занесения в структуру тоже выложи... Буду ОООООЧЧЧЧЧЧЧЧЧЧЧЕЕЕЕННЬЬЬЬ благодарен.
Не знаю как без скриптов, но здоровяки и собачки мочатся с комбо 30-60, либо гранатами.
1) Всмысле без скриптов?
2) Только что попробовал гранатами - тоже не получается мы оба бессмертные...
А вот теперь убил - как это понимать...
-
Добавлю:
А нет такое случается и с другими здоровяками, я думаю что когда выходят здоровяки для них генерируется айди похожий на айди шанка, следовательно есть такие здоровяки у которых айди совпадает с айди шанка.
-
Сейчас пробую на этой)
Кажись поддалось)
В структуре по смещению +128h у Шенка всегда 4, у противников 0.
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem:
cmp [ebp+128],4
je exit
originalcode:
fstp dword ptr [ebp+70]
exit:
call 0040E350
jmp returnhere
004C53A9:
jmp newmem
nop
nop
nop
returnhere:
[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],4
je exit2
originalcode2:
fstp dword ptr [ebx+70]
exit2:
fld dword ptr [esi+000000D0]
jmp returnhere2
004C6B1F:
jmp newmem2
nop
nop
nop
nop
returnhere2:
[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 exit
originalcode:
fstp dword ptr [ebp+70]
exit:
call 0040E350
jmp returnhere
newmem+30:
cmp [ebx+128],4 - нет ранений от комбо-атак
je exit2
originalcode2:
fstp dword ptr [ebx+70]
exit2:
fld dword ptr [esi+000000D0]
jmp returnhere2
004C53A9:
jmp newmem
nop
nop
nop
returnhere:
004C6B1F:
jmp newmem+30
nop
nop
nop
nop
returnhere2:
[DISABLE]
dealloc(newmem)
004C53A9:
fstp dword ptr [ebp+70]
call 0040E350
004C6B1F:
fstp dword ptr [ebx+70]
fld dword ptr [esi+000000D0]Теперь самое интересное: если сделать гранаты бесконечными, то после гибели персонажа скрипт не работает)))
А вот на счет заплатки, Вы где-то сверху писали то что поймали еще какую-то(вторую) инструкцию которая отвечает за уменьшение здоровья, как вы ее нашли? Последовательностью каких действий?
А еще можете скинуть скрин анализа структур?
И как вы написали адреса в анализаторе структур?
1 группа:
1 Адрес) Адрес здоровья шанка
2 Адрес) кол-во гранат
2 группа:
1 Адрес) здоровье enemy1
2 Адрес) здоровье enemy2 ???
Мне бы хотелось узнать сам процесс привязки к гранатам. Пожалуйста потерпите меня еще немножко, задаю много вопросов...
Добавлю кое-что.
Вы по-моему что-то упустили(или может у меня что-то тупит) в первом уровне когда выходишь из здания там есть большой человек и у него хп столько же сколько у shank'a, он тоже бессмертный опять же проблема 1 уровень пройти невозможно...(такая проблема только с врагом под именем "Big" с другими здоровяками проблем нет)
-
Хммм... А зачем же это? Если там ниже в скрипте и так показано откуда будет jmp newmem. Ну да ладно - это не важно.
И вы сказали что привязать к какому-то уникальному идентификатору которого нет у врагов верно?
Я попробовал но ничего не получилось(пробовал привязать к гранатам, можете наглядно показать? Можно на любой игре.)
-
И еще спрошу кое-что(наверное не по теме) есть код:
Я выделил красным то что мне не понятно - alloc(newmem.2048,а это тут для чего????) - ведь без этого не работает
Вряд ли ID персонажа имеет тип float, нужно искать целое 1-4 байт.
Можно, если привязаться к какому-нибудь уникальному параметру, который есть только у героя. Например, это мог быть опыт, кол-во гранат, патронов и др. Эти параметры не важны для противников, т. к. они бесконечны или не учитываются.
Ну я сначала искал 4 байта но ничего не нахожу(4 байт просто нет! а если и есть то там вообще фигня написана никак не относящаяся к ID
-
d0c, здоровье всё равно отнимается в этом скрипте или в каком-то другом месте. см. пост #9
(float)60 у Шенка всегда?
В том то и дело у него оно почему-то меняется но как-то странно 60 потом другое, потом опять другое, и опять 60 - как-то так(и у врагов то же самое)
Короче, после каждого удара ID игрока меняется например сначала у shank'a ID (float)60, после удара уже (float)109.6764896796; потом еще удар и (float)80; еще удар и обратно (float)60
Что же делать?
как-то же без указателей можно по-любому
-
Ахахахах))) ноо я сначала испугался а потом вспомнил то что 1 апреля))
-
Вот что нашлось: стоит обратить внимание на 002C
А вот примерный скрипт:
[ENABLE]
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)
newmem:
cmp [ebp+2C],#15
jne exit
originalcode:
fstp dword ptr [ebp+70]
exit:
call 0040E350
jmp returnhere
004C53A9:
jmp newmem
nop
nop
nop
returnhere:
[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 newmem
nop
nop
nop
returnhere:
newmem:
cmp [ebp+7C],(float)60
je shank
fstp dword ptr [ebp+70]
jmp exit
shank:
nop
nop
nop
exit:
jmp returnhere
[DISABLE]
004C53A9:
fstp dword ptr [ebp+70]
dealloc(newmem)Может что-то просто не правильно?
-
Попробуй через АА(автоассемблер) т.е. Просто замени стандартную инструкцию жизни или денег на свою!
Могу написать тебе скрипт если выложишь адреса инструкций, сами стандартные инструкции, и скажи на что надо заменить дело 5-ти минут скрипт написать(смотря какая сложность).
-
Спасибо Вам всем, пойду пробовать!
-
Именно 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)//004C53A9
label(_infhsh)
registersymbol(_infhsh)
aobscan(perehod,55 8B EC 51 89 4D FC 8B 45 FC 8B 40 5C 8B E5 5D C3) //0040E350
label(exit)
alloc(newmem,1024)
infhsh:
_infhsh:
jmp newmem
nop
nop
nop
newmem:
nop
call perehod
exit:
jmp infhsh+8
[DISABLE]
_infhsh:
fstp dword ptr [ebp+70]
call 0040E350
dealloc(newmem)
unregistersymbol(_infhsh)С начало попробуй так:
1.Найди адрес жизней своего героя.
2.Сделай брякпоинт на запись и потеря немного жизней.
3.Появится инструкция отвечающая жизни твои и скорее всего врагов.
4.Переходим в отладчик и жмем правой кнопкой мыши на эту инструкцию
и выбираем Найти адреса получающие доступ к этой инструкции. И ударь врага чтоб он потерял немного жизней.
Таким образом ты узнаешь адреса врагов и добавь их в таблицу.
5.Поставь брякпоинт на чтение свой адрес и адрес врагов, потрать немного жизней своих и врага, таким образом ты узнаешь какие инструкции работают
с твоей жизнь и жизнью врагов.
6.Если среди них есть инструкция которой нет у врагов, то тебе возможно не придётся делать фильтр.
7.Если они все одинаковые тогда ищи на свой адрес здоровья, многоуровневый указатель.
И пиши скрипт сним.
Проверил как вы сказали. Придётся делать фильтр так как они получают доступ к одной инструкции.
А многоуровневые указатели искать не хочу не удобно их использовать. С инструкциями получше.
Ну а на счёт ID игрока поможете?? как его находить? и сверять?
-
Как создать фильтр в игре на жизнь? Т.е. Когда я заменяю инструкцию нопом на уменьшение жизни то бессмертные становятся все враги и я! Я знаю что надо сделать какой то фильтр с помощью cmp но не знаю как, надо еще и какой-то айди игрока находить а как это сделать?
Искал на форуме темы с фильтрами нашел темы НО! ни в одной из этих тем я не нашел подробного описания, а только готовые скрипты.
В гугле тоже искал вообще находит какую-то бредятину.
Пожалуйста помогите и желательно подробно, с примерами, скриншотами.
Игра: Shank v1.0
-
Чтобы добавлялись при нажатии на кнопку, надо отлавливать инструкцию которая чаще всего получает доступ к деньгам т.е. На адрес ставишь бряк на доступ и там иногда есть инструкции которые без каких либо действий в игре получают доступ к твоему адресу по 20-200 запросов в секунду бывает по разному
Помогите по созданию фильтра
in Вопросы по созданию читов в одиночных играх
Опубликовано
А ты вообще трейнеры сам пишешь? Или ТОЛЬКО таблицы делаешь и помогаешь всем?
Понятно спс теперь буду в дизасме смотреть))) не замечал подсказок