Лидеры
Популярный контент
Показан контент с высокой репутацией 26.07.2015 во всех областях
-
Создание сигнатур для чайников и ковшиков. Автор: Михаил "keng" Ремизов Дата: 26.07.15 Понадобится: -Cheat Engine (http://www.cheatengine.org) -Бумажка и ручка (из любого канцелярского магазина) -Пальцы (чтобы держать ручку и нажимать кнопки клавиатуры) Привет, поЧИТыватель! Ты - невероятно крутой геймхакер, выпускающий эксклюзивные релизы каждые 45 минут даже на те тайтлы, бюджет на которые еще не выделен. Тебя все обожают, у тебя есть деньги, власть и маленький плагин для горячо любимого тобой отладчика Olly под названием Signature Maker, который позволяет создавать так называемые сигнатуры - последовательности байт, однозначно идентифицирующие участок дизассемблированного исходного кода. Но случается так, что тебя зовут на чемпионат галактики по взлому игр и программированию трейнеров (с вами кенг!) на не самую далекую планету Kepler 452b. Билеты тебе оплачивает Роскосмос в одну сторону, NASA - в другую, и ты отправляешься, по дороге взломав предельную скорость и ускорение двигателей твоего пепелаца. На месте РЕЗКО выясняется, что компьютер со всем твоим софтом развалился на атомы во время пути, но выход есть - на планете еще задолго до зарождения разумных цивилизаций обосновался Dark Byte, который с глуповатой, странной улыбкой предоставляет тебе последнюю версию своего флагманского продукта - Cheat Engine! Проблема в том, что чудо-плагина, которым ты так привык пользоваться, нет. Что же делать? 8B FF - mov edi,edi 55 - push ebp 8B EC - mov ebp,esp F6 45 08 02 - test byte ptr [ebp+08],02 57 - push edi 8B F9 - mov edi,ecx 74 25 - je dontstarve_steam.exe+2180C5 56 - push esi 68 008EDD00 - push dontstarve_steam.exe+218E00 Проще простого! Ты не ударяешь в грязь лицом, и, найдя нужный участок кода, делаешь следующее: Выделаешь несколько строк кода и копируешь их, выбрав опцию Copy to clipboard - Bytes only (no address), или нажав Ctrl+Alt+C. Получаешь, допустим, вот такую строчку: 8B FF 55 8B EC F6 45 08 02 57 8B F9 74 25 56 68 00 8E DD 00 Делаешь в Cheat Engine новый поиск, ставишь тип Array of byte. Сколько адресов нашлось? Один? Отлично! Не один? Копируешь из отладчика на одну команду больше. Получив один-единственный результат, ты, с раскалывающейся после сверхскоростного перелета головой, начинаешь вспоминать обрывки теории. Команда находится по адресу, записывается в виде мнемоники (mov, push, call, je), состоит из опкода и операндов. Другой опкод - другая команда, но в твоем случае важно то, что при смещении адресации операнды в одних и тех же командах могут смениться. Такими операндами могут быть (в твоем случае) test, je и последний push. Сверяемся со справочными материалами по командам x86, вытатуированными на спине:2 балла
-
Привет! Примерно так: [ENABLE]alloc(newmem,2048) newmem:CMP [0064840F],5 // Берем адрес, где храним текущее значение счетчикаJE @F // Если там уже максимальное значение, то выходимINC [0064840F] // Увеличиваем счетчик// Делаем тут что-то полезноеFLDZ // Игровая инструкцияRET // Выход@@:MOV [0064840F],1 // Если счетчик достиг максимального значения - сбрасываем его на 1FLDZ // Игровая инструкцияRET // Выход "Tutorial-i386.exe"+27DA6:CALL newmem [DISABLE]"Tutorial-i386.exe"+27DA6:MOV [EBX+04],EAXFLDZdealloc(newmem)1 балл
-
Обсуждение будущей функции Я подумал, вот есть функция сравнения структур. И захотелось что-то похожее сделать по сравнению адресов прерывающихся на инструкциях. Захотелось разбивать их по группам и видеть, какие инструкции обращались к адресам из других групп или не обращались вообще. На практике выяснилось, что определение инструкции, которые работают с адресами нашего героя, союзников и врагов, довольно хлопотное дело, т.к. адресов много и картина может тут же поменяться при игре с боссами или другими персонажами. Т.е. хочется придумать помощника, который не ошибется и будет быстро определять работает ли инструкция только с одним адресом, работает ли при этом с другим адресом из другой группы В планах плагин, который будет на протяжении всей игры сортировать инструкции работающие с адресами по группам. Т.е. это позволит искать инструкции, которые работают с одной группой и не работают с другой. Самое прикольное, что из ГУИ ничего нового кроме контекстного меню не нужно. Например создать разметку в главной таблице CE Debug Мой персонаж Здоровье : 0x000000 Патроны : 0x000000 КоординатаX : 0x000000 Союзники Здоровье : 0x000000 Патроны : 0x000000 КоординатаX : 0x000000 Враг Здоровье : 0x000000 Патроны : 0x000000 КоординатаX : 0x000000 Debug Мой персонаж Здоровье : 0x000000 CodeSniffer Single Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 .... Multiple Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 .... Патроны : 0x000000 CodeSniffer Single Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 .... Multiple Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 .... КоординатаX: 0x000000 CodeSniffer Single Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 .... Multiple Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 Союзники Здоровье : 0x000000 CodeSniffer Single Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 .... Multiple Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 Патроны : 0x000000 CodeSniffer Single Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 .... Multiple Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 КоординатаX: 0x000000 CodeSniffer Single Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 .... Multiple Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 Враги Здоровье : 0x000000 CodeSniffer Single Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 .... Multiple Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 Патроны : 0x000000 CodeSniffer Single Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 .... Multiple Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 КоординатаX: 0x000000 CodeSniffer Single Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 .... Multiple Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 Debug Мой персонаж Здоровье1 : 0x000000 (прим. нашлось несколько адресов здровья нашего героя) CodeSniffer Single .... Multiple .... Здоровье2 : 0x000000 CodeSniffer Single .... Multiple .... Здоровье3 : 0x000000 CodeSniffer Single Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 .... Multiple Мой персонаж Здоровье1 (это инструкции, который сработали со здоровьем 3 и 1) Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 Здоровье2 (это инструкции, который сработали со здоровьем 3 и 2) Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 .... Союзники Патроны (это инструкции, который сработали со здоровьем 3 и патронами союзников) Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000 Враги Патроны (это инструкции, который сработали со здоровьем 3 и патронами врагов) Code(hitcount): 0x000000 Code(hitcount): 0x000000 Code(hitcount): 0x000000.... 13F76AE0B - 66 41 0F6E 71 10 - movd xmm6,[r9+10] (тут еще где-то были инструкции работающие со здоровьем союзников, не помню, некогда уточнять) 13F76AE48 - 66 41 0F6E 71 10 - movd xmm6,[r9+10] 13F72D9EB - 83 78 10 00 - cmp dword ptr [rax+10],00 13FEF8CAF - 66 0F6E 48 10 - movd xmm1,[rax+10] 13F931C49 - 8B 41 10 - mov eax,[rcx+10] (вот похожая со следующим списком) 13F9D6C31 - 66 0F6E 48 10 - movd xmm1,[rax+10] 13F931C49 - 8B 41 10 - mov eax,[rcx+10] (опа, вот инструкция которая рабтает как с боссом, так и с главным персонажем) 13FEB9851 - 83 79 10 00 - cmp dword ptr [rcx+10],00 13FEB9893 - 44 01 67 10 - add [rdi+10],r12d 13FEB989A - 44 8B 47 10 - mov r8d,[rdi+10] 13FEB98CB - 44 89 47 10 - mov [rdi+10],r8d 13FEB99FA - 83 7F 10 00 - cmp dword ptr [rdi+10],00 13F7953C7 - 83 78 10 00 - cmp dword ptr [rax+10],00 13F630C5D - 66 0F6E 48 10 - movd xmm1,[rax+10] 13FB4EF52 - 8B 40 10 - mov eax,[rax+10] 13F79581F - 83 78 10 00 - cmp dword ptr [rax+10],00 13FBB30FE - 83 78 10 00 - cmp dword ptr [rax+10],001 балл