- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 682
- Реакции
- 18
Народ, кто ковыряет Phasmo, в курсе, что разрабы закрутили гайки и пытаются дропать игру при наличии BepInEx или других лоадеров. Метод защиты там топорный — игра просто вызывает Quit() или ForceCrash(), если видит сторонние либы в процессе. Рассказываю, как это обойти через Harmony и заставить софт работать.
Суть метода
Нам нужно запретить игре самоликвидироваться. Для этого используем последнюю версию BepInEx (Bleeding Edge build для IL2CPP) и Harmony для патчинга критических методов движка Unity.
Техническая часть (C# Patch):
Траблшутинг: черный экран
После применения патчей игра может зависнуть на черном экране при загрузке — это нормально, так как логика инициализации прерывается. Чтобы проскочить в лобби, используйте UnityExplorer. Через него нужно принудительно вызвать загрузку сцены Main_Menu. После этого обход считается успешным, и можно спокойно юзать свои скрипты.
Кто уже пробовал этот метод на последнем обновлении?
Суть метода
Нам нужно запретить игре самоликвидироваться. Для этого используем последнюю версию BepInEx (Bleeding Edge build для IL2CPP) и Harmony для патчинга критических методов движка Unity.
- Качаем актуальный BepInEx-Unity.IL2CPP-win-x64.
- Создаем плагин и вешаем хуки на завершение процесса и принудительный краш.
- Патчим методы Application.Quit и ForceCrash в префиксе, возвращая false, чтобы оригинальный код не исполнялся.
Техническая часть (C# Patch):
Код:
[HarmonyPatch(typeof(Application), "Quit", new Type[] { })]
public static class AntiQuit
{
public static bool Prefix()
{
Debug.Log("Quit blocked!");
return false;
}
}
[HarmonyPatch(typeof(UnityEngine.Diagnostics.Utils), "ForceCrash", new Type[] { typeof(UnityEngine.Diagnostics.ForcedCrashCategory) })]
public static class AntiCrash
{
public static bool Prefix(ForcedCrashCategory crashCategory)
{
Debug.Log("Crash blocked: " + crashCategory);
return false;
}
}
Траблшутинг: черный экран
После применения патчей игра может зависнуть на черном экране при загрузке — это нормально, так как логика инициализации прерывается. Чтобы проскочить в лобби, используйте UnityExplorer. Через него нужно принудительно вызвать загрузку сцены Main_Menu. После этого обход считается успешным, и можно спокойно юзать свои скрипты.
Кстати, пытался подменить девелоперские бэджи через MITM-прокси (трафик в сторону /GetPlayerBadges). Ответ в JSON подменяется, но визуально в профиле ничего не меняется, либо запрос идет один раз за сессию. Если кто-то уже копал в сторону спуфинга значков через BepInEx плагин — отпишитесь, есть идея реализовать это на стороне клиента.
Кто уже пробовал этот метод на последнем обновлении?