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

MasterGH

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

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

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

    129

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

  1. Можете подсказать как сделать процедуру в CheatEngine, и возможно ли.

    Например я нашел как установить количество звезд в игре,

    mov eax,0

    push eax

    call 004A1240

    mov ecx,eax

    call 004F3240

    ret

    Как я могу вызывать сделать из этого процедуру как:

    procedure setstar(player,star:integer);

    begin

    mov eax,star

    push eax

    call 004A1240

    mov ecx,player

    call 004F3240

    ret

    end;

    и потом вызывать?

    Хороший вариант использовать Lua Engine. Нужно поменять Player, названия игры, проверить ошибки...

    -- Подгодтовка памяти под читы
    autoAssemble([[
    alloc(cheatMem, 1024)
    registersymbol(cheatMem)]])


    -- Функция установки звёзд запускаемая из Lua
    function SetStar(player, star)

    AACodeTemplate = [[
    cheatMem:
    mov eax, star
    push eax
    call 004A1240
    mov ecx, player
    call 004F3240
    ret

    createthread(cheatMem)
    ]]

    AACodeTemplate = string.gsub(AACodeTemplate,"player", AACodeTemplate)
    AACodeTemplate = string.gsub(AACodeTemplate,"star", AACodeTemplate)


    print('Будет выполен блок AA кода ' .. AACodeTemplate)
    autoAssemble(AACodeTemplate)
    end


    -- Базовый блок работы с процессом из статьи с главного сайта

    processName = "game.exe"

    function OnCheckHotkeys()

    if isKeyPressed(VK_K) then
    print("Установить 4 зведы")
    player = '000000000'
    star = '6'
    SetStar(player, star)
    return
    end

    if isKeyPressed(VK_L) then
    — сделать какое-то действие
    print(«Hot-key L»)
    return
    end

    end

    function onCloseClick(sender)
    closeCE()
    return caFree
    end

    trainerForm = createForm()
    form_onClose(trainerForm, onCloseClick)

    autoAttachList = getAutoAttachList()
    stringlist_add(autoAttachList,processName);

    function onOpenProcess(processid)
    print("Найден процесс игры. Запускаю проверку горячих клавиш")
    hotKeyTimer = createTimer(trainerForm)
    timer_setInterval(hotKeyTimer, 100)
    timer_onTimer(hotKeyTimer, OnCheckHotkeys)
    end

  2. >> Сделал скрипт, но игра вылетает

    В данной ситуации подсказать ничего не могу.

    >> Где можно почитать туториалы про использование функций?

    Если такие туториалы и есть, то они настолько сложны человеку который не пишет программы на C++ и не отлаживает их в отладке. Так что я думаю, даже браться не стоит. Есть какие-то документы на официальных источниках о соглашениях по передачи аргументов в функцию. Там тебе подробно опишут что происходит с esp, ebp, как они меняются, что происходит в стеке когда работает call. Но об этом лучше не читать, а видеть в пашаговой отладке твоей собственной программы.

    Самый простой вариант и совет как прокачать свои скилы в области вызовов игровых функций. Это скомпилировать прожку консольную с функцией в которую передаются параметры. Возьмёшь отладчик и исследуешь её. И с Cheat Engine потренируешься с созданием CreateThread. Ещё бывают "вкусные" функции импотрируемые из dll-ок. Там по проще будет. Также найди и установи IDA с декомпилятором IDA Hex Rays. Декомпилятор возможно правильно будет определять агрументы функций... Короче тебе надо много практики чтобы понять что и как.

  3. Andrey сам ввёл путаницу) В этой теме пишет про ТЧ, в статье речь идёт об ЗП 1.6... а не может так быть, что статья началась про ЗП, а закончилась ТЧ?)) Я пока тоже сижу разбираюсь с этой инструкцией...

    Ой... я извиняюсь :ninja::lol: Я видимо очень спешил... Вообще я совершенно не помню как я писал ту статью. Я исследовал обе игры и кажется в одном документе. А потом всё кусками слепил. Ну вот и получилось, что получилось. Жаль... O-=

    Так что я сам не помню что это ТЧ или ЗП.

  4. Очень сложно дать точный ответ. Возможно, сместился стек и на 100% как именно он сместился непонятно.

    Возможно, нужно сделать так


    [ENABLE]
    alloc(newmem,1024)
    label(exitThread)

    newmem:
    mov eax,[esp]
    mov [exitThread],eax

    push 01
    push 005F6298
    call 0052C7E0
    push eax
    call 005052C0

    mov eax,[exitThread]
    push eax
    ret

    exitThread:
    dd 0

    createthread(newmem)

    [DISABLE]
    dealloc(newmem)

  5. Попробуй так:


    [ENABLE]
    alloc(newmem,1024)

    newmem:
    push 64
    push 02
    call 004A1240 // отсюда мы получаем eax по параметрам 0x64 и 0x02
    mov ecx,eax
    call 004CFA50
    ret

    createthread(newmem)

    [DISABLE]
    dealloc(newmem)

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

  6. В категории "Наши релизы"

    1) Добавлен форум "Для Эмуляторов: трейнеры, скрипты, таблицы"

    2) Форум с названием "Запрос", т.е. запросы трейнеров и т.п. перемещён вверх

    3) К некоторым форумам добавлено уточнение о том, что в них могут писать только пользователи из группы "Разработчики"

  7. Найди адрес патронов. Поставь бряк на доступ. Выстрели и поищи инструкцию что на рисунке. Адрес инструкции может отличаться.

    Желательно чтобы версия игры была той же что и в статье.

  8. Регистрация переменных удобнее через Lua.


    onOpenProcess(processid)
    reinitializeSymbolhandler()
    pClassHero = getAddress("[00410000] + 40")
    registerSymbol("pClassHero", pClassHero)
    end

    Для версии CE 6.2

    Лучше использовать без сохранения переменной

    registerSymbol("pClassHero", pClassHero , false)

    Теперь можно в АА скриптах или в Lua скриптах использовать символ "pClassHero"

    Но если всё-таки нужен АА-скрипт, то можно и так


    [ENABLE]
    alloc(Init, 256)
    label(pPointer)
    label(TheEnd)
    registersymbol(pPointer)

    Init:
    mov eax, 00410000
    lea eax, [eax+40]
    mov [pPointer], eax
    ret

    pPointer:
    dd 0

    createthread(Init)


    [DISABLE]
    dealloc(Init)
    unregistersymbol(pPointer)

    Если где ошибка, то надо поправить. Я же не могу всё помнить и нет времени проверять :)

    И ещё кое-что. Сомневаюсь, что в процессе игры речь может идти о "классах". Класс это тип данных. Структура в программировании это тоже тип данных, однако "структура данных" это уже не тип, а реализация. Чтобы не писать длинное словосочетание "структура данных" можно писать просто "структура". "Структура игрока", "структура врага", "структура оружия", "указатель на структуру оружия", "указатель на структуру врага" и т.п. Всё - структуры.

  9. Попробуй искать тип float как "неизвестное" в промежутке от 0.0 до 1.0. Первый поиск как неизвестное значение. Второй и последующие как уменьшилось/увеличилось/интервал от нуля до единицы.

  10. Cheat Engine 6.2 Beta 1 (Wed Jan 18, 2012)

    Ссылка для скачивания:скачать

    Fixes:

    Fixed the first plugin from not getting activated at restart

    Custom types can now do an unknown initial value scan

    Fixed the auto assembler highlighter from hiding some text while typing

    Additions and changes:

    Added a profiler so you can find function entry points and see how often they are called

    Deleting a plugin now calls FreeLibrary on it

    Ctrl+enter in the luaengine form now automatically executes the command

    Added direct 3d hook functions (can be used to show trainers inside games)

    Plugins settings between the 32 and 64-bit executable are now seperated

    Recalculate addresses with only one selection now only updates the siblings and children. Doesn't touch the parent node

    Addresslist entries can have the notation +xxx and -xxx, which will calculate the address based on the parent address (If the parent address changes, these change automatically

    The structure dissect has been rewritten from scratch, and the functions have been exposed to lua as well

    Structure dissect now supports custom types

    Added a new step to the tutorial (step9) showing how to deal with shared code

    Made the tutorial translatable as well

    Added a new trainer type which generates trainer that are a lot smaller in size (прим. тоже exe-трейнер, но без CE не запускается. Я думаю, что рекомендуется использовать этот новый формат тогда, когда файлы .CT и .CETRAINER имеют большой размер xml-разметки в не сжатом виде. Новый exe-формат содержит эту разметку внутри себя в упакованном виде и работает как автораспаковщик и лаунчер)

    Added a groupscan type which you can use to scan for different things in the same block

  11. Так ведь простая арифметика, смотри:

    Адрес указателя = значение по адресу [eax+esi*4]

    Допустим, что в eax у нас 5, а в esi у нас 7. Тогда адресом будет:

    [5 + 7*4], или [5 + 28], или [33]

    Штука тут в том, что значение esi может быть разным, так что нам нужно сначала прочитать его, затем домножить на 4, прибавить к полученному значение eax и только после этого ReadProcessMemory("сумма") - это и будет адресом указателя. (:

    Да не это он хочет узнать :) , а как многоуровневый указатель найти до статического адреса (если его вообще там можно построить). Очевидно, что регистр eax там на начало структуры, а esi может меняться от игровой сцены к сцене. И он не знает что делать с этим esi. А мы тоже не телепаты и не роботы на вопрос каждого новичка давать готовое решение.

  12. >> я нашел значение в своей игре(игра warhammer40.000).хочу написать трейнер но не получается так как немогу найти стат адрес.а стат. адрес немогу найти из за неизвестного смешения.

    nnzz, игра которую ты выбрал сложная для создания читов. По этой игре опубликованы скрипты на CE на форуме CE. Ищи тему по этой игре в форуме Автоассемблера и разбирайся.

  13. Наверно, лучший способ встроить "виртуальную машину с чит-кодами" в процесс игры , которая работала бы только на определённом ПК. В этом случае не имеет роли как работает трейнер. Т.е. трейнер генерируемый CE это или нет это без разницы, главное то что внедряемая защита исполняется только на определённом компе. И здесь лучше привязывать исполнение виртуальной машины не только тупо к харду, а скорее к тому как одно или несколько устройств индивидуально работают. Так что ещё + драйвер варганить. Который можно сделать на CE записью в системную память через автоассемблер вроде через kernelalloc(метка, размер).

    Но, цель возможно не оправдывает создание подобной защиты. Точнее совершенно не оправдывает, т.к. просто тупо хотеть чтобы трейнер работал для кого-то это глупо с такими сложностями в реализации. Эту защиту можно заказать у программистов наверно от 30-60 тыс руб и более, а если ещё совместимость с CE то и ещё больше. Так что кому надо пусть идут на фриланс и ищут талантливых кодеров и не бояться что кинут ;) Все остальные защиты имеют больше шансов быстрее быть взломанными. Есть правда и другой тип защит от распространения трейнеров, такой как у cheathappens. Но это скорее защита "сдерживания" распространения и завязана на деньгах за оплату аккаунта на определённое время. Если узнают что какой-то трейнер ушёл в массы, то извлекают зашифрованный код лиценции из трейнера и эту лицензию у человека "который раздал свой трейнер" обнуляют. А лицензия там

    CHEAT HAPPENS UNLIMITED Only $39.95 (USD) per year or $79.95 $59.95 (USD) for three years

    Итог. Кому нужна защита, те изворачиваются как могут. 

  14. >> В СЕ есть возможность ставить бряки с помощью тренера?

    В генерируемом *.exe трейнере вроде можно, но надо проверять. Формат *.CETRAINER совершенно точно позволяет это делать, проверено мной.

    >> А какие утилиты имеют такие же функции, что и СЕ? брекпойнты и тп

    GodGame, MHS, OllyDbg, IDA или любой отладчик.

  15. Я абсолютно не сомневался, что у тебя получится задуманная идея.

    Мне как бы похвастаться по работе с голым ДаректИКС нечем, кроме компиляций и разбора с десяток примеров как простых так и примеров из DirectX SDK. Такой хук аналогичный твоему я тоже делал, только на Дельфи. Но могу посоветовать кое-что для дальнейшего развития и исследований.

    1) Посмотреть жизненный цикл пары программ из примеров из DirectX SDK. Таких моментов как потеря устройства, directX обработка ввода с клавиатуры и мышки, почитать какие события можно обработать, какие общие функции. Это может тебя заинтересовать и толкнуть на новые идеи, которые могут быть тебе будет интересны.

    2) Попробовать написать свое приложение с ДаректИКС в котором обрабатывается directX ввод с клавиатуры или с мышки. Обычно это вереница кейсов в свитчах. Это тоже толкает на некоторые интересные идеи по поиску в играх в отладчике нужного участка кода по вводу от польозвателя

    3) Если никогда не делал игровые сцены, то очень полезно на игровом движке посмотреть примеры игр. Советую Unity3D и пример AngryBots который идёт в комплекте. Обратить внимание на управление персонажем, управление камерой, на построение иерархии игровых объектов. Но а также советую пример сцены 3D - шутера:

    3rdpersonshooter-logo-reflected.jpg

    Пусть там язык C#, но зато понятно как работать с материалами, анимацией и др. На других примерах можно узнать что такое и как работать с шейдерами и системами частиц. Очень познавательно. Но а затем набравшись практики можно делать серьёзные читы похожие чем-то ближе к модам. 

  16. Это можно поправить изменив исходники Cheat Engine. При чем это не просто пару строчек кода написать. А без знаний языка программирования почти не реально.

    Так, что крупный облом вышел с "привязкой" для автономных трейнеров на CE ;)  

  17. Мм, продолжу тему. В конце статьи пишется про возможность хука ендсцены, etc. Имеем адрес устройсва, найденного заранее для игры на dx9. Пробую сделать хук:

    LPDIRECT3DDEVICE9	myGame;
    while(!myGame)
    myGame = (LPDIRECT3DDEVICE9)0x059457F8;// наш адрес д3д устройства

    //насколько я знаю EndScene находится под индексом 42 в виртуальной таблице
    DWORD* GameDevice = (DWORD*)myGame;
    GameDevice = (DWORD*)GameDevice[0];
    //тогда можно использовать кодкейв, ничего лучше ms detours для этого нету ; )

    oEndScene=(tEndScene)DetourFunction((PBYTE)GameDevice[42],(PBYTE)&EndScene);

    ...

    но нифига не работает :grin:

    есть у кого более глубокие знания?

    Берёшь отладчик, берёшь справку, берёшь компилятор + DirectX SDK. И "получаешь более глубокие знания" ;)  

  18. Я не могу дать точный ответ, потому что меня запутало представлять какие бряки и когда ставить.

    Я просто прокомментирую.

    Давайте вообще поймём, что в статье делается.Статья очень большая, а написать-то Автору первоисточника надо было чуть проще и статью читать с конца к началу.

    Наша задача найти указатель на устройство редеринга g_pd3dDevice.Т.е. g_pd3dDevice это адрес по которому располагается адрес устройства.


    LPDIRECT3D9 g_pD3D = NULL; // Используется для создания D3D устройства
    LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // Наше устройство рендеринга

    HRESULT InitD3D( HWND hWnd )
    {
    // Создаём D3D объект, который необходим для созданияD3D устройства.
    if( NULL == ( g_pD3D =Direct3DCreate9( D3D_SDK_VERSION ) ) )
    return E_FAIL;

    D3DPRESENT_PARAMETERS d3dpp;
    ZeroMemory( &d3dpp, sizeof(d3dpp) );
    d3dpp.Windowed = TRUE;
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
    d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;

    if( FAILED( g_pD3D->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
    D3DCREATE_SOFTWARE_VERTEXPROCESSING,
    &d3dpp, &g_pd3dDevice ) ) )
    {
    return E_FAIL;
    }


    // Если устройство создано - возвращаем S_OK
    return S_OK;
    }

    Посмотрите последний абзац статьи, там где есть скриншот стека с выделенным последним адресом - т.е. g_pd3dDevice. Наша задача как в статье выйти на вызвов g_pD3D->CreateDevice(….,&g_pd3dDevice). Чтобы выйти на этот участок, мы должны найти указательна g_pD3D, прозвонить call [ [eax] + 3c], где eax= g_pD3D. Вот там где мы окажемся по call и будет вызов g_pD3D->CreateDevice(….,&g_pd3dDevice) и там мы снимем показания стека на бряке. Чтобы найти g_pD3D мы должны найти Direct3DCreate9 или иную смотря какая у васверсия дайректИкс dll-и.Теперь смотрим внимательно статью ещё раз и думаем как снять показания, когда и какие бряки ставить.

    Но я предлагаю совершенно другой вариант. В том же ollyDbg поставить условный бряк на функцию процедуры окна на сообщение WM_PAINT и искать машинный код вот такого условия сравнения с нулём

    if( NULL ==g_pd3dDevice )

    return;

    Где после этого сравнения будут вызовы типа call [[g_pd3dDevice]+ смещение] или g_pd3dDevice->функция(..):


    //-----------------------------------------------------------------------------
    // Имя: Render()
    // Описание: Рисование сцены
    //-----------------------------------------------------------------------------
    VOIDRender()
    {
    if( NULL == g_pd3dDevice )
    return;

    // Очистка backbuffer'а в голубой цвет
    g_pd3dDevice->Clear( 0, NULL,D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );

    // начало сцены
    if( SUCCEEDED(g_pd3dDevice->BeginScene() ) )
    {
    //Рендеринг объектов сцены должен находиться здесь

    // Конец сцены
    g_pd3dDevice->EndScene();
    }

    // Выводим содержимое backbuffer'a на экран
    g_pd3dDevice->Present( NULL, NULL, NULL,NULL );
    }

    //-----------------------------------------------------------------------------
    // Имя: MsgProc()
    // Описание: Обработка сообщений
    //-----------------------------------------------------------------------------
    LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
    {
    switch( msg )
    {
    case WM_DESTROY:
    Cleanup();
    PostQuitMessage( 0 );
    return 0;

    case WM_PAINT:
    Render();
    ValidateRect( hWnd, NULL );
    return 0;
    }

    return DefWindowProc( hWnd, msg, wParam, lParam );
    }

    Для проверки g_pd3dDevice посмотрите смещения call [[g_pd3dDevice]+ смещение] где смещение равно

    вызову функции Clear(), вызову BeginScene(),вызову EndScene(),Present(). Если подобную манипуляцию сделать однажды, то потом установить адрес устройства редеринга будет проще чем через способ , который автор первоисточника написал в статье.   Но он-то написал это на примере работы в отладчике в режиме отладки, а если его способ автоматизировать то его способ будет даже наверно попроще моего, т.к. мой способ автоматизировать будет сложнее.

  19. Уважаемые пользователи, давайте не будем обсуждать CE vs Artmoney. Давайте обсуждать GodGame и конкретные вещи, и конкретные предложения. Автор программы напишет, что сделать реально, а что не реально. Вот и все :)

  20. >>Ну это уже Cheat Engine получится, я специально делал так, что-бы окна не перекрывались.

    Если окна будут "не перекрываться", то невозможно будет без переключения между окнами работать с "дизассемблером, сканером памяти, окном скриптов". Речь идёт об удобстве. Напримере в MHS есть два варианта. Хочешь можешь слипить окна в одно, а хочешь можешь их разъединить. Делается все через drag and drop. Конечно, можно оставить как есть, я только предлагаю удобный вариант который я юзаю уже года 4 на Cheat Engine, MHS( было дело).

  21. post-3-1325224551,95_thumb.png

    Есть не очень удобная штука

    1) Когда передаём фокус на адрес кликом (1) в окне дизассемблера, то в дизассемблере отображается первый адрес на который кликали(2). Было бы хорошо чтобы этот адрес(2) был не вверху окна дизассемблера, а по середине.

    2) Если я передал фокус фокус на адрес(1), то пока я не передал фокус на дизассемблер, то я не могу скролить колесом мышки. Было бы хорошо, если можно было бы скроилть колесом мышки дизассемблерный код когда курсор перешёл в область панели дизассеблера.

    3) Было бы удобно редактировать дизассемблерную инструкцию двойным кликом по колонке дизассемблерного кода, чтобы это не было установкой бряка на выполнение.

    4) Ещё один момент. Если у меня сработало 10-20 инструкций, то я должен 10-20 раз кликать по адресам или перемещаться по ним, чтобы видеть дизассемблерный код в дизассемблере. Было бы удобно видеть список не просто "адрес - кол-во хитов", а такой

    1) 00410400   mov eax, [ebx]   3
    2) 00410440 mov eax, [ecx] 30

    И лучше это делать в отдельной форме, которая показывается как только поставили бряк на адрес.

    5) Когда я работаю в окне редактора скриптов, я не могу видеть другие окна. Ни дизассемблер, ни сканер памяти. Т.е. мне надо постоянно перемещать между окнами, когда мой монитор позволяет разместить отдельные окна и видить и работать с ними. Это довольно не удобно.

    6) Когда я пишу скрипт формы мне приходится переключать редактор скрипта на форму и обратно. Хотелось бы видеть форму и видеть редактор скрипта одновременно.

    7) Явно какая-то проблема с выравниванием контролов (характерно для всех версий GodGame на Windows7):

    post-3-1325227497,78_thumb.png

  22. В этой теме ведётся обсуждение технических возможностей программы GodGame.

    1) Описание функционала новых и старых версии

    2) Обсуждение работы программы, что работает и что не работает

    3) Предложите что-то исправить или что-то сделать

    Здесь пишем ближе по существующему функционалу.

    Автор программы GodGame не задёт вопросы в этой теме:

    1) не задаёт вопрос типа "ищу того и того человека" для того и того :)

    2) не задаёт вопроса типа "а что если я сделаю то и то, а как вам это понравится или не понравится" :)

    Эти вопросы он может задать в этой теме, существование которой пока не подтверждено Xipho

  23. Странности в виде "паузы в месяц" обычно ни у кого не бывает. Никто не задаёт вопросов по читингу, когда в игру попросту играть не может. Зачем же тогда заниматься читингом, если нет возможности "здесь и сейчас проверить". Сие неясности дают повод сомневаться в необходимости оказания помощи по вопросу темы. Минимум- не серьёзно, максимум - искусственное создание проблемы.

    Если я узнаю, что под некой Марией сидит парень в надежде, что ему ответят, то это учётная запись будет заблокирована сразу же. Администраторы помнят и в курсе подобной гнусной деятельности одного товарища в образе пользователя "Веронички" , который сам же ей (т.е. себе) ещё и писал от других колонов для того чтобы других пользователей втягивать в беседу. Так что я на чеку ;)

    Так что Мария пиши, когда игра будет "на руках". Если через месяц, то через месяц :lol::)

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

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

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