1. Теперь за форумную активность начисляются биткоины и другие криптоденьги. Подробнее.
    Скрыть объявление
  2. Появилась архивная версия форума arhiv.xaker.name, где собраны темы с 2007 по 2012 год.
    Скрыть объявление

Исследование трейнеров Cheat Engine

Тема в разделе "Статьи, руководства, видео", создана пользователем Dr. MefistO, 26 июл 2012.

  1. Dr. MefistO
    Dr. MefistO Крывіч Глобальный модератор
    Симпатии:
    125
    Доброго времени суток, форумчане.

    Желание написать эту статью появилось у меня после того, как ко мне обратились с заказом: в трейнере, который был изготовлен в Cheat Engine нужно сменить заголовок окна и одну надпись в About. Думал, дело пяти секунд в Restorator'е, но... В общем, встречайте)

    ОСМОТР ПАЦИЕНТА

    Качаем трейнер: http://rghost.ru/39400006

    Запускаем его, и видим:
    [​IMG]

    Посмотрим, что у нас в ресурсах:
    [​IMG]

    Видим два интересных ресурса: ARCHIVE, и DECOMPRESSOR. Сразу можно предположить из названий, что в Архиве находятся сжатые данные (возможно: музон, который играет; ехешник, который запускается и т.д.), а Декомпрессор этот архив распаковывает.

    Ну что ж, надо выяснить, каким образом работает декомпрессор, какие ему параметры передавать и куда все распакуется.

    АНАЛИЗ ДЕКОМПРЕССОРА

    Суем наш трейнер в Olly Debugger и ставим брейкпоинт на вызов CreateProcessA (кстати, он у нас один там такой найдется). Запускаем отладку.

    Видим, что в стек у нас нас затолкались параметры для вызова CreateProcessA. Смотрим на них внимательно:
    Код:
    CPU Stack
    Address   Value      Comments
    0012F248  ?0012F3F8  ; ?ApplicationName = "C:\WINDOWS\Temp\cetrainers\CET153C.tmp\213.EXE"
    0012F24C  ?0012FD1C  ; ?CommandLine = ""C:\WINDOWS\Temp\cetrainers\CET153C.tmp\213.EXE" -ORIGIN:"D:\Install\cracking\projects\21\""
    0012F250  ?00000000  ; ?pProcessSecurity = NULL
    0012F254  ?00000000  ; ?pThreadSecurity = NULL
    0012F258  ?00000000  ; ?InheritHandles = FALSE
    0012F25C  ?00000000  ; ?CreationFlags = 0
    0012F260  ?00000000  ; ?pEnvironment = NULL
    0012F264  ?0012F2F4  ; ?CurrentDirectory = "C:\WINDOWS\Temp\cetrainers\CET153C.tmp"
    0012F268  ?0012F2B0  ; ?pStartupInfo = 0012F2B0 -> STARTUPINFOA {Size=68., Reserved1=NULL, Desktop=NULL, Title=NULL, X=0, Y=0, Width=0, Height=0, XCountChars=0, YCountChars=0, FillAttribute=0, Flags=0, ShowWindow=SW_HIDE, Reserved2=0, Reserved3=NULL, hStdInput=NULL, hStdOutput=
    0012F26C  ?0012F2A0  ; ?pProcessInformation = 0012F2A0 -> PROCESS_INFORMATION {hProcess=NULL, hThread=NULL, ProcessID=0, ThreadID=0}
    
    Жирным я выделил нужные нам строчки.
    Код:
    CurrentDirectory = "C:\WINDOWS\Temp\cetrainers\CET153C.tmp"
    Это директория, в которую трейнер-обертка распаковывает свое содержимое - Временная папка. Смотрим, что там у нас. А там у нас два файла:
    Код:
    213.EXE
    CET_Archive.dat
    По размерам и содержимому это тот же Декомпрессор и Архив. Теперь смотрим, какие параметры передаются Декомпрессору:
    Код:
    CommandLine = ""C:\WINDOWS\Temp\cetrainers\CET153C.tmp\213.EXE" -ORIGIN:"D:\Install\cracking\projects\21\""
    Как видим, параметр у нас только один: рабочая директория, но, думаю, можно обойтись и без нее.

    Пробуем выполнить дальше вызов CreateProcessA и посмотреть, что произойдет дальше во временной папке. Жмем в отладчике клавишу F8 (выполнить одну команду без захода в нее). Видим, что во временном каталоге создалась папка extracted, в которую затем извлеклось содержимое Архива:
    Код:
    extracted\win32\dbghelp.dll
    extracted\213.EXE
    extracted\CET_TRAINER.CETRAINER (после успешного запуска трейнера удаляется)
    extracted\defines.lua
    extracted\lua5.1-32.dll
    extracted\xmplayer.exe
    Давайте осмотрим извлеченные файлы:
    • win32\dbghelp.dll - из названия файла ясно, что это стандартная debug-библиотека, которая используется тем же Olly Debugger.
    • 213.EXE - в свойствах файла написано, что это Cheat Engine 6.2.0.2606. Наверняка, это он и производит запуск реального трейнера.
    • CET_TRAINER.CETRAINER - гугл нам говорит, что это и есть трейнер. Правда там еще говорится, что при открытии этого файла в блокноте у нас должен показаться XML-подобный документ, но у нас отобразилась полная белиберда. Значит, файл зашифрован.
    • defines.lua - какой-то LUA-скрипт с определениями. При осмотре его ничего интересного не обнаружилось.
    • lua5.1-32.dll - библиотека для выполнения LUA-скрипта.
    • xmplayer.exe - из названия понятно, что оно играет музон. Но нам этот файлик не интересен.
    Теперь посмотрим, как же выполняется трейнер.

    АНАЛИЗ ЗАПУСКА РЕАЛЬНОГО ТРЕЙНЕРА

    Для сей задачи мы загрузим Декомпрессор в Olly Debugger (перед этим закрыв трейнер-обертку). И посмотрим, что оно и как запускает. А раз запускает, значит нам нужно перехватить вызов все того же CreateProcessA.

    Смотрим, что в стеке:
    Код:
    CPU Stack
    Address   Value      Comments
    0143FE88  ?00000000  ; ?ApplicationName = NULL
    0143FE8C  ?000D5628  ; ?CommandLine = "C:\WINDOWS\Temp\cetrainers\CET153C.tmp\extracted\213.EXE "C:\WINDOWS\Temp\cetrainers\CET153C.tmp\extracted\CET_TRAINER.CETRAINER""
    0143FE90  ?00000000  ; ?pProcessSecurity = NULL
    0143FE94  ?00000000  ; ?pThreadSecurity = NULL
    0143FE98  ?00000000  ; ?InheritHandles = FALSE
    0143FE9C  ?00000000  ; ?CreationFlags = 0
    0143FEA0  ?00000000  ; ?pEnvironment = NULL
    0143FEA4  ?0005D1F0  ; ?CurrentDirectory = "C:\WINDOWS\Temp\cetrainers\CET153C.tmp\extracted\"
    0143FEA8  ?0143FF3C  ; ?pStartupInfo = 0143FF3C -> STARTUPINFOA {Size=68., Reserved1=NULL, Desktop=NULL, Title=NULL, X=0, Y=0, Width=0, Height=0, XCountChars=0, YCountChars=0, FillAttribute=0, Flags=0, ShowWindow=SW_HIDE, Reserved2=0, Reserved3=NULL, hStdInput=NULL, hStdOutput=
    0143FEAC  ?0143FF2C  ; ?pProcessInformation = 0143FF2C -> PROCESS_INFORMATION {hProcess=NULL, hThread=NULL, ProcessID=0, ThreadID=0}
    
    Видим, что извлеченный EXE-шник получает в качестве параметра путь к зашифрованному трейнеру (ну и, очевидно, что сразу его и запускает, перед этим расшифровывая).

    АНАЛИЗ CHEAT ENGINE

    Открывает дебаггер и жмем File->Open. В появившемся окошке выбираем ЕХЕ-шник Cheat Engine, а в строке Arguments пишем путь к CET_TRAINER.CETRAINER. Жмем Открыть.

    Теперь необходимо поставить брейкпоинт на открытие файла трейнера: функция CreateFileA. Запускаем отладку (F9). Отладчик прервался на открытии файла. Теперь наша задача побродить немного пошагово по коду до тех пор, пока не увидим что-нибудь интересное (например, расшифрованный текст XML-файла). "Ходить" будем клавишей F8 (без захода в процедуры) - а вдруг нам повезет)

    Первое, на что мы наткнемся:
    Код:
    CPU Disasm
    Address   Hex dump                     Command                                               Comments
    004D2D49  ?·  8B45 90                  MOV     EAX, DWORD PTR SS:[LOCAL.28]
    004D2D4C  ?·  BA F8668100              MOV     EDX, OFFSET 008166F8                          ; ASCII "<?XML"
    004D2D51  ?·  E8 DA5AF3FF              CALL    00408830                                      ; [213.00408830
    
    Но при осмотре в дампе адреса, который находится в EAX, мы не увидим начала "<?XML", так что крутим дальше. При одном из дальнейших шагов у нас снова произойдет прерывание на CreateFileA, но нам оно уже не интересно, поэтому просто шагаем дальше. Не бойтесь что-то упустить - не заметить то, что мы ищем невозможно) Внезапно:
    Код:
    CPU Disasm
    Address   Hex dump                     Command                                               Comments
    004D4A8A  ?·  8B55 DC                  MOV     EDX, DWORD PTR SS:[LOCAL.9]                   ; ASCII "<?xml version="1.0" encoding="utf-8"?>
    <CheatTable CheatEngineTableVersion="14">
      <Forms>
        <CETrainer>ACBB855F9451F33E7CEFB2C0D24B23B9344A8BD2B18402928A7497807449B34B28A582A44AAA844A4A4BED52520A08487748772EF95B7C9EE7FDFE03EF870F67"...
    004D4A8D  ?·  8B4D E8                  MOV     ECX, DWORD PTR SS:[LOCAL.6]
    004D4A90  ?·  8B45 F8                  MOV     EAX, DWORD PTR SS:[LOCAL.2]
    004D4A93  ?·  8B5D F8                  MOV     EBX, DWORD PTR SS:[LOCAL.2]
    004D4A96  ?·  8B1B                     MOV     EBX, DWORD PTR DS:[EBX]
    004D4A98  ?·  FF93 84000000            CALL    NEAR DWORD PTR DS:[EBX+84]
    
    Ух ты! Видим, что в EDX передается указатель на начало XML-файла. Это уже интересно. Даем первой строчке выполниться, и переходим затем по этому адресу в дампе (правой кнопкой на значении в регистре EDX->Follow in Dump).

    Теперь делаем так:
    1. Жмем правой кнопкой и выбираем Binary->Copy All;
    2. Открываем шестнадцатеричный редактор, и вставляем в него то, что скопировалось;
    3. Очищаем от мусора полученный файл (ведь мы знаем, что начало файла должно содержать "<?xml", а окончание: "</CheatTable>");
    4. Сохраняем его с расширением *.CT - стандартное расширение для проектов Cheat Engine.

    СОБСТВЕННО ВСЕ

    Все закрываем, качаем нормальный дистрибутив Cheat Engine, устанавливаем, и открываем в нем наш проект. А там уже редактируйте сколько душе угодно)

    Автор: Владимир Мефисто
    Special for XakerName
     
    Последнее редактирование: 26 июл 2012
    26 июл 2012
    2 пользователям это понравилось.

Поделиться этой страницей

Загрузка...