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

partoftheworlD

Пользователи+
  • Постов

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

  • Посещение

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

    172

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

  1. Вот возник такой вопрос, можно ли заскриптовать Cheat Engine как например ida, immunity debbuger, fiddler для выполнения рутинных задач или придется писать плагин? Хотел автоматизировать расстановку  бряков/трассировки на 10 и более адресов.

     

    Вроде по примеру на CE разобрался, как ставить бряки. Теперь такой вопрос, массив адресов указывать типа addresslist =  { 0x01, 0x02 } и после в цикле перечислять addresslist[iterator] и .т.д?

    Скрытый текст
    
    if not armors then
       armors = { }
    end
    
    addresslist = {0xC9B080, 0xC9B0A7}
    
    base = getAddress("gamedll_x64_rwdi.dll")
    for j = 1,2 do
    test = base + addresslist[j]
    end
    
    
    function debugger_onBreakpoint()
             if (RIP ~= test) then return 0 end
             armors[RBX] = readFloat(RBX)
             debug_continueFromBreakpoint(co_run)
             return 1
    end
    
    openProcess("DyingLightGame.exe")
    debugProcess()
    debug_setBreakpoint(test)
    debugger_onBreakpoint()

     

     

  2. 12 минуты назад, gmz сказал:

    + CheckRemoteDebuggerPresent +через PEB иногда получают эту инфу

    ну и такое:

    EnumProcesses
    EnumWindows
    GetWindowTextA/W
    GetClassNameA/W
    FindWindowA/W

     

    и добавить что это надо смотреть в таблице импорта:D

  3. Новичок и уже трейнеры хочешь делать хм ну ладно, тогда тебе надо сделать снимок модулей, перебрать и найти нужный, вернуть базовый адрес найденного модуля. Работать с ним. Тебе показали примеры рабочего кода поищи аналоги этих функций на delphi вот уже будет опыт. Помочь тебе помогут, если есть какие-нибудь наработки, а если хочешь исходник, то поищи в гугле или гитхабе их полным полно.

  4. IsDebuggerPresent показывает, находится ли процесс, который её вызывает, в контексте отладчика, то есть отлаживается ли он. Чаще всего эта функция используется.

  5. Структура

    Скрытый текст
    
    struct __declspec(align(8)) struct_WeaponChatacteristcs
    {
      _QWORD qwPointer;
      byte unknown_10;
      byte gap1[7];
      byte unknown_9;
      byte gap2[4];
      byte unknown_11;
      byte gap3[10];
      int iShooting_mode_;
      float fTime2NextShotBuffer;
      float fTime2NextShot;
      int iShot_Count_;
      byte gap4[4];
      int iShot_Count;
      byte gap5[16];
      int iterator;
      BYTE bShooting;
      byte gap6[12];
      int iSet_shooting_mode;
      byte gap7[44];
      float Zoom;
      byte gap8[12];
      float fRecoil_x;
      float fRecoil_Y;
      BYTE bAim_active;
      byte bIDK;
      byte gap2[1];
      byte bIDK3;
      int iShooting_mode;
      float fFov;
      byte gap9[55];
      float fBuffer;
      int gap10[4];
      byte bunknown;
      byte gap11[20];
      float fDeltaTime;
      byte gap12[72];
      byte iIDK6;
      byte gap13[29];
      int iIDK4;
      byte gap14[5];
      byte value;
      byte gap15[14];
      byte iIDK5;
      byte gap16[7];
      float fIDK6;
      byte gap17[180];
      byte bIDK6;
      byte gap18[3];
      byte bIDK8;
      byte gap19[3];
      byte unknown_5;
      byte gap20[3];
      byte unknown_7;
      byte gap21[26];
      byte bIDK7;
      float fTime2NextShotReverse;
    };
    

     

    Восстановленный код выстрела

    Скрытый текст
    
    Characteristics = Characteristics_of_weapon_1;
      v3 = 0;
      if ( GetObjectID(Characteristics_of_weapon_1)
        || ((v4 = *&Characteristics->iIDK6 == 0,
             LODWORD(Pointer_32) = (*(Characteristics->qwPointer + 0x20i64))(Characteristics),
             v4) ? (Pointer_32_BE0_or_BD8 = *(Pointer_32 + 0xBE0)) : (Pointer_32_BE0_or_BD8 = *(Pointer_32 + 0xBD8)),
            GetObjectID(Pointer_32_BE0_or_BD8)) )
      {
        SetRecoil(Characteristics, *&fTime2NextShot);
      }
      LOBYTE(Fired_cartridges) = Get_Number_of_Bagged_ammo(Characteristics);
      if ( Fired_cartridges )
      {
        if ( Crosshair_Active )
          Aim(Characteristics);
        if ( (*(Characteristics->qwPointer + 0x28i64))(Characteristics) )
        {
          LODWORD(Pointer_20_) = (*(Characteristics->qwPointer + 0x20i64))(Characteristics);
          if ( *(Pointer_20_ + 0xFD8) > 0.0 )
          {
            Characteristics->bShooting = Characteristics->iShooting_mode_ == 2 && Characteristics->bShooting;
            v9 = Characteristics->qwPointer;
            *&Characteristics->unknown_5 = -1;      // 0x258
            *&Characteristics->unknown_7 = 0;       // 0x25C
            Characteristics->bIDK3 = 0;
            Characteristics->iShooting_mode = 0;
            Characteristics->iShooting_mode_ = 0;
            (*(v9 + 48))(Characteristics);
            LODWORD(Characteristics->fTime2NextShot) = 0;
            LODWORD(Characteristics->fTime2NextShotBuffer) = fTime2NextShot;
          }
        }
        GetTimeDelta(Characteristics, *&fTime2NextShot);
        if ( Characteristics->fBuffer > 0.0 )
        {
          (*(Characteristics->qwPointer + 0x30i64))(Characteristics);
          *&fTime2NextShot = *&fTime2NextShot - Characteristics->fBuffer;
          if ( *&fTime2NextShot > 0.30000001 )
            LODWORD(Characteristics->fBuffer) = -1082130432;
        }
        if ( Characteristics->bShooting && (*(Characteristics->qwPointer + 40i64))(Characteristics) )
        {
          (Allows2shot_Func)(Characteristics, fTime2NextShot);
        }
        else
        {
          LODWORD(v10) = (*(Characteristics->qwPointer + 0x20i64))(Characteristics);
          if ( *(*(v10 + 0xBA0) + 0x10i64) )
            (*(Characteristics->qwPointer + 32i64))(Characteristics);
        }
        if ( Characteristics->iShooting_mode_ != 2 )
          *&Characteristics->bunknown = sub_CC42F0(Characteristics);
        if ( (Characteristics->bAim_active || byte_1C21756) && !sub_CC74B0(Characteristics) )
          sub_CC1600(0, Characteristics, 1, Characteristics->bIDK, *&fTime2NextShot);
        sub_CC73F0(Characteristics, *&fTime2NextShot);
        sub_CC01F0(Characteristics, *&fTime2NextShot);
        sub_CC08E0(Characteristics, *&fTime2NextShot);
        sub_CC6A80(Characteristics);
        SetFov(Characteristics, fTime2NextShot);
        LODWORD(v11) = (*(Characteristics->qwPointer + 32i64))(Characteristics);
        DeltaTime = IGSObject::GetTimeDelta((v11 + 40));
        Pointer = Characteristics->qwPointer;
        fTime2NextShotBuffer_1 = DeltaTime + Characteristics->fTime2NextShotReverse;
        Characteristics->fTime2NextShotReverse = fTime2NextShotBuffer_1;
        if ( (*(Pointer + 40))(Characteristics) )
          Characteristics[1].unknown_9 = 0;
        if ( Characteristics->iShooting_mode_ != 2 )
          sub_CBF900(Characteristics);
        ishooting_mode = Characteristics->iShooting_mode_;
        if ( !ishooting_mode )
        {
          LODWORD(v26) = (*(Characteristics->qwPointer + 32i64))(Characteristics);
          LODWORD(iIDK4) = (*(*v26 + 0x758i64))(v26, *&Characteristics->iIDK6);// iIDK6 = -1.0
          iIDK4_1 = iIDK4;
          if ( (*(Characteristics->qwPointer + 40i64))(Characteristics) )
          {
            if ( !iIDK4_1
              || sub_CCC2B0(Characteristics)
              || !sub_CC4A90(Characteristics, 0, 0)
              || (LODWORD(v30) = (*(Characteristics->qwPointer + 32i64))(Characteristics), (*(*v30 + 2568i64))(v30)) )
            {
              if ( (Get_Shooting_Mode(Characteristics) == 3 || Get_Shooting_Mode(Characteristics) == 4)
                && -1.0 != Characteristics->fIDK6   // iIDK5 = -1.0 после выстрела устанавливает значение 2434 или 3569
                && (*(Characteristics->qwPointer + 40i64))(Characteristics) )
              {
                a1a = qword_1C22160;
                v41 = dword_1C22168;
                Shot(&a1a, Characteristics, *&dword_1C22168);
              }
              goto MakeShot;
            }
            LODWORD(v31) = (*(Characteristics->qwPointer + 32i64))(Characteristics);
            if ( !sub_AC7C80(v31) )
            {
              sub_CC4A10(Characteristics, 0i64);
              goto MakeShot;
            }
            LODWORD(v32) = (*(Characteristics->qwPointer + 32i64))(Characteristics);
            LOBYTE(v3) = *&Characteristics->iIDK6 == 0;
            LODWORD(v33) = (*(*v32 + 1880i64))(v32, v3);
            v34 = v33;
            bCondition = !sub_CCC2B0(Characteristics) && sub_CC4A90(Characteristics, 0, 0);
            v36 = v34 && !*(v34 + 64);
            if ( !bCondition )
              goto MakeShot;
            v29 = v36 == 0;
          }
          else
          {
            v29 = Characteristics[1].unknown_9 == 0;
          }
          if ( !v29 )
            sub_CC4A10(Characteristics, 0i64);
          goto MakeShot;
        }
        v16 = ishooting_mode - 1;
        if ( v16 )
        {
          v17 = v16 - 1;
          if ( !v17 )
          {
            sub_CBD1F0(Characteristics);
            if ( fTime2NextShotBuffer_1 < Characteristics->fTime2NextShot )
            {
              if ( ((Get_Shooting_Mode(Characteristics) == 3 || Get_Shooting_Mode(Characteristics) == 4)
                 && (fTime2NextShotBuffer_1 = -1.0, -1.0 != Characteristics->fIDK6)
                 && (*(Characteristics->qwPointer + 40i64))(Characteristics)
                 || Get_Shooting_Mode(Characteristics) == 2
                 && Characteristics->iterator > 0
                 && (*(Characteristics->qwPointer + 40i64))(Characteristics))
                && (a1a = qword_1C22160,
                    fTime2NextShotBuffer_1 = *&dword_1C22168,
                    v41 = dword_1C22168,
                    Shot(&a1a, Characteristics, *&dword_1C22168)) )
              {
                if ( Get_Shooting_Mode(Characteristics) == 2 )
                  --Characteristics->iterator;
              }
              else
              {
                Characteristics->bShooting = Characteristics->iShooting_mode_ == 2 && Characteristics->bShooting;
                v23 = Characteristics->qwPointer;
                *&Characteristics->unknown_5 = -1;
                *&Characteristics->unknown_7 = 0;
                Characteristics->bIDK3 = 0;
                Characteristics->iShooting_mode = 0;
                Characteristics->iShooting_mode_ = 0;
                (*(v23 + 48))(Characteristics);
                LODWORD(Characteristics->fTime2NextShot) = 0;
                Characteristics->fTime2NextShotBuffer = fTime2NextShotBuffer_1;
              }
            }
            LODWORD(Characteristics_of_weapon_Pointer) = (*(Characteristics->qwPointer + 32i64))(Characteristics);
            Characteristics->fTime2NextShot = IGSObject::GetTimeDelta((Characteristics_of_weapon_Pointer + 0x28))
                                            + Characteristics->fTime2NextShot;
            goto MakeShot;
          }
          v18 = v17 - 1;
          if ( !v18 )
          {
            LODWORD(v20) = (*(Characteristics->qwPointer + 32i64))(Characteristics);
            LOBYTE(v3) = *&Characteristics->iIDK6 == 0;
            LODWORD(v21) = (*(*v20 + 1880i64))(v20, v3);
            if ( !v21 || (LODWORD(v22) = (*(Characteristics->qwPointer + 32i64))(Characteristics), sub_AC7BF0(v22)) )
              sub_CC0C00(Characteristics);
            goto MakeShot;
          }
          if ( v18 != 1 || !sub_CCB540(Characteristics) )
          {
    MakeShot:
            sub_CC03C0(Characteristics);
            if ( Characteristics->iShooting_mode_ != 2 )
              *&Characteristics->bunknown = sub_CC42F0(Characteristics);
            LOBYTE(Fired_cartridges) = (*(Characteristics->qwPointer + 40i64))(Characteristics);
            if ( !Fired_cartridges )
            {
              Fired_cartridges = Characteristics->iShot_Count;
              if ( Characteristics->iShot_Count_ != Fired_cartridges )
              {
                iShooting_Mode = Characteristics->iShooting_mode_;
                if ( iShooting_Mode != 2 )
                {
                  v38 = *&Characteristics->gap11[12];
                  Characteristics->iShot_Count = (Fired_cartridges + 1) % 32;
                  if ( *&Characteristics->gap11[8] != v38 && (iShooting_Mode == 3 || iShooting_Mode == 4) )
                    *&Characteristics->gap11[8] = v38;
                  a1a = qword_1C22160;
                  v41 = dword_1C22168;
                  LOBYTE(Fired_cartridges) = Shot(&a1a, Characteristics, *&dword_1C22168);
                }
              }
            }
            return Fired_cartridges;
          }
          if ( Characteristics->iShooting_mode_ == 2 && Characteristics->bShooting )
          {
            Characteristics->bShooting = 1;
    Zeroing:
            v19 = Characteristics->qwPointer;
            *&Characteristics->unknown_5 = -1;
            *&Characteristics->unknown_7 = 0;
            Characteristics->bIDK3 = 0;
            Characteristics->iShooting_mode = 0;
            Characteristics->iShooting_mode_ = 0;
            (*(v19 + 48))(Characteristics);
            LODWORD(Characteristics->fTime2NextShot) = 0;
            Characteristics->fTime2NextShotBuffer = fTime2NextShotBuffer_1;
            goto MakeShot;
          }
        }
        else
        {
          (*(Characteristics->qwPointer + 48i64))(Characteristics);
          LastShotTime = fTime2NextShotBuffer_1 - Characteristics->fTime2NextShotBuffer;
          sub_CBD1F0(Characteristics);
          if ( LastShotTime <= fTime2NextShotBuffer_1 )
            goto MakeShot;
          if ( Characteristics->iShooting_mode_ == 2 && Characteristics->bShooting )
          {
            Characteristics->bShooting = 1;
            goto Zeroing;
          }
        }
        Characteristics->bShooting = 0;
        goto Zeroing;
      }
      return Fired_cartridges;
    }

     

    В прикрепленных файл в виде html восстановленного код он с подсветкой.

    Full_Shot_Func.htm

    • Плюс 1
  6. Сегодня как раз делал выносливость. У меня полоска 1.75 максимальное значение может из-за 250 легендарного уровня. Могу сразу таблицу кинуть, если нужно.
     

    Скрытый текст
    
    { Game   : DyingLightGame.exe
      Version: 
      Date   : 2016-06-01
      Author : partoftheworlD
    
      This script does blah blah blah
    }
    
    [ENABLE]
    
    aobscanmodule(stamina,gamedll_x64_rwdi.dll,F3 0F 11 7B 10 0F 28 7C 24 60) // should be unique
    alloc(newmem,$1000,"gamedll_x64_rwdi.dll"+C02AC7)
    
    label(code)
    label(return)
    
    newmem:
      mov [rbx+10],(float)2.0
      jmp return
    code:
      movss [rbx+10],xmm7
      jmp return
    
    stamina:
      jmp newmem
    return:
    registersymbol(stamina)
    
    [DISABLE]
    
    stamina:
      db F3 0F 11 7B 10
    
    unregistersymbol(stamina)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "gamedll_x64_rwdi.dll"+C02AC7
    
    "gamedll_x64_rwdi.dll"+C02AA4: F3 0F 10 4B 10        -  movss xmm1,[rbx+10]
    "gamedll_x64_rwdi.dll"+C02AA9: F3 41 0F 5C C8        -  subss xmm1,xmm8
    "gamedll_x64_rwdi.dll"+C02AAE: 0F 2F CF              -  comiss xmm1,xmm7
    "gamedll_x64_rwdi.dll"+C02AB1: 72 0D                 -  jb gamedll_x64_rwdi.dll+C02AC0
    "gamedll_x64_rwdi.dll"+C02AB3: 0F 2F C8              -  comiss xmm1,xmm0
    "gamedll_x64_rwdi.dll"+C02AB6: 76 05                 -  jna gamedll_x64_rwdi.dll+C02ABD
    "gamedll_x64_rwdi.dll"+C02AB8: 0F 28 F8              -  movaps xmm7,xmm0
    "gamedll_x64_rwdi.dll"+C02ABB: EB 03                 -  jmp gamedll_x64_rwdi.dll+C02AC0
    "gamedll_x64_rwdi.dll"+C02ABD: 0F 28 F9              -  movaps xmm7,xmm1
    "gamedll_x64_rwdi.dll"+C02AC0: 0F 2F 3D 79 53 7D 00  -  comiss xmm7,[gamedll_x64_rwdi.dll+13D7E40]
    // ---------- INJECTING HERE ----------
    "gamedll_x64_rwdi.dll"+C02AC7: F3 0F 11 7B 10        -  movss [rbx+10],xmm7
    // ---------- DONE INJECTING  ----------
    "gamedll_x64_rwdi.dll"+C02ACC: 0F 28 7C 24 60        -  movaps xmm7,[rsp+60]
    "gamedll_x64_rwdi.dll"+C02AD1: 73 07                 -  jae gamedll_x64_rwdi.dll+C02ADA
    "gamedll_x64_rwdi.dll"+C02AD3: C7 43 10 00 00 00 00  -  mov [rbx+10],00000000
    "gamedll_x64_rwdi.dll"+C02ADA: 44 0F 2E 4B 10        -  ucomiss xmm9,[rbx+10]
    "gamedll_x64_rwdi.dll"+C02ADF: 0F 85 36 01 00 00     -  jne gamedll_x64_rwdi.dll+C02C1B
    "gamedll_x64_rwdi.dll"+C02AE5: 48 8B 03              -  mov rax,[rbx]
    "gamedll_x64_rwdi.dll"+C02AE8: 48 8B CB              -  mov rcx,rbx
    "gamedll_x64_rwdi.dll"+C02AEB: FF 50 20              -  call qword ptr [rax+20]
    "gamedll_x64_rwdi.dll"+C02AEE: 48 8B F8              -  mov rdi,rax
    "gamedll_x64_rwdi.dll"+C02AF1: 80 78 50 00           -  cmp byte ptr [rax+50],00
    }
  7. Зачем вообще преобразовывать? QWORD/DWORD64 это и есть 0х7FF71E258080

    и 

    var offset = new DWORD[] {0x488, 0x8, 0x58, 0x20, 0x30 };

     

    На C++ с x64 приложениями ReadProcessMemory не хотел работать, пришлось использовать NtWow64QueryInformationProcess64, NtWow64ReadVirtualMemory64, чтобы получить процесс использовал IsWow64Process.

  8. Вроде в CE такого функционала нет. Если нет отладочной информации (которая создается при компиляции), то функции не будут подписаны, кроме импортированных системных. Как вариант, используя CE можно выйти на функцию используя "карту строк"(вид->все строки), но очень маленький шанс что выйдешь на то, что надо.

  9. Думаю ради одного вопроса не стоит создавать новую тему, в общем такой вопрос можно ли, использовать CE Speedhack точечно, то есть не весь процесс игры ускорять, а определенный участок кода или придется эмулировать участок кода? Допустим у меня вызов инструкции происходит раз в 10 секунд, а мне надо чтобы вызывался каждую секунду.

  10. 5 часов назад, 2zolo2 сказал:

    partoftheworlD, урок не сделаешь,  по  поиск количества npc, многим будет интересен?

    Да там просто искать, ищешь свое здоровье, инструкция здоровья работает со всеми npc,дальше едешь на остров где убежище, выбираешь инструкцию и смотришь с какими адресами работает эта инструкция, на острове будет 1-3 адреса включая твой вот и ищешь сколько адресов появилось в 4 байтах, дальше едешь через мост к бомжам кол-во адресов увеличивается, считаешь количество адресов и отсеиваешь и так ездишь туда обратно в итоге у тебя всего 2 останется после всех отсеиваний, максимум 64 адреса будет в проверке с какими адресами работает инструкция т.е. 64 npc , если будешь кого-то убивать значение увеличится до 70.  Урок если делать, то он затянется минут 10 и я не знаю что там объяснять даже, думаю не интересно будет просто смотреть на отсеивание значений 10 минут) Если, что не понятно спрашивай.

    • Плюс 1
  11. 1 час назад, Baracuda сказал:

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

    Как можно выйти на адрес длины крюка

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

  12. 1 час назад, 2zolo2 сказал:

    partoftheworlD, попробуй найти ID персонажа и по нему выйти на код добавление в мир или по координаторам.

    Так тоже пробовал не вышло, получилось выйти на функции работающие с добавлением/удалением npc, через поиск количества npc. Спасибо за помощь.

    • Плюс 1
  13. 3 часа назад, 2zolo2 сказал:

    ищешь текстуру или модель, где она создается и там и разбираешь код

    Через логер пробовал, но там только вершины показывает, и я не представляю что с ними делать. Если есть ссылка на статью/урок буду благодарен если кинешь.

    • Плюс 1
  14. Возник такой вопрос, как можно выйти на функцию которая создаёт NPC? Пробовал искать неизвестное с отсеиванием изменилось/не изменилось переходя/оставаясь на локациях, но ничего не нашёл. Предположив, что функция вызывается 1 раз в тех местах где ещё не был, при перемещении по локации. Может есть какая-нибудь альтернатива Function Hacker для x64? К примеру в играх типа AC, GTA и других с открытым миром, где-то создаются прохожие чтобы мир не был пустым.

     

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

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

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