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

MasterGH

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

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

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

    129

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

  1. Я написал ДаркБайту предложение добавления LUA-скриптов в таблицу CE (также как и автоассемблерных скрипты)... также чтобы можно было вешать горячие клавиши на скрипт LUA. Так что ждём реакции автора CE.

  2. По скрипту который автор привел точно ничего не подскажешь (может быть он считает что мы должны скачать игру и разобраться :ninja: ... ). Можно описать только некоторые рекомендации:

    1) просмотреть как ассемблировались команды (CE может грешить на этом)

    2) поставить бряк на доступ при вхождении в тело инъекции и пошагово выполнять каждую инструкцию при этом следить за обращением к адресам которых может не существовать

    3) если проходы успешно выполняются, то может быть ситуация когда через ~1000 раз указатель укажет на не существующий или запрещённый адрес процесса; вручную выйти на такой момент не реально следовательно нужно писать скрипт с проверкой на существующие адреса или же на LUA написать логер проскакивания адресов при бряках;

    4) ещё одна вероятная штука это сохранить и выгрузить регистр флагов: pushfd- popfd

  3. В 4-ой версии альфа появилась одна особенность. Переменные в LUA скрипте можно использовать в скриптах автоассемблера используя префикс $.

    Цитата Dark Byte:

    oh yes, forgot to mention one more feature in this alpha:

    the auto assembler can now use lua symbols (global symbols)

    Just add a $ in front of the name and that lua symbol will get replaced internally by the string representation of that value

    e.g in the lua script you have "bla=123"

    you can then do "mov [eax],$bla"

    same for addresses, but remember that ce uses hexadecimal strings

    so:

    lua: address="00400500"

    aa: mov eax,[$address]

    also, because lua is case sensitive, the variable name must match case (so not $AdDrEsS )

    and for floating point values you will still need to add (float) or (double) in front

    e.g (float)$bla

    Когда выйдет реализ 6.1 я опишу эту особенность в справке по LUA Engine.

    Также новые тесты aobscan:

    Цитата Recifense:

    Hi DB,

    I restarted my PC and I could not reproduce the issue anymore.

    So here is the result:

    For testing, the application was Tutorial-i386.exe. aobstring = "8b 55 f8 89 10 31 c0 66".

    It is at offset 00410319

    In Memory Regions, the area is defined as (Execute+Write Copy/Commit/Execute+Read/Image)

    - AOBScan(aobstring) => PASSED (address is found)

    - AOBScan(aobstring,"") => PASSED (address is found)

    - AOBScan(aobstring,"-X") => PASSED (address is not found)

    - AOBScan(aobstring,"+X") => PASSED (address is found)

    - AOBScan(aobstring,"-W") => PASSED (address is found)

    - AOBScan(aobstring,"+W") => PASSED (address is not found)

    - AOBScan(aobstring,"-C") => PASSED (address is found)

    - AOBScan(aobstring,"+C") => PASSED (address is not found)

    - AOBScan(aobstring,"*X*W*C") => PASSED (address is found)

    - AOBScan(aobstring,"-X*W*C") => PASSED (address is not found)

    - AOBScan(aobstring,"+X*W*C") => PASSED (address is found)

    - AOBScan(aobstring,"*X-W*C") => PASSED (address is found)

    - AOBScan(aobstring,"*X+W*C") => PASSED (address is not found)

    - AOBScan(aobstring,"*X*W-C") => PASSED (address is found)

    - AOBScan(aobstring,"*X*W+C") => PASSED (address is not found)

    - AOBScan(aobstring,"*X-W-C") => PASSED (address is found)

    - AOBScan(aobstring,"*X-W+C") => PASSED (address is not found)

    - AOBScan(aobstring,"*X+W-C") => PASSED (address is not found)

    - AOBScan(aobstring,"*X*W*C",0) => PASSED (address is found)

    - AOBScan(aobstring,"*X*W*C",1) => PASSED (address is found)

    - AOBScan(aobstring,"*X*W*C",2) => PASSED (address is not found)

    - AOBScan(aobstring,"*X*W*C",0,"") => PASSED An Error occurs '"{:content:}quot; is an invalid integer'

    - AOBScan(aobstring,"*X*W*C",0,"4") => PASSED (address is found)

    - AOBScan(aobstring,"*X*W*C",0,"h") => PASSED (An Error occurs '"{:content:}quot; is an invalid integer')

    - AOBScan(aobstring,"*X*W*C",0,"A") => PASSED (address is found)

    - AOBScan(aobstring,"*X*W*C",1,"4") => PASSED (address is not found)

    - AOBScan(aobstring,"*X*W*C",1,"1") => PASSED (address is found)

    - AOBScan(aobstring,"*X*W*C",2,"4") => PASSED (address is not found)

    - AOBScan(aobstring,"*X*W*C",2,"9") => PASSED (address is found)

    - AOBScan(aobstring,"*X*W*C",2,"19")=> PASSED (address is found)


    X W C
    - - - NOT Found
    - - * NOT Found
    - - + Scan Error: No Readable Memory Found
    - * - NOT Found
    - + - NOT Found
    * * - Found
    + * - Found
    * + - NOT Found
    * - - Found
    * * * Found

    Fast Scan + Aligment = PASSED
    Fast Scan + Last Digits = PASSED

    I liked the change on the "The following opcodes accessed xxxxx".

    The double-click on a register on the REGISTER of "Changed Addresses" is working pretty fine. Could it be implemented for the registers of "More Information"?

    Is there a way to save information via AA so if the process closes by any error you can still be able to see it (debugging info generated by the script)?

    Maybe some memory could be allocated and attached to CE instead of the app process.

    Cheers and Congrats!

  4. Машина
    Игрок
    Управление игроком
    Управление машиной
    -------
    Обработчик нажатий клавиш()
    {
    ...
    Если игрок не находится ни в каком транспорте,
    то управлять игроком
    Если игрок находится в транспорте, то управлять
    транспортом
    ...
    }

    Надо проследить в отладке каким образом управление (смещения координат) передается игроку или машине. Можно это сделать поставив бряк на координаты игрока и на координаты машины когда игрок сидит в машине и когда он не в машине... Теоретически так можно выйти на управление машиной и дальше определить как именно эта машина связана с игроком. Ну а раз эта машина связана с игроком, то сделать инъекцию, которая бы снимала всякие повреждения с машины в которой сидит главный герой.

  5. К сожалению на моём видео я написал в комментариях, что трейнер сделать просто и быстро. Но для этого (в моём случае) надо иметь уже готовый скрипт, а ведь надо ещё руку приложить чтобы его написать и это не все умеют делать. Так что трейнер сделать не всегда просто даже с Cheat Engine - всё зависит от случая, кода игры и поставленной цели.

  6. Обновления до Cheat Engine 6.1 Alpha 4 с историями версий:

    Поехали:

    1) Cheat Engine 6.1 Alpha 1 (Thu Feb 10, 2011 10:16 pm)

    Fixed several bugs (the first item in the addresslist should update a bit better now and errormessages should contain the error now as well)

    memscanner now makes the temp folder writable for the current user

    Selecting 4 bytes and pressing space in the hexview jumps to the specified address. Backspace returns (8 bytes if the target is 64-bit)

    Added sorting by clicking on the columns in the addresslist

    Made a start with the essentials of the trainer maker. It's still all done manually but just read the main.lua file on some updates

    Changed the title to ce 6.1 Alpha

    The mainmenu processlist is now invisible by default (you can still make it visible if you have to)

    Compiled using the Lazarus/Freepascal build of today

    Started with language support

    You can now pick if it disassembles to 32 or 64 bit

    Saved scan compares no longer take up totalgamememory * number of cpu's but only a few KB's now (might be slightly slower)

    Seperate lua window. With support for lua syntax highlighting (doesn't get saved yet and doesn't yet replace the old one)

    2) Cheat Engine 6.1 Alpha 2 (Thu Feb 24, 2011 6:38 pm)

    several assembler/disassembler fixes

    pressing delete in an empty cheat table list won't raise an AV anymore

    implemented a load of new OO commands to lua

    implemented the automated trainer maker

    implemented the standalone trainer maker (still needs several bugfixes, e.g: parameter override, the window doesn't show up in the taskbar, closing doesn't work well,etc...)

    full translation support now (check the languages folder)

    Added an xm player

    Memory scan options changed

    lua aobscan now has several extra parameters

    memory scan engine is fully accessible from lua

    3) Cheat Engine 6.1 Alpha 3 (Thu Feb 24, 2011 11:40 pm)

    Fixed some really annoying bugs

    Тестирование aubscan1

    Here are the results of the testing of AOBScan (LUA):

    For testing, the application was Tutorial-i386.exe. aobstring = "8b 55 f8 89 10 31 c0".

    It is at offset 00410319

    In Memory Regions, the area is defined as (Execute+Write Copy/Commit/Execute+Read/Image)

    - AOBScan(aobstring) => FAILED "Access violation"

    - AOBScan(aobstring,"") => FAILED "Access violation"

    - AOBScan(aobstring,"*X*W*C") => PASSED (address is found)

    - AOBScan(aobstring,"-X") => FAILED (address is found)

    - AOBScan(aobstring,"-W") => PASSED (address is not found)

    - AOBScan(aobstring,"-C") => PASSED (address is not found)

    - AOBScan(aobstring,"+W") => PASSED (address is found)

    - AOBScan(aobstring,"+C") => PASSED (address is found)

    - AOBScan(aobstring,"-W-C") => PASSED (address is not found)

    - AOBScan(aobstring,"-W+C") => PASSED (address is not found)

    - AOBScan(aobstring,"+W-C") => PASSED (address is not found)

    - AOBScan(aobstring,"+W+C") => PASSED (address is found)

    - AOBScan(aobstring,"*X*W*C",0) => PASSED (address is found)

    - AOBScan(aobstring,"*X*W*C",1) => ????? (address is found) (Is this the expected behavior?)

    - AOBScan(aobstring,"*X*W*C",2) => ????? (address is not found) (Is this the expected behavior?) If the parameter is omitted it gives as value "1"

    - AOBScan(aobstring,"*X*W*C",0,"") => PASSED An Error occurs '"{:content:}quot; is an invalid integer'

    - AOBScan(aobstring,"*X*W*C",0,"4") => PASSED (address is found)

    - AOBScan(aobstring,"*X*W*C",0,"h") => PASSED (An Error occurs '"{:content:}quot; is an invalid integer')

    - AOBScan(aobstring,"*X*W*C",0,"A") => PASSED (address is found)

    - AOBScan(aobstring,"*X*W*C",1,"") => PASSED (An Error occurs '"{:content:}quot; is an invalid integer')

    - AOBScan(aobstring,"*X*W*C",1,"4") => FAILED (address is found)

    - AOBScan(aobstring,"*X*W*C",2,"") => PASSED (An Error occurs '"{:content:}quot; is an invalid integer')

    - AOBScan(aobstring,"*X*W*C",2,"4") => PASSED (address is not found)

    - AOBScan(aobstring,"*X*W*C",2,"9") => FAILED (address is not found)

    - AOBScan(aobstring,"*X*W*C",2,"19")=> FAILED (address is not found)

    Тестирование 2


    - - - NOT Found
    - - * NOT Found
    - - + Scan Error: No Readable Memory Found
    - * - NOT Found
    - + - NOT Found
    * * - Found
    + * - Found
    * + - NOT Found
    * - - Found
    * * * Found

    Fast Scan + Aligment = the result for any value is the same as for 4;
    Fast Scan + Last Digits = the result for any one digit value is the same as for 4;
    X   W   C 

    4) Cheat Engine 6.1 Alpha 4 (Wed Mar 02, 2011 12:01 am)

    Fixed the scanning errors

    Redesigned the trainer maker to be more idiot proof

    functions are now auto generated when using the form designer

    added dbk functions to lua

    updated the lua dll's so they now support 64-bit integer values (updated the change register method as well)

    almost all strings in ce are now resources so ce should now be fully translatable

    fixed auto assembler problem with dealing with strings (caused the veh debug error)

    And some other fixes to several lua routines

  7. Новости из закрытого раздела форума тестирования сырых верий CE. Для третьей альфа версии обновлены функции для LUA-поддержки. Одна из них касается сканирования сигнатур.

    --aobScan("aobstring", protectionflags OPTIONAL, alignmenttype OPTIONAL, alignmentparam HALFOPTIONAL): 
    --protectionflags is a string.
    -- X=Executable W=Writable memory C=Copy On Write. Add a + to indicate that flag MUST be set and a - to indicate that that flag MUST NOT be set. (* sets it to don't care)
    -- Examples:
    -- +W-C = Writable memory exluding copy on write and doesn't care about the Executable flag
    -- +X-C-W = Find readonly executable memory
    -- +W = Finds all writable memory and don't care about copy on write or execute
    -- "" = Find everything (is the same as "*X*C*W" )
    --
    --
    --alignmenttype is an integer:
    -- 0=No alignment check
    -- 1=Address must be dividable by alignmentparam
    -- 2=Address must end with alignmentparam
    --alignmentparam is a string which either holds the value the addresses must be dividable by or what the last digits of the address must be

    Информация по другим функциям

    Кто умеет компилировать исходники из SVN, тот может протестировать.

    По поводу времени выхода CE 6.1 ещё неизвестно. Хотя по логам и исходниками видно, что было проделано не мало работы с момента выхода CE6.0.

  8. Видимо, это проблема с хостером imageshack из-за связки определённых IP определенных областей. Данная блокировка скорее политика принуждения в регистрации.

    Проблема изначально в другом.

    Xipho при переходе на новый двиг сайта случайно удалил картинки. Когда он восстанавливал статью то не заливал картинки на хостинг, а просто скопировал ссылки на картинки из статьи на форуме. Вот поэтому так и получилось что у Лива. У меня этим заниматься нет времени.

    Почему я и просил кого-то помочь по выкладыванию статей.

  9. Скрипт добавить в окно автоассемблера вызвав его из главного окна Cheat Engine нажатием "ctrl+alt+a". Затем в окне автоассемблера вызывать меню "добавление скрипта" в главное окно Cheat Engine. В последнем в области таблицы появится надпись с галочкой... Запустить процесс игры. В Cheat Engine подключиться к этому процессу. А теперь нажать на галочку. Подождать какое-то время пока будет инъекция. Ну и все.

  10. Я уже и статью склепал "Исследование работы чужих тренеров на примере игры Operation Flashpoint". Как думаете, можно выдранный код тут выложить, и статью?

    Учитывая что код инъеции уже выкладывали на форум, то привести его можно. А вот статью лучше не делать, т.к. получается ты будешь учить как рипать трейнеры.

    И в CE нужно выбирать не exe-файл игры, а mfc32.dll. Скрипт полностью совпадает с моим выковыренным из тренера. Кто-нибудь объясните принцип работы скрипта. И почему в skipGodMode код отличается от оригинального?

    mfc32.dll нсколько я помню это модуль которым пользуются множество Windows приложений написанных на C++ с библиотекой MFC. Это не модуль игры

    По поводу отличий.

    mov edi,[eax+00000354]

    mov edi,[eax+00000364]

    Это можно узнать только в отладке.

  11. Без специальных тузл это значит без hex-редактора, а он тут есть )

    В принципе такой метод обмана игр мало практикуется, но не стоит его недооценивать. Сейв-файлы это файлы с которыми происходит инициализация игровых персонажей и уровней с множеством параметров, а не только золота. И эти параметры можно менять, если знать как (можно много всякого наменять).

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

  12. Paper Clip Trainer Spy позволит пошпионить за трейнером. Я думаю можно это сделать без угрызения совести, если ты откажешься от создания своего трейнера на основе того как работает трейнер автора.

  13. Если хочешь больше шансов чтобы ответили(может быть и я помогу), то желательно потрудиться для этого:

    1) В CE скопировать участок кода прервавшейся инструкции для тамера гонки и сгенерировать и привести сигнатуру из CE 5.6 RUS.

    2) В CE скопировать участок кода прервавшейся инструкции для штрафных секунд и сгенерировать и привести сигнатуру из CE 5.6 RUS

    3) Приаттачить два сейв-файла перед началом миссий в которых будут срабатывать инструкции из пункта 2 и пункта 3.

  14. Я был бы не против. Я видел на некоторых сайтах эти карты. Но там были не флаги, а красные точки. Вот точки мне больше нравятся. Одни больше, а другие меньше и можно было видеть откуда больше всего заходили по большим точкам. Я посмотрю, если это несложно сделать, то может быть я сделаю и если Xipho не будет против. Просто у него наверняка мало времени на это.

  15. Это самая простая проверка на, то что код после инъекции не изменился и его можно спокойно отменить. На самом деле это понадобилось только в одной игре - сделать инъекцию на кол-во золота для покупки войск перед загрузкой карты и последующим боем. У игры выгружались и подгружались dll-ки перед началом боя. Соответственно после боя невозможно отменить инъекцию, т.к. сигнатуры не существует.

  16. Случайно наткнулся на примеры исходников CS, которые пытаются восстановить для модов.

    Вот интересный пример weapon.cpp:

    /***
    *
    * Copyright (c) 1996-2002, Valve LLC. All rights reserved.
    *
    * This product contains software technology licensed from Id
    * Software, Inc. ("Id Technology"). Id Technology (c) 1996 Id Software, Inc.
    * All Rights Reserved.
    *
    * Use, distribution, and modification of this source code and/or resulting
    * object code is restricted to non-commercial enhancements to products from
    * Valve LLC. All other use, distribution, or modification is prohibited
    * without written permission from Valve LLC.
    *
    ****/


    #include "weapons.h"


    void CBasePlayerWeapon::FireRemaining( int &iShotsFired, float &flShootTime, BOOL bIsGlock )
    {
    m_iClip--;

    if ( m_iClip < 0 )
    {
    m_iClip = 0;

    iShotsFired = 0;
    shootTime = 0.0;

    return;
    }

    float flSpread;
    int iPenetration;
    int iBulletType;
    int iDamage;
    float flRandeModifier;
    BOOL bFireParam;

    unsigned short usEvent;
    BOOL bEventParam1;

    UTIL_MakeVectors( pPlayer->pev->v_angle + pPlayer->pev->punchangle );

    if ( bIsGlock )
    {
    flSpread = 0.05;
    iPenetration = 1;
    iBulletType = 1;
    iDamage = 18;
    flRandeModifier = 0.90;
    bFireParam = TRUE;

    usEvent = m_usGlock18;
    bEventParam1 = m_iClip ? FALSE : TRUE;
    }
    else
    {
    flSpread = m_flBurstSpread;
    iPenetration = 2;
    iBulletType = 12;
    iDamage = 30;
    flRandeModifier = 0.96;
    bFireParam = FALSE;

    usEvent = m_usFamas;
    bEventParam1 = FALSE;
    }

    Vector vecDir = pPlayer->FireBullets3( m_pPlayer->GetGunPosition(), gpGlobals->v_forward,
    flSpread, 8192.0, iPenetration, iBulletType, iDamage, flRandeModifier, m_pPlayer->pev, 1, m_pPlayer->random_seed );

    PLAYBACK_EVENT_FULL( FEV_NOTHOST, m_pPlayer->edict(), usEvent, 0.0, (float *)&g_vecZero, (float *)&g_vecZero,
    vecDir.x, vecDir.y, pPlayer->pev->punchangle.x * 10000000, pPlayer->pev->punchangle.y * 10000000, bEventParam1, FALSE );


    m_pPlayer->SetAnimation( PLAYER_ATTACK1 );
    m_pPlayer->pev->effects |= EF_MUZZLEFLASH;

    iShotsFired++;

    if ( iShotsFired != 3 )
    flShootTime = gpGlobals->time + 0.1;
    else
    flShootTime = 0.0;
    }

    Для любознательных советую скачать файлы из SVN. Обратить внимание на структру игры: игрков, оружия. Как добавляется оружие, как добавляются патроны, как создаются игроки и т.п. Хорошие примеры динамически создаваемых объектов, примеры сложных указателей...

  17. Я все же предлагаю регистрировать пользователей по двум критериям.

    1) Пользователи, которые желают выложить свою хотя бы одну статью изначально показав её.

    2) Пользователи, которые желают выкладывать не менее двух чужых статей.

    Также я думаю администрации срочно нужен человек или несколько, который бы помогал выкладывать статьи. А то многие любят читать и учиться делать читы, а помогать администрации выкладывать статьи кто кто будет?! :grin: И я хотел бы чтобы Xipho как главный администратор дал разрешение кому-то побыть модератором, тем кто часто приходит к нам на сайт. Чтобы удалять спамные сообщения и разрешать пользователям публиковать сообщения если они прошли проверку. Также будет возможноть редактировать посты пользователей (не администраторов), убирать старые теги с прошлого форума... Те кто хотел бы быть модераторами, могут написать тут (т.к. мне интересно узнать кто бы хотел). Я могу предложить M4K и Ливу, т.к. часто вижу их на форуме.

    ___

    post-3-1297767979,69_thumb.jpg

    Любая поддержка администрации укрепит развитие сайта gamehacklab.ru.

  18. Там всё очень просто по поводу здоровья.

    1) Нашли динамический адрес здорвья и один зелёный. Он зелёный, но всё равно будет меняться из-за пакера.

    2) Поставили в CE бряк на запись и пошли под обстрел

    3) Прервались на двух инструкциях (обе инструкции в одной функции)

    62079BF3 - F3 0F11 99 98100000 - movss [ecx+00001098],xmm3

    62079C39 - F3 0F11 A1 98100000 - movss [ecx+00001098],xmm4

    ecx - объект героя.

    Функция типа:

    __int64 __fastcall t_player__RecalcGeneralHealth(int _ECX)
    {
    ...
    62079BF3 - F3 0F11 99 98100000 - movss [ecx+00001098],xmm3


    цикл чтения 5 частей тела
    (ECX+C7C+4*N) = здоровье частитела, где N от 1 до 5
    (ECX+C7C+4*0) = общее здоровье

    ecx+0x00000C7C = адрес суммые здоровья от частей тела

    game.dll+79BFD - 8D 91 7C0C0000 - lea edx,[ecx+00000C7C] // смотрим внимательно за edx
    game.dll+79C03 - 56 - push esi
    game.dll+79C04 - 0FB6 F0 - movzx esi,al
    game.dll+79C07 - 83 FE 05 - cmp esi,05
    game.dll+79C0A - 77 11 - ja game.dll+79C1D
    game.dll+79C0C - FF 24 B5 - jmp dword ptr [esi*4]

    game.dll+79C0F - 48 - dec eax
    game.dll+79C10 - 9C - pushfd
    game.dll+79C11 - 07 - pop es
    game.dll+79C12 - 62 0F - bound ecx,[edi]
    game.dll+79C14 - 28 C1 - sub cl,al
    game.dll+79C16 - EB 08 - jmp game.dll+79C20

    game.dll+79C18 - 0F28 C2 - movaps xmm0,xmm2
    game.dll+79C1B - EB 03 - jmp game.dll+79C20

    game.dll+79C1D - 0F28 C3 - movaps xmm0,xmm3
    game.dll+79C20 - F2 0F10 22 - movsd xmm4,[edx] <<<< а вот обращение к адресам здоровья, сделаем инъекцию сздесь!
    game.dll+79C24 - 83 C0 01 - add eax,01
    game.dll+79C27 - F3 0F59 E0 - mulss xmm4,xmm0
    game.dll+79C2B - F3 0F58 A1 98100000 - addss xmm4,[ecx+00001098]
    game.dll+79C33 - 83 C2 04 - add edx,04
    game.dll+79C36 - 83 F8 06 - cmp eax,06
    game.dll+79C39 - F3 0F11 A1 98100000 - movss [ecx+00001098],xmm4
    game.dll+79C41 - 7C C1 - jnge game.dll+79C04

    ...
    62079C39 - F3 0F11 A1 98100000 - movss [ecx+00001098],xmm4
    }

    Сама инъекция:

    [ENABLE]
    aobscan(_faddress,f2xxxxxx83xxxxf3xxxxxxf3xxxxxxxxxxxxxx83xxxx83xxxxf3)
    alloc(_newmem,2048)
    label(_returnhere)
    label(_originalcode)

    _newmem:
    mov [edx],(float)1
    _originalcode:
    movsd xmm4,[edx]
    add eax,01
    jmp _returnhere

    _faddress: // 62079C20 = game.dll+79C20
    jmp _newmem
    nop
    nop
    _returnhere:

    [DISABLE]
    aobscan(_faddress,9090f3xxxxxxf3xxxxxxxxxxxxxx83xxxx83xxxxf3)

    _faddress-5:
    movsd xmm4,[edx]
    add eax,01

    dealloc(_newmem)
    //Alt: db F2 0F 10 22 83 C0 01

    По эскпериментам __int64 __fastcall t_player__RecalcGeneralHealth(int _ECX) передаётся только главный герой. Но если ещё кто-то будет бессметрным, то напишите или сами сделайте фильтр.

  19. live_4_ever, спасибо за исходник. Memory.cs содержит всё что может пригодиться для начальных экспериментов: подключение к процессу, чтения и запись разных данных.

    Например, так будет запись байт включающих чит здоровья:

            

    public partial class frmMain : Form
    {
    private Memory _memory;

    private int _unlimitedHealth = 0x4B8F14;
    private int _unlimitedRescueHealth = 0x467EEB;
    //...
    private void cbxHealth_CheckedChanged(object sender, EventArgs e)
    {
    if (cbxHealth.Checked)
    _memory.WriteBuffer(_unlimitedHealth, new byte[] { 0x90, 0x90, 0x90, 0x90, 0x90 });
    else
    _memory.WriteBuffer(_unlimitedHealth, new byte[] { 0xF3, 0x0F, 0x11, 0x48, 0x34 });
    }
    }

    Мои комментарии для тех кому интересно:

    У него есть достоинства и недостатки.

    Достоинства:

    1) Класс Memory.cs имеет неплохой описанный стартовый функционал для экспериментов.

    Недостатки:

    1) Постоянно лицезреть в исходниках непонятные байты без ассемблерного скриптинга.

    2) Двиг трейнера построен так, что жёстко привязывается к определённой версии игры и автор собирается для каждой версии игры делать трейнер.

    3) Исходники требуют значительных доработок для совершенства близкого к идеалу. Пока самое близкое к идеалу это Lua-скриптинг в Cheat Engine....

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

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

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