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

MasterGH

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

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

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

    129

Сообщения, опубликованные MasterGH

  1. Давненько не было обновлений, поэтому сделал на скорую руку.

    Основные изменения коснулись окна прерывающихся инструкций.

    79060530.th.gif

    Бета тест 5.

    Ссылка на CE RUS

    Проверить перевод и нововведения ниже.

    1. Переведены настройки (Aliast-ом)

    2. Сделал более точное выравнивание колонок в дизассеблере (правда не тестировал как следует)

    3. Добавил счётчик хит-коунтов и пользовательские чекбоксы.

    Двойной клик по инструкции выводит в дизассемблер.

    Изменил расположение элементов в окне прервавшихся инструкций

    4. В автоассеблере убраны пустые строки + при генерации шаблона комментируется адрес внедрения.

    5. Попытка автоматического реверсинга (пока не работает)

    Пока на этом всё.

  2. 00C18AE0 - 55 - push ebp

    Вот то что ты просил...

    Вряд ли, функция состоит из одной инструкции, даже ret-а нет.

    Я заметил, что тебе не хватает знаний для самостоятельного анализирования. Вот статьи с примерами как работать с OllyDbg. При обмане игр эти знания всегда будут кстати. Кваз уже прочитал некоторые (наверно), что и всем советую. Мне терпения прочитать хватило только 17 , а остальные - быстро пролистать (надо заставить себя и прочитать всё-таки все, когда будет время). Именно по ним я научился ставить брейкпоинты на сообщения. Например, на сообщения клика мышки по кнопке применения заклинаний, что позволило мне заострить внимание на нужной ветки кода в Дисайплс 3 и помогло мне сделать чит на запрет отмены заклинаний.

    Также хороший приём что-то узнать - это в OllyDbg по ветке кода делать условные прыжки безусловными или наоборот - нопить их. Так я сделал относительную невидимость в ManHunt 2, но с ней всё-таки так и не смог разобраться до конца - главному герою нужно отойти пешком сторону, чтобы враги его потеряли (Лив, уже опробовал :) )

  3. У меня голова сонная, может у кого посветлее и кто-то сможет разобраться. Вот вариант на 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, что из них константа (сейчас я этого не могу увидеть). В общем я без отладчика как без рук. Надо качать игру :) а мне сейчас не до этого.

    Кинжалы там скорее не объекты, поэтому закрытие игры происходит только при обстоятельствах, которые уже были приведены.

  4. Так может происходит по нескольким причинам.

    1. Предусмотрено некоторое значение (оно может быть зашифровано) связанное с количеством ножей. Перед изменением количества ножей идёт проверка со связанным значением, если она не удалась - то вылет. Это легко проверить в OllyDbg. Поэтому надо учиться работать с ним.

    2. Каждый нож - это объект, который входит в список коллекции объектов "Нож". Он представляет собой кусок памяти, который создаётся и разрушается при кидании ножка. Так было с патронами в Сталкерах, так было в игре BloodDarknes что-ли, когда там стрелы были как объекты (кто-то года три назад раскричался, что стрелы не взламываемые, дескать стрелы это сам код игры по воле случая создания игры :D )

    Если с ножами также, то наверно ты не разберёшься. Я с патронами в СТАЛКЕРЕ разобрался практически не позволяя им уменьшаться, но боллее глубо копать не стал.

    Так же могут быть и другие случаи. А узнать "что и как происходит" поможет только хороший отладчик/дизассемблер.

  5. Что значит "Типа припустил" !? Ты сдался ? o_0

    Кстати OllyDbg-ом и тем более IDA необходимо научится пользоваться хотя бы на минимуме и только после этого пользоваться отладчиком CE. Там где шифрование (в случае этой игры) удобнее пользоваться OllyDbg, т.к. по интуиции ты сразу увидишь как всё происходит.

    Если Акама решил покупать лицензию, то он пропадёт с форума как минимум на трое суток и будет играть и играть всё это время ))))

  6. Отлично, но этого мало.

    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 и скопирую сюда.

  7. Приводи точную и чёткую информацию.

    Я просил привести тебя значения регистров на инструкции xor [ecx+4],eax - это мимо твоего внимания проходит (как насквозь), как будто я сам с собой разговариваю. Если листинг не приведёшь, тогда это не ко мне.

  8. Если требуется помощь, приводи значения регистров с указанием, какое значение отвечает за количество кинжалов и всю функцию (дизассемблированного кода из OllyDbg) под спойлер.

    В противном случае я могу только гадать.

  9. Тема. Горячие клавиши в Автоассемблере.

    Некоторые хот-кеи (возможное не все):

    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 - выделить весь текст

  10. Я не когда не задумывался насколько полезны некоторые горячие клавиши при программировании в Дельфи в больших проектах: в частности переходы по закладкам, по процедурам, конструирование шаблонов и др.

    Кому нужно, то берите на заметку.

    F1 контекстная помощь

    F3 продолжить поиск (начать – Ctrl+F )

    F4 выполнить программу до положения курсора

    F5 поставить Break Point

    F7 трассировать с заходом в процедуры

    F8 трассировать без захода в процедуры

    F9 запустить программу

    F10 активизировать главное меню

    F11 открыть/закрыть Object Inspector

    F12 переход между формой и кодом

    Ctrl-F1 контекстная помощь

    Ctrl-F2 прервать выполнение программы

    Ctrl-F3 посмотреть стек

    Ctrl-F4 закрыть текущий модуль

    Ctrl-F5 список переменных для просмотра (Watch List)

    Ctrl-F7 просмотр значений переменных и их изменение

    Ctrl-F9 компилировать проект

    Ctrl-F10 активизировать главное меню

    Ctrl-F11 открыть проект

    Ctrl-F12 список модулей проекта

    Shift-F7 трассировка заходя в каждую процедуру и перескакивание в каждое возникающее событие

    Shift-F10 всплывающее меню

    Shift-F11 добавить модуль к проекту

    Shift-F12 список форм проекта для быстрой навигации

    Alt-F4 закрыть проект и все файлы

    Alt-F6 переключение окон

    Alt-F8 переход к следующей ошибке компиляции

    Alt-F7 переход к предыдущей ошибке компиляции

    Ctrl-Shift-F4 закрыть проект и все файлы

    Alt-Ctrl-F11 менеджер проектов

    Alt-Shift-F4 закрыть все окна, но проект не закрывать

    Ctrl-Shift-0..9 поставить метку 0..9

    Ctrl-0..9 перейти на метку 0..9

    Alt-0 список окон

    Ctrl-Enter открыть файл с именем слова на котором курсор стоит

    Ctrl+клик

    мышкой

    на слове перейти на определение этого слова

    Alt+выделение

    текста

    (мышкой или

    клавиатурой) выделение вертикального блока

    Ctrl+Shift+Up

    Ctrl+Shift+Down переход от объявления процедуры к ее реализации

    Ctrl-Shift-C закончить метод (если он описан – создать шаблон для реализации,если есть реализация – объявить метод)

    Ctrl+Space высветить список методов, свойств объекта (после точки)

    Ctrl+

    Shift+Space высветить список параметров функции

    Ctrl-Shift-E открыть эксплорер кода

    Ctrl-Shift-R начать/завершить запись макро

    Ctrl-Shift-P выполнить записанное макро

    Ctrl-Shift-T добавить в To Do лист

    Ctrl-Shift-U уменьшить отступ выделенного блока

    Ctrl-Shift-I увеличить отступ выделенного блока

    Ctrl-Shift-S сохранить как

    Ctrl-Shift-G вставить GUID

    Ctrl-Shift-B посмотреть иерархию классов

    Ctrl+Shift+Y удалить от курсора до конца строки

    Ctrl+Shift+Z redo

    Ctrl-Alt-W watch List

    Ctrl-Alt-R grep result

    Ctrl-Alt-T список потоков проекта

    Ctrl-Alt-A вставить дату

    Ctrl-Alt-S вызовы стека

    Ctrl-Alt-H шаблон для документации модуля

    Ctrl-Alt-L локальные переменные

    Ctrl-Alt-V история событий

    Ctrl-Alt-B список Break Points

    Ctrl-Alt-M Модули

    Ctrl-N вставить пустую строку, курсор остается на текущей строке

    Ctrl-M

    Enter вставить пустую строку, курсор переходит на следующую строку

    Ctrl-E поиск по мере введения символов (Incremental Search)

    Ctrl-R поиск и замена

    Ctrl-A выделить весь текст (только Дельфи 6+)

    Ctrl-T удалить от курсора до конца слова

    Ctrl-Y удалить строку

    Ctrl-O, O вставить все текущие опции компиляции по позиции курсора

    Ctrl+O, C marks a column block

    Ctrl+O, I marks an inclusive block

    Ctrl+O, K marks a non-inclusive block (default when the editor starts)

    Ctrl+O, L marks a line as a block

    Ctrl-P префикс, после которого можно вставить любой ASCII код

    Ctrl-S сохранить текущий файл

    Ctrl-F открыть диалог поиска

    Ctrl-J лист шаблонов

    Ctrl-K, С копирование блока без буфера обмена

    Ctrl-Z отмена

    Ctrl-X вырезать

    Ctrl-С копировать

    Ctrl-V вставить

    Ctrl-B список буферов

    Ctrl+K, R читать блок из файла

    Ctrl+K, W записать блок в файл

    Ctrl+O, U изменить регистр букв в блоке на противоположный

    Ctrl+O, A диалог: “открыть файл”

    Ctrl+O, G переход к строке номер…

    Ctrl+K, E перевод слова в нижний регистр

    Ctrl+K, T выделить слово

    Ctrl+K, Y удалить выделенный блок

    Ctrl+K, U unindent block

    Ctrl+K, I indent block

    Ctrl+K, P печать текста

    Ctrl+K, F перевод слова в вверхний регистр

    Alt+[

    Alt+] найти соответствующую скобку

    Ctrl+Q, P вернуть курсор на место последнего редактирования

  11. Отличная статья.

    Кое-что нашим пользователям.

    1. Полезно и всегда проще сканировать память, когда игра находится в оконном режиме. Тем более если выполнять пошаговую отладку.

    На нашем форуме написаны статьи как ставить оконный режим.

    Я в olly нопил все вызовы

    LONG ChangeDisplaySettings(

    LPDEVMODE lpDevMode, // графический режим

    DWORD dwflags // параметры графического режима

    );

    Затем я сохранял исполняемый файл и получал оконный режим, размер которого задаёте в настройках. Не рассчитывайте что начиная с Vista (Windows 7) всегда можно сделать оконный режим. Пример тому игра Руссич 13 век.

    2. Учитывая, недавнюю "новинку" - поиск адреса внедрения по проверочным байтам, а также не 100% cтабильность работы с код-кейвами, рекомендуется внедрять чит-код в выделенную память и пользоваться проверочными байтами, которые генерируются в 4 бете CE RUS.

    3. Существует некоторые количество вариантов написания скриптов по внедрению тела чит-кода. Читайте статьи, изучайте скрипты на нашем форуме и на форуме Cheat Engine.

  12. В общем вчера (а может и не вчера) даркбайт выложил CE с исправленным косяком нерабочести скриптов при генерации тренеров.

    А какой это конкретный косяк? :)

    Обновил папку с русским CE, но в CE Rus скрипты в тренере по прежнему не пашут... В аглийском CE пашут, да ещё и размер сгенерированного тренера уменьшился до 700 кб, т.е. в 2 раза.

    Так же поясни, какие скрипты "не пашут" в каких случаях. Ты имеешь ввиду игру "Дальнобойщики", когда через разные функции происходит внедрение чит-кода?!

    На счёт размера... 700 кб это не предел, я смог вместе с jpg картинкой сжать до 240 кб (Xipho дал исходники своего двига и я попробовал прикрутить к нему автоассемблер). Но все равно это много. У меня была мысль создать особый вид трейнера, который будет занимать места почти столько сколько картинка и музыка, и скрипт. А всё остальное будет в виде 240 кб-ной библиотеки, которую необходимо зарегистрировать инсталлятором для CE RUS 5.6 v1.0. Но потом у меня вновь появилась идея, которая перекрыла это всё. Создание TrainerMax. В этом случае от CE не потребуется редактор трейнеродела (и мне не потребуется возится с ним).

  13. Частые ошибки

    1) Сначала создайте память под тело и напишите в ней код чит-кода, а затем пишите прыжок на адрес выделенной памяти

    2) Сначала отмените прыжок, а затем уничтожайте выделенную память

    3) Если у Вас codecave в уже существующей памяти, то сначала в codecave напишите код, а затем делайте на codecave прыжок

    4) Будьте внимательны в расчёте количества нопов

    5) Будьте внимательны с логикой кода, вы не должны вызывать крах игры

    Редкие и пакостные моменты при внедрении чит-кодов

    1) При внедрении чит-кода нужно следить за регистром флагов. Если он потребуется при выходе из выделенной памяти,то условие не будет правильно выполняться. Выход - поставить pushfd перед сравнениями в выделенной памяти и поставить popfd при выходе из выделенной памяти.

    2) Ещё очень важное редкое явление, когда на затёртые инструкции оригинального кода могут уже быть прыжки. Т.е. на инструкции где вы ставили nop-s могут быть прыжки. Будет крах игры если какое-то условие не выполниться по логике кода.

    3) Этот касается "острых" моментов, таких где происходят манипуляции со стеком. Учитывайте что call кладёт в стек адрес для обратного вызова по ret. А это значит что сдвигаются смещения по esp внутри тела чит-кода и могут сдвинуться по ebp. У Xipho была статья об этом, точно не помню. Соответственно нужно обращать внимание ещё и когда вы вызываете ret и кладёте в стек что-то.

    4) Данные помещаемые в регистры XMM должны быть кратны 16 байтам! Иначе могут быть глюки с изображением в игре.

    5) Если у Вас неправильно работает скрипт и игра тут же закрывается с критической ошибкой, то у вас есть все инструменты (отладчики) чтобы проверить логику и ошибку. Поставьте игру в конный режим (или сделайте его по нашим статьям) и проведите пошаговую отладку. Не знаете как это сделать, то задайте вопрос на форуме.

    • Плюс 1
  14. Можно перейти в отладчик по инструкции и нажать комбинацию: ctrl+M.

    Либо печатаешь вручную, либо дальше добавляешь адрес инструкции из отладчика в таблицу CE и дважды кликаешь по нему, появится окошко из которого можно скопировать в буфер "Process.exe+XXX". Пока других способов нет.

  15. Кнопка "Отмена" будет нормально работать в следующей бета-версии.

    Поиск float одинков. Проверял сейчас на игре на двух версиях: на оригинальной и русской (последней бета). Запускал версии по отдельности.

    SERGANT, по поводу добавления утилит в окно отладчика. Мне кажется, что хватает списка утилит в главном окне. Как писал aliast, также же можно назначить горячие клавиши и по ним в окне отладчика вызывать к примеру калькулятор :)

  16. Выкладываю исходники для CE 5.6 RUS (v 1.0) (Бета тест 4) (ссылка сроком на 30 дней)

    Ссылка (13 мб, "CE 56 RUS.rar")

    aliast, уже сделал перевод настроек и тутора, чего в этих исходниках нет, но я включу эти изменения позже.

    Когда я сделаю следующий бета-тест пока не знаю.

  17. Если у вас есть предложения, замечания касающихся всех выложенных трейнеров в форуме "Трейнеры". Такие как офорление, выбор хостинга, техническая сторона, некоторые предложения, предложения по правилам оформления и т.п. - всё на что могут обратить внимание все авторы трейнеров, то можно написать об этом здесь.

  18. CE таким правилом медленно сканирует float значения (если ты им пользовался).

    Я использую MHS, когда уверен, что нужно искать float или Artmoney, когда уверен, что нужно искать как 1,4 байта целое так и float все вместе взятые.

    Ещё есть вариант, найти например патроны и в этом блоке или даже в ближайших регионах памяти поискать правилом, которое ты написал.

    Ну, ещё вариант может Кваз подскажет, наверно, он нашёл )

  19. Друзья, вот для вас ещё бета тест.

    Бета тест 4. (если нет желания идти к первому посту, то вот ссылка)

    Требуется: протестировать авто выравнивание колонок в отладчике, также генерацию проверочных байт.

    mira.th.gif

    Осталось ещё более менее оформить окно прервавшихся инструкций, сделать в нём пару модификаций, перевести окно настроек...

    Если у кого есть желание помочь в исходниках переведите форуму настроек через объектный инспектор, я переводом настроек буду заниматься через дня три.

    Вы можете мне очень помочь ещё кое в чём. Накачайте кучу патчев, NoDVD к играм и тестите проверочные байты. Если будет ошибка для некоторых патчей, то скопируйте участки байт (ctrl+c) обоих патчей в отладчике и запостите сюда.

    Скрипт генерируется теперь вот так, это стандартный шаблон, будет ещё где-то два или три (вытаскивание указателя, сравненение с указателем, ):

    [cod][ENABLE]

    aobscan(_faddress,e8xxxxxxxxe9xxxxxxxxxx8bxx83xxxxxxxxxxxx8dxxxxe8xxxxxxxx8bxxxx0f)

    alloc(_newmem,2048)

    label(_returnhere)

    label(_originalcode)

    _newmem:

    mov [],eax //mov eax,

    _originalcode:

    call manhunt2.exe+22a423 //старайтесь чтобы не было таких инструкции в выделенной памяти, это же касается

    //некоторых прыжков, т.к. "+22a423" в разных патчах меняется. Пока я над этим работаю.

    jmp _returnhere

    _faddress:

    jmp _newmem

    _returnhere:

    [DISABLE]

    aobscan(_faddress,e9xxxxxxxxxx8bxx83xxxxxxxxxxxx8dxxxxe8xxxxxxxx8bxxxx0f)

    _faddress-5:

    call manhunt2.exe+22a423

    dealloc(_newmem)

    //Alt: db E8 7D E1 00 00[/cod]

    Раньше я думал, что под [DISABLE] не должно быть сканирования, но я ошибался. Игра может изменить место положения инструкции (Игра Русич 13 век).

    ps. Указывайте на мои ошибки. Я по русскому не был отличником. Сейчас нашёл в окне "вибирите". Уже исправил.

×
×
  • Создать...

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

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