Перейти к содержанию

MasterGH

Ветераны
  • Постов

    2 999
  • Зарегистрирован

  • Победитель дней

    129

Весь контент MasterGH

  1. По идеи если установишь координаты дальше стены, то можешь проходить сквозь. Узнав координату Z, ты выйдешь на все остальные: X, Y. И возможно ещё координаты вектора прицела. По ним некоторые умники делают аимботы с раздачей хедшотов в мультиплерных играх. Там не double, а там 4 float значения, которые можно уместить в 128-ми разрядный регистр XMM Иными словами 4 раза по 32 разряда (по 4 байта) Должен сказать, что эта игра на мой взгляд гораздо лучше оптимизирована чем большинство других ранее 2009 года. В этой игре очень много инструкций из набора SSE. Уже хочешь не хочешь, а надо учить все тонкости работы со скалярными и векторными инструкциями типа movq [esi+30],xmm0 Пока всё на рабочую Z выйти не могу - экран дёргается, а вместо этого герой должен падать. От структуры героя по смещению +A0 находится какое-то значение которое связано с Z
  2. Проект CheatEngine (CE): Сайт оригинальной версии: 1.CheatEngine (скачать CE со страницы+ закачка исходников) 2.CheatEngine SVN(слежение за обновлениями исходников) 3.Перейти на форумСайт старой русской версии CE 5.5 (может быть обновлю): 1.Главная страница Проект OllyDbg: 1.Главная страница Проект MemoryHackingSoftware (MHS): 1.Скачать MHS со страницы 2.Перейти на форумПроект Artmoney: 1.Скачать Artmoney со страницы Проект GameHacking.com: 1. Перейти на форум
  3. Более полные справочники: [ENG] 64-ia-32-architectures-software-developer-vol-2a-manual.pdf 64-ia-32-architectures-software-developer-vol-2b-manual.pdf Instruction_Set_Reference.pdf CE ASM Basics 1 (*new) CE ASM Basics 2 (*new) CE ASM Basics 3 (*new) [RU] Архитектура x86 (*new) CPU FPU SIMD (MMX, SSE, SSE2, SSE3, SSSE3). Рассмотрим основные инструкции. Инструкции можно разделить на три блока * CPU (работа над целыми числами), * FPU (работа над вещественными), * SIMD инструкции (работа с массивами чисел). CPU (окно регистров) CPU(основные команды): FPU (окно регистров) Основные FPU(команды): SIMD(окно регистров) Эти регистры встречаются довольно редко и в основном в играх стратегиях, т.е. в играх в которых участвует большое количество объектов (юнитов, зданий, и т.п.) Про эти регистры вы можете посмотреть здесь, если будет нужно.
  4. Конечно есть опыт. Я делал на старой игре Академии Джедаев. Надо найти адрес Z координаты, пока я всё её найти не могу. Предположительно этот адрес должен быть в структуре игрока. Затем самый простой способ, это в часто обращаемую инструкцию вписывать изменяющийся пользовательский параметр высоты. А супер прыжок я не делал. Хотя интересно было бы. Ведь тут нужно найти адрес массы героя из его структуры и изменить его. А на него можно выйти через бряк на запись в координату Z. Изменяем массу и получаем прыжок.
  5. Его можно задать выучив наконец CPU-ассемблерные инструкции.
  6. А вы попробуйте сделать так называемый "float - режим" или полёта героя, чтобы можно было подняться из ямы по горячим клавишам. Для этого надо искать координаты перемещения, ставить бряки и т.п. Я тоже игру скачал Попробую сделать этот режим. Но я не могу сделать оконный режим (пока не получилось )
  7. Ты трассировкой вычислял, а я "определением адресов на инструкции" изворачивался
  8. Хотел бы вам указать кое-какую особенность на мой взгляд очень важную. Новичкам будет полезно. Уж так получается, что аппаратный бряк пропускает инструкцию, а бряк на памяти не пропускает. Посмотрим на примере. Поменяем настройки И будет К примеру аппаратный бряк следующей инструкции от нас скроет значение адреса памяти: mov eax,[eax] // здесь не известно каким был eax до выполнения инструкцииЕсли же мы поставим бряк на память, то мы узнаем регистры до выполнения инструкции, т.е. узнаем чему был равен [eax]. Так мы узнаем чему равно начало структуры в такой ситуации mov eax, [eax+edi*esi+8]Жаль, что я не обратил внимание на это раньше так много бы времени сэкономил.
  9. [sp=Проверка не окончательная][ENABLE] aobscan(_faddress,f3xxxxxxxxxxxxxx0fxxxxxxxxxxxx76xx8bxxxxxxxxxx85xx74xx8bxxe8xxxx) alloc(_newmem,2048) registersymbol(_dead) // как только я инициализирую _dead - игра виснет, даже если я не использую переменную в своей инъекции! label(_dead) label(_returnhere) label(_originalcode) _newmem: movss xmm0,[eax+000001e4] comiss xmm0,[_dead] //с этой строкой игра виснет. И без неё тоже (при попытке объявить переменную _dead) // comiss xmm0,[agpmeventloggingenabled+3fcff4] //сравнение с нулём - с этой строкой игра не виснет jna _returnhere //жизни ушли в ноль - отключаем чит mov [eax+000001e4],(float)1 //если остались живы - восстанавливаем 100% здоровья _originalcode: movss xmm0,[eax+000001e4] jmp _returnhere _faddress: // 007387BC = AgPmEventLoggingEnabled+1683FC jmp _newmem nop nop nop _dead: dd 0 _returnhere: (! ошибка) [DISABLE] aobscan(_faddress,9090900fxxxxxxxxxxxx76xx8bxxxxxxxxxx85xx74xx8bxxe8xxxx) _faddress-5: movss xmm0,[eax+000001e4] dealloc(_newmem) unregistersymbol(_dead) //Alt: db F3 0F 10 80 E4 01 00 00[/sp] Также проследи за флагами возможно надо сохранять флаги pushf до сравнения и восстанавливать после popf Посмотри в отладке в OllyDbg как выполняется код. Загляни в справочник по инструкциям (привел некоторые) [sp=Таблица. Инструкции расширения SSE]Инструкция Описание Пересылка данных с участием регистров ХММ MOVAPS Пересылка 128-битных данных между памятью и регистрами ХММ или между регистрами ХММ. Данные в памяти должны быть выровнены по границе 16-байтного параграфа MOVUPS Пересылка 128-битных данных между памятью и регистрами ХММ или между регистрами ХММ (без требования выравнивания) MOVHPS Пересылка 64-битных данных между памятью и старшей половиной регистров ХММ или между регистрами ХММ (младшая половина ХММ не изменяется) MOVHLPS Пересылка старшей половины источника в младшую половину назначения (старшая половина регистра назначения не меняется) MOVLHPS Пересылка младшей половины источника в старшую половину назначения (младшая половина регистра назначения не меняется) MOVLPS Пересылка 64-битных данных между памятью и младшей половиной регистров ХММ или между регистрами ХММ (старшая половина ХММ не изменяется) MOVMSKPS Сборка старших бит упакованных операндов из регистра ХММ в регистр общего назначения (биты 31, 63, 95 и 127 регистра ХММ попадают в биты О, 1, 2 и 3 регистра-приемника, остальные биты приемника будут нулевыми) MOVSS Пересылка скалярного операнда (младшие 32 бита) между памятью и регистрами ХММ или между регистрами ХММ Арифметические инструкции над числами в FP-формате в регистрах ХММ ADDPS Векторное сложение SUBPS Векторное вычитание ADDSS Скалярное сложение SUBSS Скалярное вычитание MULPS Векторное умножение MULSS Скалярное умножение DIVPS Векторное деление DIVSS Скалярное деление SQRTPS Векторное извлечение квадратного корня SQRTSS Скалярное извлечение квадратного корня MAXPS Векторное нахождение максимума MAXSS Скалярное нахождение максимума MINPS Векторное нахождение минимума MINSS Скалярное нахождение минимума Сравнение CMPPS Векторное сравнение (задается полный набор 12 условий, как в инструкциях условных переходов). В том элементе операнда назначения, для которого условие сравнения выполняется, устанавливаются все единицы (32 бита), где не выполняется - все нули CMPSS Скалярное сравнение (12 условий), аналогично предыдущему, но только для младших 32 бит COMISS Скалярное сравнение с установкой бит ZF, PF и CF регистра EFLAGS (биты 0F, SF и AF обнуляются) UCOMISS Скалярное сравнение, но без генерации исключения в случае NaN (при этом ZF=PF=CF=1) ситуация несравнимости может возникнуть, если один из операндов является NAN или бесконечностью Пример работы сравнения, но уже не блоком SSE, а FPU ... fcomp Number;сравнили ST(0) с Number, ;установили нужные флаги fstsw [status];выгрузили слово состояния сопра ;в заранее объявленную двухбайтную переменную Status fwait;выполняем синхронизацию ;пусть сопр отдохнёт ;дальше работает CPU mov ax, [status];грузим слово состояния в регистр ax ;при этом старший байт слова состояния окажется в ah sahf;загружаем ah в младший байт регистра eflags ...[/sp] Терпение и попытка за попыткой и всё получится... Я лично подсказать не могу, потому что чувствую, что нагорожу ошибок. Насчёт дробовика, думаю справишься скоро.
  10. Профессиональный hex-редактор, главным отличием которого от WinHex является наличие С-подобного скриптового языка, заметно упрощающего работу при исследовании файла. Так же радует большое количество встроенных инструментов: калькулятор, подсчет контрольных сумм и т.д. Часть мануала из справки этой программы: Introduction to Templates and Scripts
  11. -Создать проект WindowsForms (или дргого типа), сохранив его в некоторую директорию. -Скомпилировать проект (нажать F9) -Получиться и запустится exe файл находящийся в директории проекта.
  12. MasterGH

    DarkSector

    Версия игры 1.0; версия трейнера 1.0; +4; дата создания 13.12.2009 Описание: 1) Здоровье 2) Без перезарядки 3) Боеприпасы 4) Деньги Трейнер:DS_trainer.rar Дополнительная информация:
  13. Вряд ли, функция состоит из одной инструкции, даже ret-а нет. Я заметил, что тебе не хватает знаний для самостоятельного анализирования. Вот статьи с примерами как работать с OllyDbg. При обмане игр эти знания всегда будут кстати. Кваз уже прочитал некоторые (наверно), что и всем советую. Мне терпения прочитать хватило только 17 , а остальные - быстро пролистать (надо заставить себя и прочитать всё-таки все, когда будет время). Именно по ним я научился ставить брейкпоинты на сообщения. Например, на сообщения клика мышки по кнопке применения заклинаний, что позволило мне заострить внимание на нужной ветки кода в Дисайплс 3 и помогло мне сделать чит на запрет отмены заклинаний. Также хороший приём что-то узнать - это в OllyDbg по ветке кода делать условные прыжки безусловными или наоборот - нопить их. Так я сделал относительную невидимость в ManHunt 2, но с ней всё-таки так и не смог разобраться до конца - главному герою нужно отойти пешком сторону, чтобы враги его потеряли (Лив, уже опробовал )
  14. У меня голова сонная, может у кого посветлее и кто-то сможет разобраться. Вот вариант на C переданой функции, которую Акама привёл на асме. Сама функция [cod]int __fastcall sub_9CA090(int a1, int a2, int a3, int a4, int a5) { int result; // eax@1 int v4; // edi@1 int v5; // esi@1 result = a4; v4 = a3; v5 = *(_WORD *)(a3 + 6) & 0x3FFF; /* "если у меня было 7 ножей, а я исправил на 10, то игра всё равно думает что ножей 7, а если восьмой пытаешься кинуть, то игре краш" (Akama ©) Возможно здесь идёт проверка и будет закрытие игры внутри vС18AE0 */ if ( a4 + 1 < (unsigned int)v5 ) result = vС18AE0(*(_DWORD *)a3 + a5 * a4, *(_DWORD *)a3 + a5 * (a4 + 1), a5 * (v5 - a4 - 1)); *(_DWORD *)(v4 + 4) ^= (*(_DWORD *)(v4 + 4) ^ ((v5 - 1) << 16)) & 0x3FFF0000; return result; }[/cod] Она же на асме [cod]009CA090 - 55 - push ebp 009CA091 - 8b ec - mov ebp,esp 009CA093 - 8b 45 08 - mov eax,[ebp+08] 009CA096 - 56 - push esi 009CA097 - 57 - push edi 009CA098 - 8b f9 - mov edi,ecx 009CA09A - 0f b7 77 06 - movzx esi,word ptr [edi+06] 009CA09E - 81 e6 ff 3f 00 00 - and esi,00003fff 009CA0A4 - 8d 48 01 - lea ecx,[eax+01] 009CA0A7 - 3b ce - cmp ecx,esi 009CA0A9 - 73 27 - jae 009ca0d2 009CA0AB - 53 - push ebx 009CA0AC - 8b 17 - mov edx,[edi] 009CA0AE - 8b de - mov ebx,esi 009CA0B0 - 2b d8 - sub ebx,eax 009CA0B2 - 83 eb 01 - sub ebx,01 009CA0B5 - 0f af 5d 0c - imul ebx,[ebp+0c] 009CA0B9 - 53 - push ebx 009CA0BA - 8b 5d 0c - mov ebx,[ebp+0c] 009CA0BD - 0f af cb - imul ecx,ebx 009CA0C0 - 0f af c3 - imul eax,ebx 009CA0C3 - 03 ca - add ecx,edx 009CA0C5 - 51 - push ecx 009CA0C6 - 03 c2 - add eax,edx 009CA0C8 - 50 - push eax 009CA0C9 - e8 12 ea 24 00 - call 00c18ae0 009CA0CE - 83 c4 0c - add esp,0c 009CA0D1 - 5b - pop ebx 009CA0D2 - 83 c6 ff - add esi,ff 009CA0D5 - c1 e6 10 - shl esi,10 009CA0D8 - 33 77 04 - xor esi,[edi+04] 009CA0DB - 81 e6 00 00 ff 3f - and esi,3fff0000 009CA0E1 - 31 77 04 - xor [edi+04],esi << здесь у Акама был бряк EAX=6FF30060 EBX=6FF30064 ECX=00000000 EDX=00000000 ESI=00030000 EDI=70D50FA8 EBP=04D5FCD8 ESP=04D5FCD0 EIP=009C93C4 009CA0E4 - 5f - pop edi 009CA0E5 - 5e - pop esi 009CA0E6 - 5d - pop ebp 009CA0E7 - c2 08 00 - ret 0008[/cod] Акама если не лень, приведи ещё инструкции с адреса "00c18ae0", он может быть другим. Можешь сориентироваться по строчке своего кода. 009CA0C9 - e8 12 ea 24 00 - call 00c18ae0 Например, тут нужно прыгнуть на адрес 00c18ae0 и привести от него все инструкции до конца функции. Надеюсь ты понял как визуально определить функцию по тому как я её вытащил из твоего примера. ------------------------------------ Если попытаться всё упростить, добавив лишнюю переменную T T = ?; // не известно чему равно M = ((B ^ C) & 0x3FFF0000); A = T ^ M A = 0x30000 (зашифрованное кол-во кинжалов) Пытаемся развернуть: T = A ^ M = A ^ ( ((B ^ C) & 0x3FFF0000) ) // отсюда можно узнать B зная C и T, или C зная B и T. B = A ^ T = A ^ "?" Причём знак вопроса можно углядеть из регистров в отладке. Короче мне надо знать чему равен знак вопроса и чему равны B и C, что из них константа (сейчас я этого не могу увидеть). В общем я без отладчика как без рук. Надо качать игру а мне сейчас не до этого. Кинжалы там скорее не объекты, поэтому закрытие игры происходит только при обстоятельствах, которые уже были приведены.
  15. Так может происходит по нескольким причинам. 1. Предусмотрено некоторое значение (оно может быть зашифровано) связанное с количеством ножей. Перед изменением количества ножей идёт проверка со связанным значением, если она не удалась - то вылет. Это легко проверить в OllyDbg. Поэтому надо учиться работать с ним. 2. Каждый нож - это объект, который входит в список коллекции объектов "Нож". Он представляет собой кусок памяти, который создаётся и разрушается при кидании ножка. Так было с патронами в Сталкерах, так было в игре BloodDarknes что-ли, когда там стрелы были как объекты (кто-то года три назад раскричался, что стрелы не взламываемые, дескать стрелы это сам код игры по воле случая создания игры ) Если с ножами также, то наверно ты не разберёшься. Я с патронами в СТАЛКЕРЕ разобрался практически не позволяя им уменьшаться, но боллее глубо копать не стал. Так же могут быть и другие случаи. А узнать "что и как происходит" поможет только хороший отладчик/дизассемблер.
  16. Что значит "Типа припустил" !? Ты сдался ? Кстати OllyDbg-ом и тем более IDA необходимо научится пользоваться хотя бы на минимуме и только после этого пользоваться отладчиком CE. Там где шифрование (в случае этой игры) удобнее пользоваться OllyDbg, т.к. по интуиции ты сразу увидишь как всё происходит. Если Акама решил покупать лицензию, то он пропадёт с форума как минимум на трое суток и будет играть и играть всё это время ))))
  17. Отлично, но этого мало. 1. Приведи все дизаассемблерные инструкции выше и ниже входящие в некоторую функцию. 2. Приведи регистры до выполнения 009c93b8 - xor esi,[edi+04] и вновь на 009c93b8 - xor esi,[edi+04] Если тебе что-то не понятно, то 1) Перед 009c93b8 в отладчике поставь F5. 2) В игре кинь ножь, игра прервётся. Скопируй все регистры. 3) Выполни один раз инструкцию - F7. Скоприуй все регистры. 4) Выдели блок инструкции в дизассембелере CE в который входит 009c93b8 - xor esi,[edi+04]. Этот блок обычно логически отделён мелкими: нопами, нулями, ret-ми. Ну или просто выдели вверх инструкций 50 и в низ инструкций 20 и скопирую сюда.
  18. Приводи точную и чёткую информацию. Я просил привести тебя значения регистров на инструкции xor [ecx+4],eax - это мимо твоего внимания проходит (как насквозь), как будто я сам с собой разговариваю. Если листинг не приведёшь, тогда это не ко мне.
  19. Если требуется помощь, приводи значения регистров с указанием, какое значение отвечает за количество кинжалов и всю функцию (дизассемблированного кода из OllyDbg) под спойлер. В противном случае я могу только гадать.
  20. Ого! Уже вышла... ))) Ты толком напиши, что в регистрах, где расшифрованное и где зашифрованное значение, какой тип данных Мне проще готовый ответ дать чем много писать
  21. Тема. Горячие клавиши в Автоассемблере. Некоторые хот-кеи (возможное не все): 1. Ctrl+Shift+I - сдвиг выделенного блока вправо 2. Ctrl+Shift+U - сдвиг выделенного блока влево 3. Ctrl+Shift+(1,2,3...) - поставить закладку (если она вам нужна в огромных скриптах) 4. Ctrl+(1,2,3...) - переход на закладку 5. Ctrl+Shift+N - вкл/выкл построчного выделения 6. Ctrl-T удалить от курсора до конца слова 7. Ctrl-Y удалить строку Стандарт (думаю вы знаете): Ctrl+F - поиск Ctrl+C - копирование Ctrl-X вырезать Ctrl+V - вставка Ctrl+A - выделить весь текст
  22. Я не когда не задумывался насколько полезны некоторые горячие клавиши при программировании в Дельфи в больших проектах: в частности переходы по закладкам, по процедурам, конструирование шаблонов и др. Кому нужно, то берите на заметку.
  23. Пашет на сапере XP Проверял собственноручно и скриншот мой.
  24. Реально с обходом ловушек антиотладки если они там присутствуют.
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.