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

partoftheworlD

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

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

  • Посещение

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

    172

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

  1. 8 минут назад, Garik66 сказал:

    А можешь видео в виде урока записать? Начиная от начала поисков и до конца. Или слишком долго?

    Попробую упростить поиск, т.к. мы все равно выходим на структуру способностей и не надо искать дистанцию, структуру ГГ. Если получится упростить поиск, то сделаю, а так думаю минут на 20-30 затянется. Это вообще похоже на скрытие с помощью маскировки кровью.

    Да и повторить надо, а то все что делал ночью вообще не помню, хорошо хоть комментировал.:-D

  2. Да уж, в общем можно выйти на функцию невидимости для npc, но слишком сложно, даже скорее одна функция не стоит потраченного времени.

     

    Через дистанцию выходим на структуру ГГ, дальше на структуру способностей, дальше на таймер, дальше на "кучу" проверок и в конце на функцию возвращающую значения.

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

     

    А это скрин всех функций которые работают с нашей "кучей" проверок на прямую или косвенно. Ах чуть не забыл, наша "куча" проверок возвращает значение не равное 0, если мы не видимы, 0 если видимы. Но их нельзя изменить, игра начинает крашится или зомби начинают смотреть в сторону горизонта отворачиваясь от тебя.:-D Так что, нужен точечный метод взлома. На видео показан результат, но он работает только на зомби.

     

    Ff-QeL7O7C0.jpg

     

    Видео:

    Скрытый текст

     

     

    Коды:

    Скрытый текст
    
    .text:0000000000545A40                         Invisible_test  proc near               ; CODE XREF: sub_185920+E5Dp
    .text:0000000000545A40                                                                 ; sub_185920+E6Bp ...
    .text:0000000000545A40 48 83 B9 68 09 00 00 00                 cmp     qword ptr [rcx+968h], 0
    .text:0000000000545A48 74 1E                                   jz      short loc_545A68
    .text:0000000000545A4A 48 8B 81 70 09 00 00                    mov     rax, [rcx+970h]
    .text:0000000000545A51 48 85 C0                                test    rax, rax
    .text:0000000000545A54 74 12                                   jz      short loc_545A68
    .text:0000000000545A56 48 83 B8 B8 05 00 00 00                 cmp     qword ptr [rax+5B8h], 0
    .text:0000000000545A5E 74 08                                   jz      short loc_545A68
    .text:0000000000545A60 48 8B 80 C0 05 00 00                    mov     rax, [rax+5C0h]
    .text:0000000000545A67 C3                                      retn
    .text:0000000000545A68                         ; ---------------------------------------------------------------------------
    .text:0000000000545A68
    .text:0000000000545A68                         loc_545A68:                             ; CODE XREF: Invisible_test+8j
    .text:0000000000545A68                                                                 ; Invisible_test+14j ...
    .text:0000000000545A68 33 C0                                   xor     eax, eax
    .text:0000000000545A6A C3                                      retn
    .text:0000000000545A6A                         Invisible_test  endp
    
    // устанавливаем значение rcx+968, больше 0, пропускаем проверки
    __int64 __fastcall Invisible_test(__int64 a1)
    {
      __int64 v1; // rax@2
      __int64 result; // rax@4
    
      if ( *(a1 + 0x968) && (v1 = *(a1 + 0x970)) != 0 && *(v1 + 0x5B8) )
        result = *(v1 + 0x5C0);
      else
        result = 0i64;
      return result;
    }
    • Плюс 1
  3. 6 минут назад, Garik66 сказал:

    Молодца!!!:lol:

    Спасибо, но дальше тупик. Найденная функция возвращает координаты, в  RUNTIME_FUNCTION с которыми я только встретился и они меня пугают.:-D

    Может у кого-нибудь информация есть о них и что с ними сделать можно?

  4. Кстати, вам это ничего не напоминает?

    bukg4QHxx-Q.jpg

    Ага именно, формула расчета дистанции. Если её упростить:

     

    dist = (((player_x) - enemy_x)^2 )*((player_y) - enemy_y)^2*((player_z) - enemy_z)^2)

     

    Вся функция это цикл перебирающий координаты по количеству объектов и возвращающий их.

     

    Скрытый текст
    
    signed __int64 __fastcall GetDistance2Object(__int64 a1, __int64 a2)
    {
      __int64 iterator; // rbx@1
      __int64 enemy; // rbp@1
      __int64 v4; // rsi@1
      signed __int64 result; // rax@1
      __int64 v6; // rdi@2
      __int64 v7; // rax@2
      float player_x; // [sp+20h] [bp-18h]@2
      float player_y; // [sp+24h] [bp-14h]@2
      float player_z; // [sp+28h] [bp-10h]@2
    
      iterator = *(a1 + 8);
      enemy = a2;
      *(a1 + 60) = *a2;
      v4 = a1;
      *(a1 + 64) = *(a2 + 4);
      *(a1 + 68) = *(a2 + 8);
      for ( result = iterator + 8i64 * *(a1 + 16); iterator != result; result = *(v4 + 8) + 8i64 * *(v4 + 16) )// перебираем объекты
      {
        v6 = *iterator;
        LODWORD(v7) = (*(*(*(*iterator + 8i64) + 64i64) + 8i64))(*(*iterator + 8i64) + 64i64);// получаем количество объектов
        IControlObject::GetWorldPosition(v7 + 24, &player_x);// Получаем наши координаты
        iterator += 8i64;
        *(v6 + 16) = (((*(enemy + 4) - player_y) * (*(enemy + 4) - player_y)) + ((*enemy - player_x) * (*enemy - player_x)))
                   + ((*(enemy + 8) - player_z) * (*(enemy + 8) - player_z));// вычисляем дистанцию от наших координат, до координат перебираемых объектов
      }
      return result;
    }

     

    Вся игра написана с помощью структур  RUNTIME_FUNCTION<Начальный адрес функции, Конечный адрес функции, адрес очистки>

    • Плюс 2
  5. Получилось выйти на инструкцию которая работает с координатами всех объектов. Выход на структуру объекта это прекрасно. Способ рабочий, если дистанцию увеличить, то npc игнорят тебя, осталось найти инструкцию которая задает радиус видимости.

    16ufVFIV1FA.jpg

    • Плюс 2
  6. На форуме была игра недавно про вьетнам или что-то типа того, был запрос сделать невидимость. Удобно когда, есть способность или шапка-невидимка, через которые можно найти инструкцию обнаружения NPC, но когда не за что зацепиться необходимо идти на отчаянные меры.:-D 

     

    У меня было предположение, как  сделать невидимость. Тут 2 варианта возможно, мы в радиусе видимости npc, либо на определенных участках карты, есть триггеры заходя за которые будет воспроизведен звук, взрыв, атака npc и т.д(например в серии игр L4D заходя за определенные триггеры на нас начинает нападать волна зомби).

     

    Если будем искать дистанцию, то тут либо искать изменилось/неизменилось(это долго и не факт, что найдем, то что нужно), либо искать координаты ГГ и врага, и рассчитывать дистанцию. Допустим наши координаты xyz(-256,-100,15), а врага (198,65,25):

    iTXRPsCMs98.jpg

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

    • Плюс 1
  7. 8FJFaL3Yopk.jpg

    Скрытый текст
    
    { Game   : TrainMe by holy - AntiDebug Level 1.exe
      Version: 
      Date   : 2016-06-18
      Author : partoftheworlD
    
      This script does blah blah blah
    }
    
    [ENABLE]
    
    aobscanmodule(etst,TrainMe by holy - AntiDebug Level 1.exe,89 02 89 44 24 08) // should be unique
    alloc(newmem,$1000)
    
    label(code)
    label(return)
    
    newmem:
    
    code:
      mov [edx],#5999
      mov [esp+08],eax
      jmp return
    
    etst:
      jmp code
      nop
    return:
    registersymbol(etst)
    
    [DISABLE]
    
    etst:
      db 89 02 89 44 24 08
    
    unregistersymbol(etst)
    dealloc(newmem)
    
    {
    // ORIGINAL CODE - INJECTION POINT: "TrainMe by holy - AntiDebug Level 1.exe"+142A
    
    "TrainMe by holy - AntiDebug Level 1.exe"+13FE: 0F B7 8C 24 98 00 00 00  -  movzx ecx,word ptr [esp+00000098]
    "TrainMe by holy - AntiDebug Level 1.exe"+1406: 8B 15 18 60 40 00        -  mov edx,["TrainMe by holy - AntiDebug Level 1.exe"+6018]
    "TrainMe by holy - AntiDebug Level 1.exe"+140C: 81 F2 F3 1A 40 00        -  xor edx,"TrainMe by holy - AntiDebug Level 1.exe"+1AF3
    "TrainMe by holy - AntiDebug Level 1.exe"+1412: 83 F9 01                 -  cmp ecx,01
    "TrainMe by holy - AntiDebug Level 1.exe"+1415: 8B 02                    -  mov eax,[edx]
    "TrainMe by holy - AntiDebug Level 1.exe"+1417: 0F 84 A3 00 00 00        -  je "TrainMe by holy - AntiDebug Level 1.exe"+14C0
    "TrainMe by holy - AntiDebug Level 1.exe"+141D: 8D 58 F6                 -  lea ebx,[eax-0A]
    "TrainMe by holy - AntiDebug Level 1.exe"+1420: 83 F9 02                 -  cmp ecx,02
    "TrainMe by holy - AntiDebug Level 1.exe"+1423: 0F 44 C3                 -  cmove eax,ebx
    "TrainMe by holy - AntiDebug Level 1.exe"+1426: 8D 5C 24 1C              -  lea ebx,[esp+1C]
    // ---------- INJECTING HERE ----------
    "TrainMe by holy - AntiDebug Level 1.exe"+142A: 89 02                    -  mov [edx],eax
    "TrainMe by holy - AntiDebug Level 1.exe"+142C: 89 44 24 08              -  mov [esp+08],eax
    // ---------- DONE INJECTING  ----------
    "TrainMe by holy - AntiDebug Level 1.exe"+1430: C7 44 24 04 24 40 40 00  -  mov [esp+04],"TrainMe by holy - AntiDebug Level 1.exe"+4024
    "TrainMe by holy - AntiDebug Level 1.exe"+1438: 89 1C 24                 -  mov [esp],ebx
    "TrainMe by holy - AntiDebug Level 1.exe"+143B: E8 38 0D 00 00           -  call "TrainMe by holy - AntiDebug Level 1.exe"+2178
    "TrainMe by holy - AntiDebug Level 1.exe"+1440: A1 0C 60 40 00           -  mov eax,["TrainMe by holy - AntiDebug Level 1.exe"+600C]
    "TrainMe by holy - AntiDebug Level 1.exe"+1445: 89 5C 24 04              -  mov [esp+04],ebx
    "TrainMe by holy - AntiDebug Level 1.exe"+1449: 89 04 24                 -  mov [esp],eax
    "TrainMe by holy - AntiDebug Level 1.exe"+144C: E8 5F 04 00 00           -  call "TrainMe by holy - AntiDebug Level 1.exe"+18B0
    "TrainMe by holy - AntiDebug Level 1.exe"+1451: 83 EC 08                 -  sub esp,08
    "TrainMe by holy - AntiDebug Level 1.exe"+1454: 31 C0                    -  xor eax,eax
    "TrainMe by holy - AntiDebug Level 1.exe"+1456: 81 C4 88 00 00 00        -  add esp,00000088
    }

     

     

  8. Привет, возник такой вопрос вдруг кто-нибудь уже пробовал искать предметы которые спавнятся в одном месте, как их вообще можно обнаружить?

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

  9. О каких механизмах защиты шла речь?  Взломал все 4 приложения и что-то не заметил. Это которая проверка с выводом сообщения?

    Алгоритм взлома везде одинаковый:

    1. Открыть CDA Code Dynamic Analysis.
    2. Начать запись.
    3. Нажать на каждую кнопочку.
    4. Поставить фильтр на запись с выполнением 1-2 функции.
    5. Написать скрипт на найденную функцию.

     

     

  10. CRECT из  atltypes.h, CDiaglog из afxwin.h. 

     

    Скрытый текст
    
    POINT *pPoint = {};
    CRect pRect;
    CDialog *pDialog = nullptr;
    
    pDialog->GetWindowRect(&pRect);
    
    pRect.left + pPoint->x;   //координата по х + координата чужого окна
    pRect.Bottom + pPoint->y; //координата по у + координата чужого окна
    
    pRect.Bottom у меня студия вроде тупит, не находит член класса.
    

     

     

  11. POINT pPoint;
    CRect pRect;
    
    CDialog::GetWindowRect(&pRect);
    
    pRect.left   + pPoint.x //координата по х + координата чужого окна
    pRect.bootom + pPoint.y //координата по у + координата чужого окна
    
    

    Вроде бы как-то так. Способ не идеальный, но должен работать.

     

    POINT

    CRECT

     

     

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

    Кстати видео на 4 минуты, у меня больше 50-55мб не весят в 1080p и 60fps.

  13. с чужих исходников, решения чужих ошибок при компиляции чужих исходников:D, MSDN, книги "Язык программирования С++". Бьерна Страуструпа и Windows для профессионалов. Создание эффективных Win32-пpилoжeний с учетом специфики 64-разрядной версии Windows Рихтера.

  14. У тебя Processmenager рассчитан только на .exe.

    Скрытый текст
    
    var
     mEntry : TModuleEntry32;
    ....
    
    begin
     Result := 0;
     Snap := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessID);
     if Snap <> INVALID_HANDLE_VALUE then
     begin
      Process.dwSize := SizeOf(mEntry);
      if Process32First(Snap, Module) then
      repeat
       if lstrcmpi(mEntry.szModule, pchar(ModuleName)) = 0 then
       begin
        Result := mEntry.modBaseAddr;
        CloseHandle(Snap);
        Exit;
       end;
       until not Process32Next(Snap, Module);
       Result := 0;
       CloseHandle(Snap);
     end;

     

  15. var
      wBuff: byte;
      wHandle: integer;
      tHandle, ProcessID, pHandle, temp: cardinal;
    
    ......
    
    wHandle := FindWindow(nil, 'Заголовок окна');
    if wHandle <> 0 then
    begin
      tHandle := GetWindowThreadProcessId(wHandle, @ProcessID);
      pHandle := OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID);
      ReadProcessMemory(pHandle, ptr($0043231F), @wBuff, 1, temp);
      MessageBox(Form1.Handle, 'Ок', 'Ок', 0);
      CloseHandle(pHandle);
    end
    else
    begin
      MessageBox(Form1.Handle, 'Ошибка', 'Ошибка, 0);
    end;

    Вроде бы работать должно.

  16. 3 часа назад, LOL сказал:

    Что не так я делаю ? 

    При запуске установи бряк перед ShowMessage и отладь

    GAME_BasseAdress := $0 + Ulong(G_Base(GameID, 'client.dll'));

    со вхождением в G_Base. Тут либо GameID не получаешь, либо G_Base не возвращает адрес.

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

  17. 10 час назад, YurasovDMA сказал:

    то вы думаете о добавление чата на форум или на сайт?

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

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

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

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