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

MasterGH

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

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

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

    129

Весь контент MasterGH

  1. Олли 64 существует, не понятно почему не поможет. Найдете несколько интересных тем. Например, такую. Я так понял было такое решение, но я его не очень понял Дампа в теме нет, так что самим делать
  2. Как ты представляешь ответ на вопрос? Если я тебе скажу, что урон можно вычислить в уме или калькулятором "здоровье - здоровье после удара", тебя устроит этот ответ?
  3. Еще способ выйти на инструкцию - поставить брейкпоинт на чтение на адрес инструкции. Т.е. не на выполнение ставить, а как на данные На выполнение не ставить (нажимая F5 в дизассемблере), а скопировать адрес в таблицу CE и поставить брейкпоинт на чтение. Начать играть какое-то время. Если сработает брейкпоинт, то там должен быть код защиты. Этот способ я когда-то применял, но это было так давно, что и забыл про него.
  4. Классический способ. Поставить брейкпоинт на API функции выхода из процесса. Если при закрытии они срабатывают, то посмотреть стек и запомнить все выходы под call. Запустить игру. Поставить бряки на call. Там где срабатывают, то бряки снять. Спровоцировать принудительный выход. Если бряк прервется, то исследовать условие, которое отправляет в рутину выхода из приложения. Если же выход в виду исключительной ситуации, то запускаем Олли. При необходимости настраиваем его. Провоцируем выход игры с исключительной ситуацией. В Олли должна быть остановка, в которой можно изучить причину возникновения исключения... К сожалению не помогу, других дел полно.
  5. Скорость передвижения игрока должна быть в коде игры. Это железно. 1) либо это +смещение по времени. Тогда менять смещение увеличивая его или умножая его void Update{ transform.Translate(Vector3.Forward * Time.deltaTime);}public float speed = 2f;void Update{ transform.Translate(Vector3.Forward * speed * Time.deltaTime); // перемещение будет в два раза быстрее}public float speed = 2f;void Update{ transform.Translate(Vector3.Forward * speed * Time.deltaTime); // перемещение будет в два раза быстрее}public float speed = 4f;void Update{ transform.Translate(Vector3.Forward * speed * Time.deltaTime); // перемещение будет в два раза быстрее}
  6. Чтобы сделать мини карту в чужой игре можно сначала сделать её в своем приложении, отладить, заточить, проверить на ошибки. А потом уже встраивать в игру. Хук и рисование миникарты это наверно кода на строк 200, если не меньше. У меня мои проекты на C# на несколько десятков тысяч строк. Вот если у меня жесткий сломается и данные не восстановить, то будет грустно. Это я так, для примера тем, у кого жесткий "ломается" и "не восстановить 200 строк" через шесть дней после создания темы.
  7. Судя по всему код уже написан с ошибками и его только надо немного поправить. Поэтому логично опубликовать код и возможно получить быстрый ответ.
  8. Покажи, что тебе понятно, что не понятно
  9. Господин, Bo0m21, Вы упорно не хотите видеть самое главное "C# directX hook" выбей в поиск. Найдешь пример и не один.
  10. Был какой-то специальный проект, кто-то его делал. Но я не помню названия. Там в простой форме можно было хукать и рисовать в чужом окне на разных версия DirectX. Поищи на форуме или в Гугле. Если не найдешь, то оборачиваешь DirectX- и WinAPI-функции в C# - функции и работаешь с ними. Как это сделать можно найти в Гугле.
  11. Решение проблемы с дорожкой [ENABLE]alloc(newmem,2048)label(returnhere)label(pTransformComponent)registersymbol(pTransformComponent)newmem:mov [pTransformComponent],esifstp dword ptr [esi+000001E0]jmp returnherepTransformComponent:dd 0"WalkerTrainme.exe"+3B2024:jmp newmemnopreturnhere: [DISABLE]"WalkerTrainme.exe"+3B2024:fstp dword ptr [esi+000001E0]//Alt: db D9 9E E0 01 00 00dealloc(newmem)[pTransformComponent]+1e0 + 0 = X[pTransformComponent]+1e0 + 4 = Y[pTransformComponent]+1e0 + 8 = Z04A1AB0B - E8 88C00000 - call 04A26B9804A1AB10 - 83 C4 30 - add esp,3004A1AB13 - C7 47 30 00000000 - mov [edi+30],00000000 <<04A1AB1A - 8B 47 1C - mov eax,[edi+1C]04A1AB1D - 8B 4F 14 - mov ecx,[edi+14]EAX=00000000EBX=04A0E530ECX=04682AA8EDX=04682B00ESI=09B80FD0EDI=00965A10ESP=0026F1C0EBP=0026F298EIP=04A1AB1A///... var pointHit = hitInfo.point; //GetPoints(chracter.position, pointHit, minDistance, target, ref arrayPoints); GetPoints(arrayPoints[arrayPoints.Length - 1].position, pointHit, minDistance, target, ref arrayPoints); //{0} closeCheckPoint = 0;///.../*--------------------------*/04A1AAD4 - 51 - push ecx04A1AAD5 - 50 - push eax04A1AAD6 - 83 EC 04 - sub esp,0404A1AAD9 - D9 1C 24 - fstp dword ptr [esp]04A1AADC - 83 EC 0C - sub esp,0C04A1AADF - 8B 45 80 - mov eax,[ebp-80]04A1AAE2 - 89 04 24 - mov [esp],eax04A1AAE5 - 8B 45 84 - mov eax,[ebp-7C]04A1AAE8 - 89 44 24 04 - mov [esp+04],eax04A1AAEC - 8B 45 88 - mov eax,[ebp-78]04A1AAEF - 89 44 24 08 - mov [esp+08],eax04A1AAF3 - 83 EC 0C - sub esp,0C04A1AAF6 - 8B 45 BC - mov eax,[ebp-44]04A1AAF9 - 89 04 24 - mov [esp],eax04A1AAFC - 8B 45 C0 - mov eax,[ebp-40]04A1AAFF - 89 44 24 04 - mov [esp+04],eax04A1AB03 - 8B 45 C4 - mov eax,[ebp-3C]04A1AB06 - 89 44 24 08 - mov [esp+08],eax04A1AB0A - 57 - push edi04A1AB0B - E8 88C00000 - call 04A26B98 ; GetPoints(arrayPoints[arrayPoints.Length - 1].position, pointHit, minDistance, target, ref arrayPoints)04A1AB10 - 83 C4 30 - add esp,3004A1AB13 - C7 47 30 00000000 - mov [edi+30],00000000 ; closeCheckPoint = 0/*--------------------------*/[ENABLE]alloc(newmem,2048)label(returnhere)newmem:push ecxpush eaxmov ecx, [pTransformComponent]mov eax,[ecx]mov [esp+C], eax //pTransformComponent.Xmov eax,[ecx+4]mov [esp+10],eax //pTransformComponent.Ymov eax,[ecx+8]mov [esp+14],eax //pTransformComponent.Zpop eaxpop ecxcall 04A26B98 // в стек передаются уже координаты игрока, а не координаты первого желктого GameObject в дорожкеjmp returnhere04A1AB0B:jmp newmemreturnhere: [DISABLE]04A1AB0B:call 04A26B98//Alt: db E8 88 C0 00 00dealloc(newmem)
  12. Можно не писать такой длинный указатель, а сделать инъекцию, которая работает с поинтером или вытаскивает его. Получится один, два уровня из всего этого длинного указателя. Ну или считать на ассемблере и возможно с проверкой каждого уровня указателя на не null ссылку
  13. WalkerTrainme.rar Задача Сделать телепорт так, чтобы дорожка, которая показывает путь располагалась правильно после нового хода. Что-то похоже есть в Героях VI. Шифрования нет. Специальных сложностей не делал. Трейми 32-х разрядный. Сделан на Unity3D из стандартных ресурсов. Внимание. Подсказка на коде C#
  14. MasterGH

    Плагин "Stack Viewer"

    Если возникли ошибки, вопросы или предложения по плагину "Stack Viewer", то можно написать об этом здесь.
  15. 98 раз скачали

    Назначение Плагин позволяет в реальном режиме игры наблюдать за стеком на определенной инструкции отладочного кода. Это в свою очередь позволяет в окне расструктуризации данных "Dessect Data Structure" сравнивать старые и текущие структуры стека в реальном режиме игры, наблюдать за появлением красных данных и обращать на них особое внимание. Красные данные показывают чем отличаются стеки при действиях в игре. Например, выстрелив один раз и выстрелив следующий раз можно увидеть отличия красным цветом в стеке в реальном режиме. Это могут быть не только изменения патронов, но и чего-то другого, когда уже стреляем другим оружием. Важно то, что можно видеть изменения в реальном времени, а не по копиям стека, которые приходилось раньше снимать много раз. Мы можем видеть как часто по времени что-то меняется, все в динамике... Есть у меня сомнения по поводу постоянного ESP сравнения, при котором происходит "наблюдение" за стеком, но пока оставлю как есть. Установка Распаковать файлы архива в директорию "autorun". Например, C:\Program Files (x86)\Cheat Engine 6.4\autorun Краткое руководство 1. Запускаем игру 2. Находим адрес параметра 3. Ставим брейкпоинт на адрес и появляются инструкции (или что-то делаем в игре чтобы инструкции появились) 4. Выделяем инструкцию, которую требуется исследовать 5. Останавливаем отладку 6. Открываем Stack Viewer из окна Дизассемблер-> Tools->* Stack Viewer [Plugin] и переносим в ESP, EIP (или RSP, RIP) в поля окна Stack Viewer. Нажимаем галку "Is Active" и идем в игру, и если надо что-то делаем в игре, потому что инструкция должна выполниться хотя бы один раз чтобы заполнить дамп стека в реальном времени 7. Открываем окно расструктуризации и пишем метку "MemStackRunTime" (или другую) и делаем расструктуризацию. 8. Открывает плагин Tiny Dumper и клонируем "MemStackRunTime" в другую метку "StackDump1" (или другую). Теперь у нас в окне две структуры: с разовой копией и постоянно обновляющейся копией стека. 9. Идем в игру и повторно делаем какие-то действия при этом наблюдаем за окном расструктуризации. Если в окне красные данные не появились, то следует проскролить структуру ниже. Если красные данные появились, то можно повторить действия в игре и пронаблюдать в реальном режиме закономерность изменения красных данных и частоту их изменения. Возможно найдутся интересные зависимости связанные с каким-то действием в игре. Если красных данных не нашлось, то никаких изменений в стеке не было. Попробуйте сделать что-то другое. 10. Для остановки наблюдения за стеком выключаем галку "Is Active"
  16. Отдельно подсвечивать содержание группы скорее всего нельзя, цвет заголовка тоже меняется. Так что придется отказаться от групп.
  17. Этот прием позволяет легкими движениями руки добавить некоторое количество адресов структур за один раз (не больше восьми) Пишу пример 1. Берем Сталкера 2. Ищем адрес патронов 3. Ставим бряк на доступ 4. Идем в игру и не стреляем 5. Возвращаемся 6. Делаем как на скриншотах (все не стал приводить, а основные) Как видим мы добавили 8 адресов одним махом. Не дописывали никаких "-смещение" от базового адреса вручную Эти адреса можно перемещать из контекстного меню из группы в группу, если нужно разбивать по группам. На этом все
  18. Копия структуры простым взмахом пальца, проще чем у ТиниДампера (примечание от MasterGH. Но у ТиниДампера нет аналога в сравнении структур после перезагрузки) Этот просто божественный прием позволит создать shadow структуру на случайном shadow адресе и сравнить её с оригинальной структурой. Если говорить понятными словами, то это сравнение оригинальной структуры и её копии. Пишу пример 1. Берем Стаклера 2. Ищем адрес патронов и ставим брейкпоинт на доступ 3. Берем инструкцию например такую cmp dword ptr [esi+00000348],00 03BDCC1E - 8B 90 90000000 - mov edx,[eax+00000090]03BDCC24 - FF D2 - call edx03BDCC26 - 83 BE 48030000 00 - cmp dword ptr [esi+00000348],00 <<03BDCC2D - 75 18 - jne xrGame.CDialogHolder::operator=+20E35703BDCC2F - 85 C0 - test eax,eaxEAX=33E90490EBX=00000001ECX=33E90490EDX=03B4FF90ESI=351DF720EDI=351DF3E0ESP=0018F390EBP=00000020EIP=03BDCC2D
  19. Проект noobtuts содержит множество уроков, которые могут вам понравится Из игр на Unity3d интересны Пакман, Flappy Bird, Person Shooter Game, Tower Defense Game и другие. Это очень простые игры и при сноровке наверно можно сделать в течении часа. Новички могут проковыряться наверно неделю. Не скажу, что это для школьников. Для студентов сойдет. Ссылка Можно сделать из них сетевые игры с сервисом Yahoo Games Network (бывший PlayerIO сервис), который предоставляет бесплатную работу как авторитарного, ну и конечно не авторитарного сервера. Год назад это было с ограничением, как сейчас не знаю. Прошлые ограничения для бесплатного аккаунта: 1) На nosql базу 25000 объектов, 500кб - на запись. 2) 500 одновременных соединений и 45 человек максимум на лобби. 100 мс - максимум на выполнение какой-либо функции на стороне сервера. Серверная сторона, это ваш игровой серверный *.dll модуль скомпилированный на .net компиляторе. 3) файловое хранилище вроде не более 50мб SDK, пример на хабре, еще одно руководство Попробуйте сделать сетевую игру демо со встроенным примеров в SDK для Unity3d (по собиранию грибов в темноте + чат там уже готовый). Unity3d стала в каком-то смысле более доступной для начинающих. Модуль серверной стороны можно например компилировать через SharpDevelop или без среды разработки. На играх в теории можно зарабатывать в ГуглПлее, в Yahoo Games и там, вроде, в фейсбуке и вконтакте, и т.п.
  20. У тебя есть данные: Адрес уровня игрока "RavensCry.exe"+544895 Сигна Версия игры - 1.3 "39 86 20 11 00 00 74 3B 8B 17 8B 82 94 02 00 00 8B CF FF D0" Какие у тебя трудности? Копипасти отладочный код, значения регистров, свой скрипт АА, который не работает сюды на форум... будем разбираться
  21. Хотя бы таблицу бы почистил, 15 тыс. строк на 2 мб.
  22. 1. Добавить скрипт ниже в Lua консоль вызываемую из главного окна CE 2. Значение processName заменить на свой процесс local processName = 'test.exe'local autoAttachList = getAutoAttachList()autoAttachList.add(processName)function onOpenProcess(processid) showMessage('Attach to process: '..processName)end2. В настройках CE найти и включить галку автоаттача 3. Сгенерировать трейнер
  23. Dison, Я не против. Кстати, с помощь дизассемблерования и парсера на Lua можно попробовать сделать универсальным скрипт для разных патчей к играм, т.е. чтобы скрипт автоматически генерировался. Ну, а очки улучшения или как их там по аналогичной схеме. Ищешь только 1 байт. Бряк на запись. По инструкции поднимаешься, хорошо так, на строчек 30 вверх до xor-вания. По аналогии можешь сделать инъекцию кода в инструкцию как из скрипта в 38 посте. Я делать не буду, думаю, сам справишься, ну или кто-нибудь, кто уже скачал игру поможет.
  24. Ну, да там шифрование. Вот скрипт на млн. опыта { Game : ravenscry.exe Version: Date : 2015-03-30 Author : MasterGH 1000000 EXP}[ENABLE]aobscanmodule(INJECT,ravenscry.exe,89 86 C4 10 00 00) // should be uniquealloc(newmem,$1000)label(code)label(return)newmem:code: mov eax,#100000 add eax,[esi+000010D0] // добавочное значение xor eax,5A63CD29 //константа mov [edx+04],eax mov [esi+000010C4],eax jmp returnINJECT: jmp code nopreturn:registersymbol(INJECT)[DISABLE]//code from here till the end of the code will be used to disable the cheatINJECT: db 89 86 C4 10 00 00unregistersymbol(INJECT)dealloc(newmem){// ORIGINAL CODE - INJECTION POINT: "ravenscry.exe"+53DAD9"ravenscry.exe"+53DAB2: 89 86 C8 10 00 00 - mov [esi+000010C8],eax"ravenscry.exe"+53DAB8: 8B 97 5C 0C 00 00 - mov edx,[edi+00000C5C]"ravenscry.exe"+53DABE: 8B 42 04 - mov eax,[edx+04]"ravenscry.exe"+53DAC1: 35 29 CD 63 5A - xor eax,5A63CD29"ravenscry.exe"+53DAC6: 2B 86 D0 10 00 00 - sub eax,[esi+000010D0]"ravenscry.exe"+53DACC: 8B CD - mov ecx,ebp"ravenscry.exe"+53DACE: 0F 98 C1 - sets cl"ravenscry.exe"+53DAD1: BB 64 00 00 00 - mov ebx,00000064"ravenscry.exe"+53DAD6: 49 - dec ecx"ravenscry.exe"+53DAD7: 23 C1 - and eax,ecx// ---------- INJECTING HERE ----------"ravenscry.exe"+53DAD9: 89 86 C4 10 00 00 - mov [esi+000010C4],eax// ---------- DONE INJECTING ----------"ravenscry.exe"+53DADF: EB 1C - jmp ravenscry.exe+53DAFD"ravenscry.exe"+53DAE1: C7 86 CC 10 00 00 FF FF FF FF - mov [esi+000010CC],FFFFFFFF"ravenscry.exe"+53DAEB: 89 AE D0 10 00 00 - mov [esi+000010D0],ebp"ravenscry.exe"+53DAF1: 89 AE C8 10 00 00 - mov [esi+000010C8],ebp"ravenscry.exe"+53DAF7: 89 AE C4 10 00 00 - mov [esi+000010C4],ebp"ravenscry.exe"+53DAFD: 8B 16 - mov edx,[esi]"ravenscry.exe"+53DAFF: 8B 82 14 01 00 00 - mov eax,[edx+00000114]"ravenscry.exe"+53DB05: 68 70 05 00 00 - push 00000570"ravenscry.exe"+53DB0A: 8B CE - mov ecx,esi"ravenscry.exe"+53DB0C: FF D0 - call eax}
×
×
  • Создать...

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

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