lamalamaz Опубликовано 31 декабря, 2014 Поделиться Опубликовано 31 декабря, 2014 Здравствуйте ребята!Тут встал вопрос как выйти на указатель жизней в игре Painkiller.Коротко о движке Painengine это головная боль Так вот искал указатель через автопоиск указателей.5 уровней ничего не дало10 уровней сожрал все место на диске и просил еще(поиск длился 27000 секунд) Поиск в ручную обламал меня сразу. то есть инструкция [ecx+04],edxсмещение 4 ищем значение ecx, и тут результат 0. Есть иные методы в таких ситуациях? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 31 декабря, 2014 Поделиться Опубликовано 31 декабря, 2014 Бряк на чтение, и анализ всех инструкций. Включая анализ стека по каждой из них. Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 31 декабря, 2014 Автор Поделиться Опубликовано 31 декабря, 2014 В 31.12.2014 в 07:54, Xipho сказал: Бряк на чтение, и анализ всех инструкций. Включая анализ стека по каждой из них.Анализировал, закономерности есть вот только те адреса у которых есть некая закономерность обращаются к одной инструкции которая работает с 100500 адресами, поинтер не дает ничего .Принцип был такой инструкция [ecx+04],edx работает с over 9000 адресов(срабатывает при нанесении урона)ищем адрес жизней,нашли, ставим бряк на запись на адрес.Смотрим стек, путем анализа выясняется что по смещению [esp+14] находится некий адрес(или указатель)который указывает по кому наносится урон.То есть если написать фильтрnewmem:cmp [esp+14],[наш адрес]je playerjmp original code то фильтр сработает и после прыжка на player останется только один адрес(наших жизней).Но вот только разобраться с адресом [наш адрес] не могу, так как инструкция отвечающая за него работает с 100500 адресами опять же.... Я так понял что там огромное разветвление(огромнейшее) путем анализа кода.Как в этой куче мусора(из адресов) найти что либо не представляю.Я все это к чему, может быть тот кому интересно скачает Painkiller поломаем вместе? Взломал очень много игр(и painkiller тоже взломал). Но вот логику painkiller понять не могу. Давайте взломаем вместе .Вот моря наработка скрипт на god+1hit(работает на всех картах и со всеми боссами)[ENABLE]//code from here to '[DISABLE]' will be used to enable the cheatalloc(newmem,2048)label(returnhere)label(orig)label(cont)label(cont2)label(ss)label(ss2)label(ppz)label(ppz2)newmem: //this is allocated memory, you have read,write,execute accessmov [ppz],edimov [ppz2],ediadd [ppz],60cmp [ppz],eaxje cont //глобальный фильтр на отсев игрока и враговadd [ppz2],58cmp [ppz2],eaxje cont2jmp origcont:cmp esi,106je sscmp esi,FE //локальный фильтр отделения врагов от игрокаje ss2jmp origcont2:cmp esi,106je ss2cmp esi,FD //локальный фильтр отделения боссов от игрокаje ss2jmp origss:mov [ebx+04],(float)100pop ebxpop ecxjmp returnheress2:mov [ebx+04],0pop ebxpop ecxjmp returnhereorig:mov [ebx+04],edxpop ebxpop ecxjmp returnhereppz:dd 0ppz2:dd 0"Engine.dll"+1510F3:jmp newmemreturnhere: [DISABLE]//code from here till the end of the code will be used to disable the cheatdealloc(newmem)"Engine.dll"+1510F3:mov [ebx+04],edxpop ebxpop ecx//Alt: db 89 53 04 5B 59 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 31 декабря, 2014 Поделиться Опубликовано 31 декабря, 2014 При наличии времени качну, интересно поисследовать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Vlad2 Опубликовано 31 декабря, 2014 Поделиться Опубликовано 31 декабря, 2014 lamalamaz, .С наступающим!У меня была похожая проблема в одной игре. Долго мучился, искал, ничего не помогало. Потом психонул и в СЕ сделал такой поиск:Допустим адрес здоровья 805E6840. Искал диапазон 4 байта в Hex, от 805E0000 до 805EFFFF (можно диапазон сделать побольше).Среди найденных адресов был один статический. Я его определил, как указатель, а смещение до жизней подвел вручную.Попробуй, может получится Ссылка на комментарий Поделиться на другие сайты Поделиться
lamalamaz Опубликовано 31 декабря, 2014 Автор Поделиться Опубликовано 31 декабря, 2014 мне бы логику понять, Xipho ты многому меня научил, помоги... Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 31 декабря, 2014 Поделиться Опубликовано 31 декабря, 2014 Если будет свободное время - обязательно помогу. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 1 января, 2015 Поделиться Опубликовано 1 января, 2015 Для Painkiller - Battle out of Hell 1.64 1. Оконный режим можно сделать через 3DAnalyze.exe (если не работает, то через запуск админа) 2. Поиск в CE рабочих адресов здоровья, брони, патронов тип Double 3. Бряк на адресе здоровья показывает инструкции 1015CD11 - 8B 48 08 - mov ecx,[eax+08] - постоянно работает 1015CD17 - 8B 50 0C - mov edx,[eax+0C] - постоянно 1015C194 - 89 53 08 - mov [ebx+08],edx - при уроне (смотрим чему равен ebx) 1015C19C - 89 43 0C - mov [ebx+0C],eax - при уроне На всех адресах инструкций постоянно проскакивает огромное количество адресов и безусловно это все мешает исследовать. 4. Ставим бряк на инструкцию 1015C194 в дизассемблере нажав F5. Открываем окно бряков и пишем условие "EBX==0x00000000" где вместо нулей адрес из пункта 3. 5. Отпускаем игру по F9 и ждем пока по герою кто-нибудь ударит. После урона процесс игры останавливается и можно исследовать стек. Там по именам адресов, которые распознает CE видно, что во время удара мечом по главному персонажу вызывается какая-то функция связанная с физикой по понтеру из vTable (из таблицы виртуальных функций при наследовании и полиморфизме), потом вверх по стеку вызов на обновление MenuItem, затем идет вверх по стеку проверка, что если это не число, то ошибка (наверняка из-за Луа + С++ в игре с переводами из Double) и наконец идет запись в адрес здоровья. .... Что можно делать дальше: 1. Мы можем этот сктек с помощь CE Lua или CE AA скриптов скопировать в новую память. Затем скопировать стек для других случаев в другую новую память. Затем сравнить через окно расструктуризации Dessect Data/Structure. Возможно так можно найти зацепки для создания фильтров. После вызова vTable функции физики поток процесса игры вызывает апдейт для гуи в главном экране, а для ботов этого делать явно не будет (можно проверить через стек ботов). Можно исследовать это развилку для определения, кто свой, а кто чужой. 2. Пойти по пути последовательного поиска звеньев цепи указателя, поднимаясь на уровень выше и выше и сравнивания структуры для определения кто свой, а кто чужой. 3. Можно поискать инструкции, которые бы работали только с игроком или только те, которые работали с ботами. При этом надо еще постараться найти адрес здоровья ботов. Если что-то узнаю еще, то напишу... Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения