CELua[RU]
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти
    1. Главная
    2. MasterGH
    3. Сообщения
    Не в сети
    • Профиль
    • Подписки 1
    • Подписчики 1
    • Темы 129
    • Сообщения 252
    • Группы 4

    Сообщения

    Последние Лучшие сообщения Спорные
    • Рубрика "Lua код сегодня" №5 (активирующий скрипт)

      Возможно, очень нужный прием, если пользоваться активирующим скриптом. Полностью можно понять если посмотреть таблицу и запустить тутор cheatengine-i386.exe
      cheatengine-i386_active_example.CT

      Запуск первой записи в таблице (активирующий скрипт)

      getAutoAttachList().add("Tutorial-i386.exe")
      function onOpenProcess()
         getAddressList()[0].Active = true
      end
      

      Сам активирующий скрипт пример

      {$lua}
      function onOpenProcess()
         memrec.Active = true
      end
      [ENABLE]
      print("Активирующий скрипт. Включен ")
      // здесь пишем AA-код или иной
       
      [DISABLE]
      print("Активирующий скрипт. Выключен")
      // здесь пишем AA-код отмены или иной
      

      Когда сработал активирующий скрипт
      0cf450b4-6c08-4ffe-81ed-6286846889d6-изображение.png

      Опции, которые были выставлены для сворачивания внутрь записей под активирующий
      05d259c6-ed1f-4d97-8374-4900b32105fd-изображение.png

      "Активирующий скрипт" — главный скрипт, который вытаскивает адрес начала структуры игрока и помещает его в зарегистрированную метку. После активации разворачивает и показывает внутренние скрытые записи под собой. Это очень удобно показывать именно после подключения к процессу

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

      Характерно для активирующего скрипта большой размер, много регистрируемых однобайтовых меток и активируется он до запуска читов, чтобы метки успели зарегистрироваться и их "увидели" другие скрипты.
      263ae887-2733-40e4-9933-822f0b1e2afd-изображение.png

      написал в Обучающие примеры ce lua ce aa active rec ce memrec важно обучалка
      MasterGHM
      MasterGH
    • RE: Защита Трейнера

      Посмотрел. Что-то быстро ответить не получается. Лучше завтра, на свежую голову. У тебя уже скрипты идут все сложнее и сложнее. Сегодня понакидаю статеек, а завтра на свежую голову попробую снова глянуть

      написал в Вопросы
      MasterGHM
      MasterGH
    • RE: Рубрика "Lua код сегодня" №4

      Это C - язык программирования.

      написал в Обучающие примеры
      MasterGHM
      MasterGH
    • CE Вывод иерархии компонентов

      Скрипт позволит вывести иерархию компонентов CE в виде текста.
      3e71723a-06d5-4c3b-aea2-57d9db42938e-изображение.png
      Иерархия компонентов CE нужна для написания плагинов.

      Например, для ColorPicker и для смены шрифта (подобротнее об этом было где-то было в блоге).

      print("Controls list for CE "..getCEVersion()..'\n')
      
      function PrintComponents(obj, tabCount)
        local tabLine = string.rep('    ', tabCount)
        local componentCount = obj.ComponentCount
      
        if obj.Caption == nil then
           print(tabLine..obj.Name..'('..obj.ClassName..')')
        else
           print(tabLine..obj.Name..'('..obj.ClassName..') -> "'..obj.Caption..'"')
        end
      
        for i = 0, componentCount - 1 do
          local subObject = obj.Component[i]
          PrintComponents(subObject, tabCount + 1)
        end
      end
      
      PrintComponents(MainForm, 1)
      

      Результат

      Controls list for CE 7.4

      MainForm(TMainForm) -> "Cheat Engine 7.4"
      Splitter1(TSplitter)
      Panel1(TPanel) -> ""
      Panel4(TPanel) -> ""
      advancedbutton(TSpeedButton) -> "Advanced Options"
      CommentButton(TSpeedButton) -> "Table Extras"
      lblSigned(TLabel) -> "This table has been signed by
      Someone"
      Panel5(TPanel) -> ""
      ProcessLabel(TLabel) -> "No Process Selected"
      foundcountlabel(TLabel) -> "0"
      ScanText(TLabel) -> "Value:"
      lblScanType(TLabel) -> "Scan Type"
      lblValueType(TLabel) -> "Value Type"
      LoadButton(TSpeedButton) -> ""
      SaveButton(TSpeedButton) -> ""
      Label6(TLabel) -> "Found:"
      SpeedButton2(TSpeedButton) -> ""
      SpeedButton3(TSpeedButton) -> ""
      btnNewScan(TButton) -> "First Scan"
      gbScanOptions(TGroupBox) -> "Memory Scan Options"
      ScanOptionsModuleList(TComboBox)
      Panel2(TPanel) -> ""
      cbCopyOnWrite(TCheckBox) -> "CopyOnWrite"
      cbWritable(TCheckBox) -> "Writable"
      cbExecutable(TCheckBox) -> "Executable"
      Panel3(TPanel) -> ""
      Label2(TLabel) -> "Stop"
      Label1(TLabel) -> "Start"
      ToAddress(TEdit)
      FromAddress(TEdit)
      Panel6(TPanel) -> ""
      cbFastScan(TCheckBox) -> "Fast Scan"
      edtAlignment(TEdit)
      cbPauseWhileScanning(TCheckBox) -> "Pause the game while scanning"
      Panel8(TPanel) -> ""
      rbfsmLastDigts(TRadioButton) -> "Last Digits"
      rbFsmAligned(TRadioButton) -> "Alignment"
      btnNextScan(TButton) -> "Next Scan"
      ScanType(TComboBox)
      VarType(TComboBox)
      ProgressBar(TProgressBar)
      UndoScan(TButton) -> "Undo Scan"
      scanvalue(TEdit)
      Panel7(TPanel) -> ""
      sbOpenProcess(TSpeedButton) -> ""
      btnFirst(TButton) -> "First Scan2"
      btnNext(TButton) -> "Next scan 2"
      LogoPanel(TPanel) -> ""
      Logo(TImage)
      SettingsButton(TSpeedButton) -> "Settings"
      pnlScanValueOptions(TPanel) -> ""
      rbBit(TRadioButton) -> "Bits"
      rbDec(TRadioButton) -> "Decimal"
      cbHexadecimal(TCheckBox) -> "Hex"
      Panel9(TPanel) -> ""
      pnlScanOptions(TPanel) -> ""
      pnlFloat(TPanel) -> ""
      rt3(TRadioButton) -> "Truncated"
      rt1(TRadioButton) -> "Rounded (default)"
      rt2(TRadioButton) -> "Rounded (extreme)"
      cbUnicode(TCheckBox) -> "UTF-16"
      cbCaseSensitive(TCheckBox) -> "Case sensitive"
      cbFloatSimple(TCheckBox) -> "Simple values only"
      cbpercentage(TCheckBox) -> "Percent"
      cbNot(TCheckBox) -> "Not"
      cbCodePage(TCheckBox) -> "Codepage"
      cbRepeatUntilStopped(TCheckBox) -> "Repeat"
      cbLuaFormula(TCheckBox) -> "Lua formula"
      cbNewLuaState(TCheckBox) -> "Separate Lua state"
      Panel10(TPanel) -> ""
      cbUnrandomizer(TCheckBox) -> "Unrandomizer"
      cbSpeedhack(TCheckBox) -> "Enable Speedhack"
      Panel14(TPanel) -> ""
      Label54(TLabel) -> "Speed"
      lblSH0(TLabel) -> "0"
      lblSH20(TLabel) -> "500"
      btnSetSpeedhack2(TButton) -> "Apply"
      editSH2(TEdit)
      tbSpeed(TTrackBar)
      scanvalue2(TEdit)
      ScanText2(TLabel) -> "Scan Value"
      andlabel(TLabel) -> "and"
      Foundlist3(TListView)
      (TCustomListViewEditor)
      btnAddAddressManually(TButton) -> "Add Address Manually"
      btnMemoryView(TButton) -> "Memory View"
      cbCompareToSavedScan(TCheckBox) -> "Compare to first/saved scan"
      lblcompareToSavedScan(TLabel) -> "<xxxx>"
      UpdateTimer(TTimer)
      FreezeTimer(TTimer)
      PopupMenu2(TPopupMenu)
      (TMenuItem) -> ""
      (TMenuItem) -> "Add to new group"
      miAutoAssembleErrorMessage(TMenuItem) -> "<Error message here>"
      Deletethisrecord1(TMenuItem) -> "Delete this record"
      Change1(TMenuItem) -> "Change record"
      Description1(TMenuItem) -> "Description"
      Address1(TMenuItem) -> "Address"
      Type1(TMenuItem) -> "Type"
      Value1(TMenuItem) -> "Value"
      miUndoValue(TMenuItem) -> "Undo last edit"
      Smarteditaddresses1(TMenuItem) -> "Smart edit address(es)"
      Browsethismemoryregion1(TMenuItem) -> "Browse this memory region"
      miDisassemble(TMenuItem) -> "Disassemble this memory region"
      miShowAsSigned(TMenuItem) -> "Show as signed"
      Showashexadecimal1(TMenuItem) -> "Show as hexadecimal"
      miZeroTerminate(TMenuItem) -> "Zero-Terminate string"
      miShowAsBinary(TMenuItem) -> "Show as binary"
      miChangeColor(TMenuItem) -> "Change Color"
      SetHotkey1(TMenuItem) -> "Assign Hotkey"
      miSetDropdownOptions(TMenuItem) -> "Set/Change dropdown selection options"
      Freezealladdresses2(TMenuItem) -> "Toggle Selected Records"
      miFreezePositive(TMenuItem) -> "Freeze Positive"
      miFreezeNegative(TMenuItem) -> "Freeze Negative"
      Changescript1(TMenuItem) -> "Change script"
      miAsyncScript(TMenuItem) -> "Execute asynchronous"
      N5(TMenuItem) -> "-"
      miGeneratePointermap(TMenuItem) -> "Generate pointermap"
      Pointerscanforthisaddress1(TMenuItem) -> "Pointer scan for this address"
      Findoutwhataccessesthisaddress1(TMenuItem) -> "Find out what accesses this address"
      Setbreakpoint1(TMenuItem) -> "Find out what writes to this address"
      sep2(TMenuItem) -> "-"
      miDBVMFindWhatWritesOrAccesses(TMenuItem) -> "DBVM Find out what writes or accesses this address"
      sep1(TMenuItem) -> "-"
      Calculatenewvaluepart21(TMenuItem) -> "Recalculate new addresses"
      Forcerechecksymbols1(TMenuItem) -> "Force recheck symbols"
      N4(TMenuItem) -> "-"
      Cut1(TMenuItem) -> "Cut"
      Copy1(TMenuItem) -> "Copy"
      Paste1(TMenuItem) -> "Paste"
      MenuItem1(TMenuItem) -> "Select All"
      N1(TMenuItem) -> "-"
      CreateGroup(TMenuItem) -> "Create Header"
      miGroupconfig(TMenuItem) -> "Group config"
      miHideChildren(TMenuItem) -> "Hide children when deactivated"
      miBindActivation(TMenuItem) -> "Activating this entry activates it's children"
      miBindDeactivation(TMenuItem) -> "Deactivating this entry deactivates it's children"
      miRecursiveSetValue(TMenuItem) -> "Setting a value to this entry sets same value to children"
      miAllowCollapse(TMenuItem) -> "Allow left and right arrow keys to collapse and expand"
      miManualExpandCollapse(TMenuItem) -> "Manual expand/collapse"
      miAlwaysHideChildren(TMenuItem) -> "Always hide children"
      Plugins1(TMenuItem) -> "Plugins"
      foundlistpopup(TPopupMenu)
      (TMenuItem) -> ""
      miAddAddress(TMenuItem) -> "Add selected addresses to the addresslist"
      miChangeValue(TMenuItem) -> "Change value of selected addresses"
      miChangeValueBack(TMenuItem) -> "Change value of selected addresses back to previous/saved value"
      Browsethismemoryarrea1(TMenuItem) -> "Browse this memory region"
      Browsethismemoryregioninthedisassembler1(TMenuItem) -> "Disassemble this memory region"
      Removeselectedaddresses1(TMenuItem) -> "Remove selected addresses"
      Copyselectedaddresses1(TMenuItem) -> "Copy selected addresses"
      Selectallitems1(TMenuItem) -> "Select all items"
      MenuItem4(TMenuItem) -> "-"
      miShowPreviousValue(TMenuItem) -> "Show previous value column(s)"
      miOnlyShowCurrentCompareToColumn(TMenuItem) -> "Only show current "compare to" column"
      MenuItem13(TMenuItem) -> "-"
      miForgotScan(TMenuItem) -> "Reload the previous value list (Forgot value scan)"
      MenuItem14(TMenuItem) -> "-"
      miFlFindWhatAccesses(TMenuItem) -> "Find out what accesses this address"
      miFlFindWhatWrites(TMenuItem) -> "Find out what writes to this address"
      N2(TMenuItem) -> "-"
      miFoundListPreferences(TMenuItem) -> "Preferences"
      MenuItem19(TMenuItem) -> "-"
      miDisplayHex(TMenuItem) -> "Hexadecimal"
      miDisplayDefault(TMenuItem) -> "Default"
      miDisplayByte(TMenuItem) -> "Byte"
      miDisplay2Byte(TMenuItem) -> "2 Bytes"
      miDisplay4Byte(TMenuItem) -> "4 Bytes"
      miDisplay8Byte(TMenuItem) -> "8 Bytes"
      miDisplayFloat(TMenuItem) -> "Float"
      miDisplayDouble(TMenuItem) -> "Double"
      OpenDialog1(TOpenDialog)
      SaveDialog1(TSaveDialog)
      TopDisabler(TTimer)
      emptypopup(TPopupMenu)
      (TMenuItem) -> ""
      MenuItem2(TMenuItem) -> "New Item1"
      ccpmenu(TPopupMenu)
      (TMenuItem) -> ""
      Cut2(TMenuItem) -> "Cut"
      Copy2(TMenuItem) -> "Copy"
      Paste2(TMenuItem) -> "Paste"
      ActionList1(TActionList)
      actSave(TAction) -> ""
      actOpen(TAction) -> ""
      actAutoAssemble(TAction) -> "actAutoAssemble"
      actMemoryView(TAction) -> "actMemoryView"
      actOpenProcesslist(TAction) -> ""
      actOpenDissectStructure(TAction) -> "actOpenDissectStructure"
      actOpenLuaEngine(TAction) -> "actOpenLuaEngine"
      UpdateFoundlisttimer(TTimer)
      AutoAttachTimer(TTimer)
      MainMenu1(TMainMenu)
      (TMenuItem) -> ""
      (TMenuItem) -> "English"
      (TMenuItem) -> "Save scan session"
      (TMenuItem) -> "Load scan session"
      (TMenuItem) -> "-"
      File1(TMenuItem) -> "&File"
      miAddTab(TMenuItem) -> "Add scan tab"
      New1(TMenuItem) -> "Clear list"
      MenuItem8(TMenuItem) -> "Open Process"
      miOpenFile(TMenuItem) -> "Open File"
      miSaveFile(TMenuItem) -> "Save File"
      N7(TMenuItem) -> "-"
      miSave(TMenuItem) -> "Save"
      Save1(TMenuItem) -> "Save As..."
      Load1(TMenuItem) -> "Load"
      miLoadRecent(TMenuItem) -> "Load Recent"
      miSignTable(TMenuItem) -> "Sign table"
      MenuItem3(TMenuItem) -> "-"
      miSaveScanresults(TMenuItem) -> "Save current scanresults"
      miDeleteSavedScanResults(TMenuItem) -> "Delete scanresult"
      MenuItem6(TMenuItem) -> "-"
      MenuItem9(TMenuItem) -> "Generate generic trainer lua script from table"
      MenuItem5(TMenuItem) -> "-"
      MenuItem7(TMenuItem) -> "Quit"
      Edit3(TMenuItem) -> "&Edit"
      Settings1(TMenuItem) -> "Settings"
      Process1(TMenuItem) -> "&Process"
      OpenProcess1(TMenuItem) -> "Open Process window"
      CreateProcess1(TMenuItem) -> "Create Process"
      N6(TMenuItem) -> "-"
      a1(TMenuItem) -> "a"
      b1(TMenuItem) -> "b"
      c1(TMenuItem) -> "c"
      d1(TMenuItem) -> "d"
      e1(TMenuItem) -> "e"
      miTable(TMenuItem) -> "Table"
      miShowLuaScript(TMenuItem) -> "Show Cheat Table Lua Script"
      MenuItem10(TMenuItem) -> "-"
      miCreateLuaForm(TMenuItem) -> "Create form"
      miResyncFormsWithLua(TMenuItem) -> "Resynchronize forms with Lua"
      miLuaFormsSeperator(TMenuItem) -> "-"
      miAddFile(TMenuItem) -> "Add file"
      mi3d(TMenuItem) -> "D3D"
      miHookD3D(TMenuItem) -> "Hook Direct3D"
      MenuItem11(TMenuItem) -> "-"
      miSetCrosshair(TMenuItem) -> "Set custom crosshair"
      miWireframe(TMenuItem) -> "Toggle wireframe mode"
      miZbuffer(TMenuItem) -> "Toggle disabled zbuffer"
      miLockMouseInGame(TMenuItem) -> "Lock mouse in game window"
      miSetupSnapshotKeys(TMenuItem) -> "Start and configure snapshot recording"
      miSnapshothandler(TMenuItem) -> "Snapshot handler"
      ools1(TMenuItem) -> "&Tools"
      miDotNET(TMenuItem) -> ".Net"
      miGetDotNetObjectList(TMenuItem) -> "Get object list"
      miNetwork(TMenuItem) -> "Network"
      miCompression(TMenuItem) -> "Compression"
      miScanDirtyOnly(TMenuItem) -> "Scan changed regions only"
      miScanPagedOnly(TMenuItem) -> "Scan paged (physical) memory only"
      Plugins2(TMenuItem) -> "P&lugins"
      miLanguages(TMenuItem) -> "Languages"
      miHelp(TMenuItem) -> "&Help"
      Helpindex1(TMenuItem) -> "Cheat Engine Help"
      miLuaDocumentation(TMenuItem) -> "Lua documentation"
      miTutorial(TMenuItem) -> "Cheat Engine Tutorial"
      MenuItem12(TMenuItem) -> "Cheat Engine Tutorial (64-Bit)"
      MenuItem15(TMenuItem) -> "Cheat Engine Tutorial Games"
      miEnableLCLDebug(TMenuItem) -> "Generate errorlogs"
      N8(TMenuItem) -> "-"
      miAbout(TMenuItem) -> "About"
      pmTablist(TPopupMenu)
      (TMenuItem) -> ""
      miRenameTab(TMenuItem) -> "Rename"
      miTablistSeperator(TMenuItem) -> "-"
      miCloseTab(TMenuItem) -> "Close tab"
      pmValueType(TPopupMenu)
      (TMenuItem) -> ""
      miDefineNewCustomType(TMenuItem) -> "Define new custom type (Auto Assembler)"
      miDefineNewCustomTypeLua(TMenuItem) -> "Define new custom type (LUA)"
      miEditCustomType(TMenuItem) -> "Edit selected custom type"
      miDeleteCustomType(TMenuItem) -> "Delete selected custom type"
      miShowCustomTypeDebug(TMenuItem) -> "Show custom type debug info"
      ColorDialog1(TColorDialog)
      pmResetRange(TPopupMenu)
      (TMenuItem) -> ""
      miResetRange(TMenuItem) -> "Reset range"
      pmScanRegion(TPopupMenu)
      (TMenuItem) -> ""
      miPresetAll(TMenuItem) -> "Preset: Scan all memory"
      miPresetWritable(TMenuItem) -> "Preset: Scan writable memory"
      MainMenu2(TMainMenu)
      (TMenuItem) -> ""
      tLuaGCPassive(TTimer)
      tLuaGCActive(TTimer)
      mfImageList(TImageList)
      frmAutoInject(TfrmAutoInject) -> "Lua script: Cheat Table"
      Panel1(TPanel) -> ""
      Panel3(TPanel) -> ""
      btnExecute(TButton) -> "Execute script"
      Panel2(TPanel) -> ""
      MainMenu1(TMainMenu)
      (TMenuItem) -> ""
      File1(TMenuItem) -> "File"
      miNewWindow(TMenuItem) -> "New Window"
      miNewTab(TMenuItem) -> "New Tab"
      Load1(TMenuItem) -> "Open"
      Save1(TMenuItem) -> "Save"
      SaveAs1(TMenuItem) -> "Save As..."
      miLuaSyntaxCheck(TMenuItem) -> "Syntax Check"
      Assigntocurrentcheattable1(TMenuItem) -> "Assign to current cheat table"
      N2(TMenuItem) -> "-"
      Exit1(TMenuItem) -> "Exit"
      View1(TMenuItem) -> "View"
      Syntaxhighlighting1(TMenuItem) -> "Syntax highlighting"
      MenuItem3(TMenuItem) -> "Auto assembler syntax highlighting preferences"
      MenuItem2(TMenuItem) -> "Lua syntax highlighting preferences"
      MenuItem1(TMenuItem) -> "C highlighting preferences"
      AAPref1(TMenuItem) -> "Preferences"
      emplate1(TMenuItem) -> "Template"
      Codeinjection1(TMenuItem) -> "Code injection"
      APIHook1(TMenuItem) -> "API Hook"
      Coderelocation1(TMenuItem) -> "Code relocation"
      miCallLua(TMenuItem) -> "Call CE lua function"
      menuAOBInjection(TMenuItem) -> "AOB Injection"
      menuFullInjection(TMenuItem) -> "Full Injection"
      CheatTablecompliantcodee1(TMenuItem) -> "Cheat Table framework code"
      Inject1(TMenuItem) -> "Inject"
      Injectincurrentprocess1(TMenuItem) -> "Inject into current process"
      Injectintocurrentprocessandexecute1(TMenuItem) -> "Inject into current process and execute"
      OpenDialog1(TOpenDialog)
      SaveDialog1(TSaveDialog)
      PopupMenu1(TPopupMenu)
      (TMenuItem) -> ""
      miCut(TMenuItem) -> "Cu&t"
      miCopy(TMenuItem) -> "&Copy"
      miPaste(TMenuItem) -> "&Paste"
      miUndo(TMenuItem) -> "&Undo"
      miRedo(TMenuItem) -> "Redo"
      N6(TMenuItem) -> "-"
      miFind(TMenuItem) -> "&Find..."
      mifindNext(TMenuItem) -> "Find Next"
      mifindPrevious(TMenuItem) -> "Find Previous"
      miReplace(TMenuItem) -> "Replace"
      TabMenu(TPopupMenu)
      (TMenuItem) -> ""
      miMoveLeft(TMenuItem) -> "Move left"
      miMoveRight(TMenuItem) -> "Move right"
      miRenameTab(TMenuItem) -> "Rename"
      Close1(TMenuItem) -> "Close"
      FindDialog1(TFindDialog)
      undotimer(TTimer)
      ReplaceDialog1(TReplaceDialog)
      aaImageList(TImageList)
      (TSynAASyn)
      (TSynCppSyn)
      (TSynLuaSyn)
      Assemblescreen(TSynEditPlus)
      (TSynBeautifier)
      SynLeftGutterPartList1(TSynGutterPartList)
      SynGutterMarks1(TSynGutterMarks)
      SynGutterLineNumber1(TSynGutterLineNumber)
      SynGutterChanges1(TSynGutterChanges)
      SynGutterSeparator1(TSynGutterSeparator)
      SynGutterCodeFolding1(TSynGutterCodeFolding)
      SynRightGutterPartList1(TSynRightGutterPartList)
      (TTimer)
      (TAddresslist) -> ""
      List(TTreeviewWithScroll)
      (TTimer)
      (TTimer)
      Header(THeaderControl)
      (TPopupMenu)
      (TMenuItem) -> ""
      (TMenuItem) -> "Sort on click"
      (TTimer)

      написал в Плагин-строй ce plugin ce lua ce components
      MasterGHM
      MasterGH
    • Что в разделе

      Информация по созданию плагинов для CE или связанная с ними. Плагины CE — это различные инструменты, которые позволяют расширить функционал CE.

      написал в Плагин-строй
      MasterGHM
      MasterGH
    • Рубрика "Lua код сегодня" №4

      Иногда Lua-код слишком медленный, а на asm писать слишком много, тогда на помощь придет CCODE

      C inline вставки позволяют писать C-код вместо ассемблера
      Справочник по C-коду можно найти в Интернете.

      Примерчик будет:

      {$CCODE base=EBX}
         int* myHealth=base+0x4B0;
         *myHealth = 999;
      {$asm}
      
      [ENABLE]
      aobscanmodule(INJECT_test,Tutorial-i386.exe,29 83 B0 04 00 00) 
      alloc(newmem,$1000)
      label(code)
      label(return)
      
      newmem:
      {$CCODE base=EBX}
         int* myHealth=base+0x4B0;
         *myHealth = 999;
      {$asm}
      
      code:
        //sub [ebx+000004B0],eax
        jmp return
      
      INJECT_test:
        jmp newmem
        nop
      return:
      registersymbol(INJECT_test)
      
      [DISABLE]
      INJECT_test:
        db 29 83 B0 04 00 00
      
      unregistersymbol(INJECT_test)
      dealloc(newmem)
      
      {
      // ORIGINAL CODE - INJECTION POINT: Tutorial-i386.exe+25A6F
      
      Tutorial-i386.exe+25A49: 8D 55 DC           - lea edx,[ebp-24]
      Tutorial-i386.exe+25A4C: 8D 4D F4           - lea ecx,[ebp-0C]
      Tutorial-i386.exe+25A4F: E8 8C 7D FE FF     - call Tutorial-i386.exe+D7E0
      Tutorial-i386.exe+25A54: E8 37 E4 FD FF     - call Tutorial-i386.exe+3E90
      Tutorial-i386.exe+25A59: 50                 - push eax
      Tutorial-i386.exe+25A5A: 85 C0              - test eax,eax
      Tutorial-i386.exe+25A5C: 0F 85 CE 00 00 00  - jne Tutorial-i386.exe+25B30
      Tutorial-i386.exe+25A62: B8 05 00 00 00     - mov eax,00000005
      Tutorial-i386.exe+25A67: E8 C4 93 FE FF     - call Tutorial-i386.exe+EE30
      Tutorial-i386.exe+25A6C: 83 C0 01           - add eax,01
      // ---------- INJECTING HERE ----------
      Tutorial-i386.exe+25A6F: 29 83 B0 04 00 00  - sub [ebx+000004B0],eax
      // ---------- DONE INJECTING  ----------
      Tutorial-i386.exe+25A75: 8D 45 D4           - lea eax,[ebp-2C]
      Tutorial-i386.exe+25A78: E8 53 DF FD FF     - call Tutorial-i386.exe+39D0
      Tutorial-i386.exe+25A7D: 8B 83 B0 04 00 00  - mov eax,[ebx+000004B0]
      Tutorial-i386.exe+25A83: 68 FF 00 00 00     - push 000000FF
      Tutorial-i386.exe+25A88: 8D 8D D4 FE FF FF  - lea ecx,[ebp-0000012C]
      Tutorial-i386.exe+25A8E: BA FF FF FF FF     - mov edx,FFFFFFFF
      Tutorial-i386.exe+25A93: E8 68 F2 FD FF     - call Tutorial-i386.exe+4D00
      Tutorial-i386.exe+25A98: 8D 4D D4           - lea ecx,[ebp-2C]
      Tutorial-i386.exe+25A9B: 66 31 D2           - xor dx,dx
      Tutorial-i386.exe+25A9E: 8D 85 D4 FE FF FF  - lea eax,[ebp-0000012C]
      }
      
      написал в Обучающие примеры ce ccode ce aa ce memrec обучалка
      MasterGHM
      MasterGH
    • RE: Защита Трейнера

      Ок, посмотрю

      написал в Вопросы
      MasterGHM
      MasterGH
    • RE: Защита Трейнера

      @Pitronic посмотрю завтра

      написал в Вопросы
      MasterGHM
      MasterGH
    • RE: Защита Трейнера
      \-- если процесс не открыт, то подкючиться к нему
      if (getProcessIDFromProcessName("Pet Show Craze.exe")==nil) then
           OpenProcess("Pet Show Craze.exe")
           И здесь останови таймер пока
      end
      

      Тем самым ты подключишь процесс.

      Далее жди события подключения процесса. Как его ждать? Ищем в справке

      onOpenProcess(processid):
      

      После подключения вызввай активацию записи

      function onOpenProcess(processid)
         SetStateRecord("Activation", true)
      end
      

      Попробуй сам расписать на бумаги логику.

      Сначала проверяем открыт ли процесс.
      Если нет, то открыть его. Перед тем как его открыть, то, наверно, надо подождать события его открытия onOpenProcess(processid), а после этого события активировать запись.

      Или подожди до вечера пятницы. Как дома буду запущу ce 7.5. За 5 минут разберешься.

      Я сейчас, пока не могу ответить нормально без cheat engibe с телефона

      написал в Вопросы
      MasterGHM
      MasterGH
    • RE: Защита Трейнера

      Наверно CE у меня 6.8.3 была на старом ноуте, с которого писал. А сейчас я с телефона, уставший с работы. С 8ми утра кодили до позднего вечера. Позже, наверно, напишу, как отдохну. Можешь написать больше вопросов

      P.s Пиши, пожалуйста, мне на "ты", а то не удобно себя чувствую.

      написал в Вопросы
      MasterGHM
      MasterGH
    • RE: Защита Трейнера

      Судя по названию ошибки нет закрывающих скобок для текста.
      local aa_script =
      [[
      Здесь текст
      ]]

      написал в Вопросы
      MasterGHM
      MasterGH
    • RE: Защита Трейнера

      Да, можно. Скорее всего, желательно для флагов отдельную память делать. Чтобы флаги были выровнены по адресам и не смешивались с опкодами. Можно, этого и не делать. На твое усмотрение.

      написал в Вопросы
      MasterGHM
      MasterGH
    • Рубрика "Lua код сегодня" №3

      1befdd4e-3df6-44c7-b7d6-c916953906e3-изображение.png

      Создать пустую запись чтобы пробовать вывод названия записи через lua

      {$lua}
      print(memrec.Description)
      [ENABLE]
      print('is  on')
      [DISABLE]
      print('is  off')
      

      a351481e-040c-40a1-bb88-b011c5633f53-изображение.png

      Поля memrec многочисленны и описываются в документации. См. MemoryRecord Class: в ...\Cheat Engine 6.8.3\celua.txt

      написал в Обучающие примеры ce memrec ce aa ce lua ce .ct обучалка
      MasterGHM
      MasterGH
    • RE: Защита Трейнера

      У меня другая версия CE

      local aa_script = [[aobscanmodule(INJECT,Tutorial-x86_64.exe,29 93 90 07 00 00) // should be unique
      alloc(newmem,$1000,"Tutorial-x86_64.exe"+2B2D7)
      alloc(newmem2,$1000,"Tutorial-x86_64.exe"+2B2D7)
      registersymbol(flag)
      label(code)
      label(return)
      
      newmem2:
      flag:
      dd 0
      
      newmem:
      
      code:
        sub [rbx+00000790],edx
        jmp return
      
      INJECT:
        jmp newmem
        nop
      return:
      
      registersymbol(INJECT)]]
      
      autoAssemble(aa_script)
      
      написал в Вопросы
      MasterGHM
      MasterGH
    • Принципы управления
      1. Интерфейсный
        Кнопками и графическими элеменами.
        Например, окно CE позволяет удобно ставить галки и переключать скрипты, поведения, сценарии.
        Например, ingame меню. Т.е. отрисовывается внутри окна игры.

      2. Горячими клавишами
        Можно не переключаться между окнами, а активировать нужной комбинацией нужный сценарий. Однако, когда опций будет мноного, можно запросто забыть эти комбинации или подсматривать их.

      3. Через консоль
        Эта консоль может быть в CE или ingame консоль.
        Несморя на малую популярность это очень гибкий инструмент. С его помощью можно давать команды игровому процессу.
        Например, сохранить или загрузить игру, сменить локацию и сцену, добавить ресурсов, создать персонажа, задать команду персонажу и прочее, прочее.
        Сейчас это все в теории и не всегда просто реализуемо, но все это реализумо тем более что это процесс не удаленный и его память доступна.

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

      Раньше на gamehacklab мы не уделяли внимания способу3. Теперь будем уделять большое внимание консоли. Практически все команды мы будем делать через консоль. И еще один момент исходники мы будем выкладывать в репозиторий, чтобы иметь возможность их корректировать и даже улучшать сохраняя версии.

      написал в Управление управление идея консоль
      MasterGHM
      MasterGH
    • Асинхронное выполнение сценариев

      Записи в таблице CE представим как сценарии, которые должны выполнятся асинхронно. Т.е. они что-от делают некоторое время одновременно, например, сканируют память. При этом ничего зависает.

      Для этого будем актировать такую опцию
      5a911696-ae56-4772-bf1e-7b32fab46d53-изображение.png

      Если эту опцию поставить на записи, то появляются вот такие часики
      29546916-8f04-4fa5-99df-d43ae5016af3-изображение.png

      АА-шные скрипты могут искать в этот момент сигнатуру.

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

      [ENABLE]
      {$lua}
        local _, counter, _, async = memrec.Description:match('(Cunt.=.)(%d*).*(Async.=.)(%w*)')
        memrec.Async = async == 'true'
        for i = 1, counter do end
        local currentTime = os.date("%c"):gsub('/','.')
        print('Finish record:' .. memrec.Description..', at time ' .. currentTime)
        memrec.Active = false
      
        function onMemRecPostExecute(memoryrecord, newState, succeeded)
         if (memoryrecord == memrec and newState == true) then
           memrec.Active = false
         end
        end
      {$asm}
      [DISABLE]
      

      03992ff1-2202-400d-9c53-71d3d71d4163-изображение.png

      После выполнения
      b8fdfa10-52dd-4ad2-8ede-445f363c967c-изображение.png

      Если продублировать 4 скрипта, то видим, что нельзя запустить асинхронно более двух скриптов
      c0aeea14-3aa7-457c-9685-f1fb4bc3859f-изображение.png

      Вот такой вариант еще

      [ENABLE]
      {$Lua}
        function threadFunction(th)
          th.freeOnTerminate(false)
          th.Name = 'myThread'
          for b = 1, 200000000 do
            --checkSynchronize()
          end
          --while not th.Terminated do
          --  myvar=myvar+1
          --  synchronize(function() MainForm.Caption = 'myvar '..myvar end)
           -- sleep(2000)
          --end
          synchronize(function() print("1") end)
        end
      
        --myvar=0
        local myThread = createNativeThreadSuspended(threadFunction)
        myThread.resume()
      {$Asm}
      
      [DISABLE]
      {$Lua}
        if myThread then
           myThread.terminate()
           myThread.waitfor()
           myThread.destroy()
           myThread=nil
        end
      {$Asm}
      

      таблица
      Asynchronous testing.CT

      написал в Приёмы ce .ct ce aa ce async фишки
      MasterGHM
      MasterGH
    • Рубрика "Lua код сегодня" №2
      local address = 0x0170A490
      local x, y, z = 0, 100, 100
      writeDouble(address, x)
      writeDouble(address + 8, y)
      writeDouble(address + 16, z)
      

      Данный код позволяет записать значение координат и переместить персонажа.
      Обычно, адреса координат идут последовательно x,y,z и имеют тип float или double.

      Чтобы переместить персонажа нужно узнать его адрес координат и выполнить код в Lua консоли
      30d5c11d-7b9e-4706-a9c9-221f601d2731-изображение.png

      И убедиться, что данные записались в память процесса
      0e82af37-125b-41b1-9331-fe1bbc2f3042-изображение.png

      Далее мы с вами будем очень много программировать короткими примерами в консоли управляя данными процесса и в том числе связывать это с базами данных. Например, такой-то пользователь, для такого-то персонажа создал таблицу телепортации с локациями и координатами. Этой таблицей можно будет очень удобно пользоваться. Также вы изучите принцип программирования, который используется при работе с СУБД.

      написал в Обучающие примеры ce lua обучалка
      MasterGHM
      MasterGH
    • RE: Сделать большой брейкпоинт на структуру через dbk_useKernelmodeOpenProcess

      Пользователь @Pitronic написал в Сделать большой брейкпоинт на структуру через dbk_useKernelmodeOpenProcess:

      Мы знаем что адрес таймера на выстрел во первых лежит в одной структуре с патронами, во вторых адрес в начале меняется в момент выстрела одновременно с уменьшением патронов и в пределах от одной до 100 миллисекунд возвращается в прежнее значение. может lua скрипт специальный можно сделать?

      Я бы сделал без скриптов.

      1. делаешь dessect structure
        6b8ca47d-ed90-46ea-95e7-cd454196cb74-изображение.png
      2. Далее как обычно. Создаешь структуру. Затем вот это (следить за изменениями)
        17867765-a66b-43e9-9242-482b0b8c7cf3-изображение.png
      3. ну а дальше воспроизводишь свой выстрел
      4. потом создаешь структуру из изменившихся данных (потому что их будешь очень много наверняка)
        783b72ad-84e9-4444-9d5f-c02f5beb20c3-изображение.png
      5. затем делаешь lock на структуру, чтобы значения зафиксирвать
        a8243497-20b9-4ad1-9a14-056b452cace1-изображение.png
      6. затем рядом создаешь второй ряд по ctrl +a и смотрим изменения в реальном времени (игра должна быть в оконном режим, чтобы мы видели как цифры скачут)
        227628c2-13fe-485d-8632-0defed52710b-изображение.png
      7. чтобы увидеть изменения менее 100мс нужно поставить интервал меньше
        5dff820a-cb72-45a6-b625-04112696daec-изображение.png

      По идее это должно сработать

      написал в Приёмы
      MasterGHM
      MasterGH
    • RE: Делаем EFLAGS таблицу

      Ответил

      написал в Приёмы
      MasterGHM
      MasterGH
    • RE: Защита Трейнера

      Пользователь @Pitronic написал в Защита Трейнера:

      Я как понял это скрипт в таблицу

      Этот скрипт не в таблицу. Ты можешь писать свои флаги здесь

      local scriptStr = [[
      [ENABLE]
      // здесь твой флаг
      
      [DISABLE]
      // здесь твой флаг
      ]]
      local enabledOk, disableInfo = autoAssemble(scriptStr)
      
      if enabledOk then
        print('>The auto assembler script was enabled successfully.')
      else
        print('>There was an error enabling the auto assembler script.')
      end
      
      print(disableInfo)
      local disabledOk = autoAssemble(scriptStr, disableInfo)
      
      if disabledOk then
        disableInfo = nil
        print('>The auto assembler script was disabled successfully.')
      else
        print('>There was an error disabling the auto assembler script.')
      end
      
      написал в Вопросы
      MasterGHM
      MasterGH
    • 1
    • 2
    • 9
    • 10
    • 11
    • 12
    • 13
    • 11 / 13