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

MasterGH

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

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

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

    129

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

  1. Все работает ;)

    Спойлер
    
    [ENABLE]
    //code from here to '[DISABLE]' will be used to enable the cheat
    alloc(newmem,2048)
    label(returnhere)
    label(originalcode)
    label(exit)
    
    newmem: //this is allocated memory, you have read,write,execute access
    //place your code here
    
    originalcode:
    {$try}
    mov eax,[0]
    //mov eax,[ebx+00000480]
    jmp short noerror
    {$except}
    noerror:
    mov eax,[ebx+00000480]
    exit:
    jmp returnhere
    
    "Tutorial-i386.exe"+23EA8:
    jmp newmem
    nop
    returnhere:
    
    [DISABLE]
    //code from here till the end of the code will be used to disable the cheat
    dealloc(newmem)
    "Tutorial-i386.exe"+23EA8:
    mov eax,[ebx+00000480]
    //Alt: db 8B 83 80 04 00 00

     

     

    Если делать без try/except, то естественный crash

     

    Спойлер

    image.png

     

    • Плюс 1
  2. 6 часов назад, Alex2411 сказал:

    у меня с этой проверкой скрипт  вообше не реаботает . даже  не включаеться

     

    try/except на последней версии CE 6.8.3 должно работать

    {$try}
    mov eax,[ecx+10]
    jmp short noerror
    {$except}
    xor eax,eax
    noerror:

    Может быть, ты свой скрипт покажешь, если хочешь конечно

    Под except нужно восстановить оригинальное значение.

    Хотя я думаю, не поможет этот try/catch. Будет вылетать на других инструкциях

  3. Алгоритм:

    1. Левая часть1 строки из пробелов создается на N-1 символ за проход цикла

    2. Правая часть2 из "X" увеличивается на +1 символ за проход цикла

    3. Левая и правая части соединяются в строку и выводятся

     

    Реализация на CE Lua (знаю, что не на C++, поэтому оффтоп)

    
    local N = 30
    for i=0,N do
      print(string.rep('_',N-i)..string.rep('X',i))
    end
  4. В 04.04.2019 в 20:58, partoftheworlD сказал:

    Почему бы не погуглить? Обработчик исключений был бы идеальным решением, проверки адресов. https://wiki.cheatengine.org/index.php?title=Auto_Assembler:TRY_EXCEPT

    Там даже пример есть. Ох уж любители костылей.

     

    Этот пример стоит попробовать, я и забыл про этот синтаксис, но только исключение может быть в другом участке кода, например, из-за записи значения вместо указателя и другой участок кода вызовет исключение. 

     

    Так что решили проблему? По Lua я не помогу, т.к. пока очень мало времени. По Lua я бы сделал иначе. Там нужно вызывать Lua функцию через AA. Если будет время, покажу пример.

  5. Теоретически. Как пример для любой игры сингловой или мультиплеерной:

     

    1. Ищем адрес координат игрока

    2. Ставим брейкпоинт на адрес координат игрока

    3. Ищем инструкцию, которая работает со всеми координатами

    4. Собираем постоянно в массив самые дальние координаты и узнаем примерную область карты.

     

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

  6. 5 часов назад, Alex2411 сказал:

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

    Конечно, может. Посмотри карту памяти

    Спойлер

    image.png

     

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

    В CE 6.8.3 можно сравнить ветви трассировки. Берешь правильную ветвь, берешь любую не правильную. Сравниваешь до верхнрего call-а и с него начинаешь многоуровневый указатель выстраивать или же на это м call-е смотришь параметры и стек, и там правишь код.

    Спойлер

     

     

  7. Я бы пробовал

    Спойлер
    
    label(Handler) 
    label(NoException) 
    label(ExceptionHandled) 
    
    00270000:  // you need create thread on 00270000 
       pushad 
       mov esi, Handler 
       push esi 
       push fs:[0] 
       mov fs:[0], esp 
    
       push eax
       mov eax,ebx
       mov eax,[eax+10]
       mov eax,[eax+20]
       cmp eax, ...
       pop eax
    
       Jmp NoException 
    Handler: 
       mov esp,[esp+0x08] 
       pop fs:[0] 
       add esp, 4 
       popad 
    
       // This point if we have exception runnig 
       Jmp ExceptionHandled 
       Jmp NoException 
    
    NoException: 
       pop fs:[0]         // restore the old EXEPTION 
       add esp, 0x24 //32+4 
       ret 
    
    ExceptionHandled: 
       ret 

     

     

    или пункт 6, который я написал.

  8.  

    13 часов назад, Alex2411 сказал:

    cmp [eax], ... // проверка есть ли память по адресу

    Вариантов решений несколько

     

    1. Могут быть адреса, которые явно читать не стоит. такие как

    cmp eax, 0
    cmp eax, 0xffffffff

    Тогда просто сравнить их и все

     

    2. Использовать API Windows для определения прав доступа к адресу на чтение и запись перед обращением

     

    3. Использовать обработку исключений типа этого

    Спойлер
    
    label(Handler) 
    label(NoException) 
    label(ExceptionHandled) 
    label(lpCaption) 
    label(lpText) 
    
    00270000:  // you need create thread on 00270000 
       pushad 
       mov esi, Handler 
       push esi 
       push fs:[0] 
       mov fs:[0], esp 
    
       mov ecx, [0]   // EXEPTION!
    
       Jmp NoException 
    Handler: 
       mov esp,[esp+0x08] 
       pop fs:[0] 
       add esp, 4 
       popad 
    
       // This point if we have exception runnig 
       Jmp ExceptionHandled 
       Jmp NoException 
    
    NoException: 
       pop fs:[0]         // restore the old EXEPTION 
       add esp, 0x24 //32+4 
       ret 
    
    ExceptionHandled: 
       // the exception was eaten 
       push 0             //uType  (0=mb_ok) 
       push lpCaption 
       push lpText 
       push 0           //hWnd 
       call MessageBoxA 
       ret 
    
    lpCaption: 
       db 'Exception!' 0 
    
    lpText: 
       db 'You have exception' 0

     

     

    4. Использовать CE Lua для определения доступа к адресу

    function CheckAddress(address)
      return readInteger(address) ~= nil
    end
    

    Это функцию можно использовать двумя способами. 

    Либо через вызов Lua функции из CE AA (в прочем там же можно и сразу писать значение)

    image.png

    Либо кешировать адреса в метки и по Lua таймеру записывать значение по адресам.

     

    5. Вариант искать другое место кода для инъекции

    6. Вариант искать условия, когда адрес всегда валидный (например, когда в той же структуре адреса имеют определенные значения)

     

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

    • Плюс 2
  9. Матрицу можешь по таймеру получить через CE Lua вызовы mono функций  и отображать её в самой CE. По значениям сможешь поискать адреса

    https://wiki.cheatengine.org/index.php?title=Tutorial:Mono:Basic

    В 20.03.2019 в 11:11, partoftheworlD сказал:

    Все верно. Получение видовой матрицы

  10. 2 часа назад, Antonshka сказал:

    Недостаток такого метода, опять же занимающий некоторое время брутфорс.

    Если бы я делал, то я бы сделал две функции и скрипт CE

    1) функция. которая собирает словарь в текстовый файл с константами и оригинальной расшифровкой (на CE Lua в режиме отладки)

    2) функция в инжектируемой dll, которая грузит словарь из файла в память и принимает аргументы константу и оригинальное расшифровываемое значение, а возвращает модифицированное.

    3) CE скрипт с инжектом dll-ки и вызовом функции из пункта2 (с подменой по словарю оригинальных значений)

    И все... и никакого брутфорса. Пункты 1 -  полу-универсальный , 2-универсальный, а 3 - меняется. Подойдет< скорее всего, или может подойти для любых типов шифрований в играх, где есть расшифровка в процессе игры.

    • Плюс 1
  11. Когда данные уже расшифровываются и получается так, что они известны, то в любом случае можно ничего не подбирать.  Можно пробовать подменять оригинальные значения любыми способами там, где с ними происходит чтение.

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

     

  12. Прицеливание делать в Update, исправив управление мышкой.

    Поведение выстрела переписать. Прицеливание либо по формуле угла и силы или через подбор вариантов.

    Поиск целей отдельной функций написать.

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

    Ссылки слетели...

  13. WriteLog работает так

    1. Находим адрес

    2. Запускаем скрипт логирования

    writeLog = getWriteLog
    writeLog.status = true

    3. Пишем в адрес пару раз

    4. Снимаем логи

    Спойлер
    
    function TableToString(argtable)
      local s = ''
      for i=1, #argtable do
          s = s..' '..string.format("0x%02X",(argtable[i]))
      end
      return s
    end
    
    writeLog = getWriteLog()
    writeLog.status = true -- уже это сделали, можно не делать
    local tableLog = writeLog.getLog()
    for i = 0, 1 do
      print(string.format("0x%X",tableLog[i].address))
      print(TableToString(tableLog[i].original))
      print(TableToString(tableLog[i].new))
    end

     

    Спойлер

    image.png

     

    Далее сравнение stacktrace

    1. Делаем один stacktrace и сохраняем в файл 1

    2. Делаем второй stacktrace и сохраняем в файл 2

    3. Выбираем опцию сравнения в меню "open trace for comparision"

    Спойлер

    image.png

    4. Выбираем опцию Realign compare из контекстного меню и выбирая адрес слева или справа сравниваем трейс

    Спойлер

    image.png

     

    Трейслог можно снимать как с hex view байтов из окна памяти, так и с кода в дизассемблере. Например, одна ветвь кода будет связана с главным игроком на чтение или запись значения, а другая ветвь будет не с игроком... Можно попробовать сравнить и выйти вверх на начало функции где будут попадать одинаковые или разные аргументы перед call и исследовать их связь с изменением значения или его чтением.

    • Понравилось 1
    • Плюс 2
  14. Релиз Cheat Engine 6.8.3 февраля 7-го 2019

     

    Fixes:

    1. debugging/stepping with hotkeys
    2. several high DPI visual glitches
    3. VEH debugger reattach works again
    4. Pointerscan resume works again
    5. Stackview can now show by reference , previously it did nothing
    6. disassembling imul
    7. speedhack while key down option
    8. assembling values with x*2/4/8
    9. the "resume thread" in the threadlist now resumes threads instead of freezing them fixed an error popping up when editing registers with no debugger attached
    10. getNameFromAddress will not show userdefined symbols when symbols are disabled

     

    Additions and Changes:

    1. Waiting till all symbols have been loaded has been removed
    2. Launching structure compare from dissect data now only needs 1 address, though it's recommended to have at least 2 each
    3. Code completion in lua engine is now more smoother
    4. You can now compare traces generated by the tracer
    5. Threadlist window now has a copy to clipboard
    6. Structure compare now digs deeper into pointers
    7. Pointerscan import/export now works with newer types as well
    8. Better Lua comment support
    9. Added rudimentary sort to the structure compare window (based on levelwidth only)
    10. Referenced strings now also shows if it's unicode
    11. Formdesigner now has a context menu to add undocumented controls

     

    Lua:

    1. added enumMemoryRegions
    2. added getWriteLog (Let's you get the writelog and activate it)
    3. HexadecimalView: added the OnCharacterRender and OnValueRender events


    Post release patches:
    02/11/2019: Don't search addresslist entries in PDB when still loading and give an option to quit slow load
    02/17/2019: Fixed speedhack giving an error first time activating and removed a message when using ctrl and scanning

     

    Изменения в Lua файле документации

    Добавились поля

    Спойлер
    Цитата

    Hexadecimal class: (Inheritance: Panel->CustomControl->WinControl->Control->Component->Object)
      The visual hexadecimal object used on the memory view window
    properties
      Address: integer - The top address
      HasSelection: boolean - True if something is selected
      SelectionStart: integer
      SelectionStop: integer
      DisplayType: displaytype - The type being shown: dtByte, dtByteDec, dtWord, dtWordDec, dtDword, dtDwordDec, dtQword, dtQwordDec, dtSingle, dtDouble

      OnAddressChange(hexadecimalview, function): function(hexadecimalview, address)
      OnByteSelect(hexadecimalview, function): function(hexadecimalview, address, address2)
      OnCharacterRender: function(sender, address, text) return text end - Called when a character is being rendered. Use this to change it or change the canvas fonts (Warning: slow)
      OnValueRender: function(sender, address, text) return text end - Called when a value (depending on the displaytype) is being rendered. Use this to change it or change the canvas fonts (Warning: slow)

    methods
      -

     

    WriteLog(Inheritence: -)
    properties
      status: boolean
      logsize: integer 

    methods
      getLog(): table - Returns an indexed table with the write logs. each entry has a table with the fields: address, original and new

     

     

    Комментарии

     

    С CE Lua появилась возможность работать с HexView: выбор значений адресов, изменение типов, перехват рендерера для изменения шрифта или текста. Как я понял, если что-то поменялось в памяти, т.е. в окне HexView и стало красным, то это можно перехватить.

     

    Возможность работы с WriteLog записи в памяти. Т.е. этот же окно WriteLog ниже только есть доступ к нему через Lua. Хотя, как я не пытался вызывать getLog() метод не понятно из объекта какого-класса - CE не видит класс WriteLog... Короче ладно, может потом решится

    image.png

    • Понравилось 1
    • Плюс 3
  15. 10 часов назад, DenAks сказал:

    как написать скрипт который ищет все адреса со значением(сигнатурой) 7B 14 AE 47 E1 7A 84 3F 00 00 00 00 00 00 00 40 и заменяет на другую - 66 66 66 66 66 66 D6 3F 00 00 00 00 00 00 00 40

    Программировать

    Спойлер
    
    {$lua}
    [ENABLE]
    function WriteSignatures(targetSignature, overrideSignature, codePage)
      local byteLine = overrideSignature:gsub("%w+", "0x%0,"):sub(1,-2)
      local results = AOBScan(targetSignature, codePage)
      if (results == nil) then  return end
      for i = 0, results.Count-1 do
        local address = getAddress(results.getString(i))
        local lineCode = 'writeBytes('..address..','.. byteLine..')'
        loadstring(lineCode)()
      end
      results.destroy()
    end
    local targetSignature   = '7B 14 AE 47 E1 7A 84 3F 00 00 00 00 00 00 00 40'
    local overrideSignature = '66 66 66 66 66 66 D6 3F 00 00 00 00 00 00 00 40'
    local codePage = '-X*C*W' -- для кода: '+X-C-W',а для данных:'-X*C*W'
    WriteSignatures(targetSignature, overrideSignature, codePage)
    [DISABLE]

     

     

    • Плюс 1
  16. Screenshot_2.png

    Что-то у меня тоже не получилось найти.  Сделал иначе с декомпиляцией, правкой и собрал в exe.

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

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

     

     

    CCC.zip

    • Плюс 1
  17. А ты точно подключаешься к нужному процессу игры?  Проверь все процессы через Process Explorer

     

    Можешь попробовать мой плагин логов. Возможно будет понятнее, что делаешь не так

    Плагин для ведения логов в CE

    Спойлер

    Screenshot_130.png

     

     

    • Плюс 1
  18. В 09.01.2019 в 22:22, Alex2411 сказал:

    отдельно  скрипты работают , а  когда  соединю вместе , то  игра зависает иногда крашится

     

    Просто покажи как ты объединяешь скрипты. Может быть там ошибка от простой до той, с которой надо сидеть и разбираться в отладке. CE иногда может с багами скрипты компилировать

  19. Автозавершение

    Спойлер

    Screenshot_5.pngScreenshot_4.pngScreenshot_3.pngScreenshot_2.png

     

    2. Окно поиска исполняемого и не исполняемого кода из трейслога, из бинарника и из файла адресов.  Не тестил особо. Вылет получил после третьего отсева на туториале

    Спойлер

    Screenshot_6.png

     

    3. Новые опции поведения отладки. Не тестил

    Спойлер

    Screenshot_7.png

     

    Внимание привлекло опции слежения за областью памяти (структуры), т.к. какой код к каким адресам структуры обращается. Всякие watched regions

    Спойлер

    image.png

     

     

    • Понравилось 1
    • Плюс 1
×
×
  • Создать...

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

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