partoftheworlD
-
Постов
2 687 -
Зарегистрирован
-
Посещение
-
Победитель дней
172
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные partoftheworlD
-
-
8 минут назад, Garik66 сказал:
А можешь видео в виде урока записать? Начиная от начала поисков и до конца. Или слишком долго?
Попробую упростить поиск, т.к. мы все равно выходим на структуру способностей и не надо искать дистанцию, структуру ГГ. Если получится упростить поиск, то сделаю, а так думаю минут на 20-30 затянется. Это вообще похоже на скрытие с помощью маскировки кровью.
Да и повторить надо, а то все что делал ночью вообще не помню, хорошо хоть комментировал.
-
Да уж, в общем можно выйти на функцию невидимости для npc, но слишком сложно, даже скорее одна функция не стоит потраченного времени.
Через дистанцию выходим на структуру ГГ, дальше на структуру способностей, дальше на таймер, дальше на "кучу" проверок и в конце на функцию возвращающую значения.
Теперь надо найти ту единственную цепочку функций, которая будет нас скрывать, без эффектов, звуков и прочего не нужного функционала.
А это скрин всех функций которые работают с нашей "кучей" проверок на прямую или косвенно. Ах чуть не забыл, наша "куча" проверок возвращает значение не равное 0, если мы не видимы, 0 если видимы. Но их нельзя изменить, игра начинает крашится или зомби начинают смотреть в сторону горизонта отворачиваясь от тебя. Так что, нужен точечный метод взлома. На видео показан результат, но он работает только на зомби.
Видео:
Скрытый текстКоды:
Скрытый текст.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
-
Спасибо за ответы.
-
cl_pdump 1 в консоль вводи и будет у тебя на экране вся отладочная информация типа координат, id оружия и прочего
- 1
-
-
6 минут назад, Garik66 сказал:
Молодца!!!
Спасибо, но дальше тупик. Найденная функция возвращает координаты, в RUNTIME_FUNCTION с которыми я только встретился и они меня пугают.
Может у кого-нибудь информация есть о них и что с ними сделать можно?
-
Кстати, вам это ничего не напоминает?
Ага именно, формула расчета дистанции. Если её упростить:
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
-
Получилось выйти на инструкцию которая работает с координатами всех объектов. Выход на структуру объекта это прекрасно. Способ рабочий, если дистанцию увеличить, то npc игнорят тебя, осталось найти инструкцию которая задает радиус видимости.
- 2
-
2 часа назад, Garik66 сказал:
удачи в исследовании
Спасибо, у нее все же есть шанс на жизнь.
-
На форуме была игра недавно про вьетнам или что-то типа того, был запрос сделать невидимость. Удобно когда, есть способность или шапка-невидимка, через которые можно найти инструкцию обнаружения NPC, но когда не за что зацепиться необходимо идти на отчаянные меры.
У меня было предположение, как сделать невидимость. Тут 2 варианта возможно, мы в радиусе видимости npc, либо на определенных участках карты, есть триггеры заходя за которые будет воспроизведен звук, взрыв, атака npc и т.д(например в серии игр L4D заходя за определенные триггеры на нас начинает нападать волна зомби).
Если будем искать дистанцию, то тут либо искать изменилось/неизменилось(это долго и не факт, что найдем, то что нужно), либо искать координаты ГГ и врага, и рассчитывать дистанцию. Допустим наши координаты xyz(-256,-100,15), а врага (198,65,25):
Произведя такие не сложные вычисления, мы получаем дистанция от нас до врага 483.157324 юнита. Это значение мы и будем искать в CE, а из него уже выходить на логику npc, на участок кода который нас обнаруживает. После защиты диплома появилось много свободного времени, так что этой ночью буду проверять свою теорию на практике.
- 1
-
5 минут назад, Garik66 сказал:
2 минуты.
Опередил меня не успел таблицу сохранить даже
-
Скрытый текст
{ 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 }
-
Привет, возник такой вопрос вдруг кто-нибудь уже пробовал искать предметы которые спавнятся в одном месте, как их вообще можно обнаружить?
Как я понял, при загрузке карты создается объект с разными характеристиками типа веса, координат, id объекта и т.д., кроме как трассировки начиная от точки входа ничего на ум не приходит, но это же ужасно долго, да и вообще похоже на извращение.
-
О каких механизмах защиты шла речь? Взломал все 4 приложения и что-то не заметил. Это которая проверка с выводом сообщения?
Алгоритм взлома везде одинаковый:
- Открыть CDA Code Dynamic Analysis.
- Начать запись.
- Нажать на каждую кнопочку.
- Поставить фильтр на запись с выполнением 1-2 функции.
- Написать скрипт на найденную функцию.
-
Dead Rising 3 и Fallout 4, если бы можно было за 2 игры голосовать(для следующего выпуска) Dead Island Riptide слишком простая для взлома.
-
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 у меня студия вроде тупит, не находит член класса.
-
-
У меня примерно так же бывает когда гружу через wifi, либо сервер ростелекома на тех.обслуживании(это бывает частенько) и мой трафик идет через сервер, в другом городе за 30км от меня. Попробуй сделать трассировку и скорость измерь когда все нормально и когда долго грузит, так найдешь проблему. Раньше долго обработка проходила, когда ютуб дизайн начал менять.
Кстати видео на 4 минуты, у меня больше 50-55мб не весят в 1080p и 60fps.
-
с чужих исходников, решения чужих ошибок при компиляции чужих исходников, MSDN, книги "Язык программирования С++". Бьерна Страуструпа и Windows для профессионалов. Создание эффективных Win32-пpилoжeний с учетом специфики 64-разрядной версии Windows Рихтера.
-
У тебя 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;
-
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;
Вроде бы работать должно.
-
У тебя процесс открыт с правами?
-
3 часа назад, LOL сказал:
Что не так я делаю ?
При запуске установи бряк перед ShowMessage и отладь
GAME_BasseAdress := $0 + Ulong(G_Base(GameID, 'client.dll'));
со вхождением в G_Base. Тут либо GameID не получаешь, либо G_Base не возвращает адрес.
Подсказал бы еще что-нибудь, но делфи всего раз использовал во время учебы.
-
10 час назад, YurasovDMA сказал:
то вы думаете о добавление чата на форум или на сайт?
Думаю его можно не добавлять на форум/сайт, можно же использовать irc или тот же телеграмм. создать группу и выложить ссылку группы на форуме. Но тут стоит голосовать, что будет удобней использовать.
Обсуждение работы сайта и форума
in О работе сайта и форума
Опубликовано · Изменено пользователем partoftheworlD
после прочтения уведомления на мобильной версии, остается уведомление с 0 до обновления страницы