-
Постов
5 750 -
Зарегистрирован
-
Победитель дней
292
Тип контента
Профили
Форумы
Загрузки
Блоги
Весь контент Garik66
-
PS: 1. вариант выглядит более надёжно, потому что, обрати внимание на строчку у тебя по коду игры: xor eax,ecx // значение НР XORируется. и уже шифрованное значение загружается в по смещению +04: mov [ecx+04],eax // шифрованное значение загружается во второй элемент от начала структуры. Так что возможна далее по коду проверка, поэтому вариант 2. может не работать. Какая возможна проверка: Недавно LIRW ломал игру "unepic" и попросил помочь с шифрованными значениями (правда так и не воспользовался моим скриптом). Так вот, в этой игре код примерно такой же. Что сделали разработчики: Записывают XORированные значения (XORирование через две константы) в два соседних адреса, а потом дальше по коду сверяют их друг с другом и, если значения в этих адресах не совпадают, то Ваш ГГ лопается - смотрится очень прикольно кстати - мне понравилось .
-
SerVick 1. Не нужно цитировать полностью сообщение, об этом часто пишем (Xipho, NullAlex и я), особенно, если в сообщении есть видео, коды, потом очень неудобно читать топик. Тем более что движок форума позволяет выделить нужную строчку в сообщении и эту строчку уже процитировать. 2. да. для 32-битных программ.
-
Лестницы ни какой нет. При срабатывании инструкции на адресе НР: mov [ebx],eax в eax лежит текущее значение НР, в ebx временно лежит адрес НР ГГ, т.е. этой инструкцией записываются текущие НР в адрес НР ГГ. mov ebx,eax эти же текущие НР записываются в ebx, по видимому дальше по коду игры текущее значение НР будет ещё использоваться. mov eax,[esp+18] загрузка в регистр eax (который на данный момент кода свободен) какого-то значения из стека (значение находится на 6 позиции от верха стека 18(HEX)=24, 24/4=6), esp всегда - это указатель на вершину стека. Стек используется для экономии памяти, т.е. при загрузке значения в стек не нужно куда-то записывать указатель на это значение (т.е. при каждой загрузке в стек мы экономим 4 байта на указателе и ещё на доп.инструкциях.) Про стек, его организацию почитай например статью из вики: Что точно хранится в этом моменте на 6 позиции стека без игры тебе не скажет никто, Это может быть урон, рассчитанный ранее или например наоборот лечение рассчитанное ранее. Ну допустим это урон. Тогда дальше возможен например такой код. cmp ebx,eax // сравниваем текущее значение НР ГГ с нанесённым по нему уроном. jbe @F // если меньше или равно, то прыгаем например на функцию смерти ГГ. sub ebx,eax // если больше, то отнимаем от НР ГГ урон.
-
SerVick Понял, что ты нашёл и почему тебя это запутало. СЕ при поиске/отсеве адресов 4 байта (или float) проверяет все адреса с шагом 4 байта, т.е. кратно 4. а теперь посмотри на инструкцию, которая работает с нужным нам адресом: "willrock.exe"+22210: D9 96 C7 02 00 00 - fst dword ptr [esi+000002C7] Смещение 000002C7 не кратно 4. Поэтому адрес, который ты нашел. находится по смещению [esi+000002C8] - да он морозит кислород. Вот сейчас специально переискал: получил адрес [092419F8] значение в 4 байтах 3762339364 (во float -5.555431153E19). Поставив на него бряк всё равно выйдем на правильную инструкцию fst dword ptr [esi+000002C7], а уже из инструкции получим правильный адрес: [092419F7] = (float) 5.941988945. Наверное разрабы специально сместили адрес на байт, чтобы запутать новичков. Да и при построении Структуры, СЕ тоже не покажет правильный адрес, а покажет адрес [092419F8], поэтому его тоже нужно вводить вручную.
-
SerVick Я не проверял, но думаю все три скрипта и мой, и LIRW, и твой работают примерно одинаково. Я думаю разрабы взяли за основу в этой игре содержание углекислого газа в лёгких при задержке дыхания т.е. при 0 % углекислого газа нормальное содержание кислорода, а при 25 % углекислого газа кислорода уже нет, он уже весь ушёл на окисление. Мой скрипт просто постоянно записывает 0 %. Поэтому работает, как вы выразились - как по воздуху. Твой скрипт отнимает тоже самое количество, что и прибавилось углекислого газа, поэтому, если твой скрипт включён до вхождения в воду, то он работает так же как и мой, т.е. концентрация 0 процентов (инструкция с которой работал ты находится как раз над моей). Скрипт LIRW в игре не смотрел, но думаю, что работает также. Реализаций много как видишь. А теперь вернёмся к твоим значениям, как видимо - ты пока ещё путаешься в типах значениях Никаких значений типа 4б = 138354444 и 1.058382152E-14 = 675195203 там нет. Чтобы убедиться: перейди в отладчик выдели там мою инструкцию: "willrock.exe"+22210: D9 96 C7 02 00 00 - fst dword ptr [esi+000002C7] ПКМ по ней и выбери в контекстном меню "Найти адреса, к которым обращается инструкция" И в новом появившемся окне сразу выбери тип float. Найдётся один адрес и значение в нём на воздухе будет равно 0. А когда нырнёшь, то значение начнёт расти и при значении выше 25 начнут отниматься НР.
-
У меня на 1 месте Fallout 2. (Fallout от Беседки не понравились). Ну а в коллекции Heroes of Might and Magic II Gold (и конечно же 3), The Witcher (1 и 3 части), Вся серия King's Bounty, Dark Souls - Prepare to Die Edition (второй не понравился) и Hitman Absolution. ЗЫ: Забыл - первый Дьябло и из настольных игр - Преферанс и Тысяча.