Добрый день! Есть кто-нибудь кто писал internal cheat C# и инжектил их в игру. Какие проблемы могут возникнуть? Или лучше всего использовать C++ для создание internal cheat. Видел в интернете про NativeAOT от dotnet но там, я так понял он не всех приложениях работает 32 битные например.
В основном, читы для игр разрабатываются на C++ из-за его производительности и возможности напрямую взаимодействовать с низкоуровневыми компонентами системы. Однако, использование C# также возможно для создания internal читов, хотя это может потребовать дополнительных усилий. С C#, ты будешь испытывать проблемы с: Производительность: C# является высокоуровневым языком, и выполнение кода может быть медленнее, чем в случае с C++. Это может повлиять на производительность чита и вызвать задержки. Интеграция с играми: Игры, особенно на низкоуровневых движках, могут быть написаны на C++ или других языках, что может создать сложности при интеграции чита, написанного на C#. Обнаружение: Античит системы обычно оптимизированы для обнаружения читов, созданных на C++ и других распространенных языках. Использование C# может увеличить вероятность обнаружения чита. Что касается NativeAOT от dotnet, это экспериментальная технология, которая позволяет компилировать C# в нативный исполняемый код. Но она имеет ограничения, такие как отсутствие поддержки 32-битных приложений. В целом, если уже есть опыт работы с C# и есть желание создать internal чит на этом языке, это возможно, но потребуется больше усилий по сравнению с использованием C++. Думаю будет более предпочтительным вариантом рассмотреть плюсы для создания читов, из-за их преимуществ в производительности и интеграции с такими сложными программами как игры.
W223, А стоит ли рассматривать язык программирования RUST или всё же лучше C++? Просто C# то имеется опыт в познании и программирования тех же сайтов, но дальше сайтов и стандартных бизнес-приложений я дальше не делал. Хотелось бы просто понять, есть смысл страдать и пытаться сделать на C# или лучше изучить новый язык программирования?
Yotic, Да я видел твои сурсы на гитхабе Даже инжектор на C# не помог private readonly string _library = $@"{Environment.CurrentDirectory}\NAOT.dll"; internal InjectorResult Inject() { try { if (null == _process) return InjectorResult.NoClient; if (!File.Exists(_library)) return InjectorResult.MissingFile; var handle = Usefuls.OpenProcess(1082U, 1, (uint)_process.Id); if (handle.ToInt64() == 0) return InjectorResult.NoHandle; var libAddress = Usefuls.GetModuleHandle("kernel32.dll"); if (libAddress.ToInt64() == 0) return InjectorResult.NoLibrary; var procAddress = Usefuls.GetProcAddress(libAddress, "LoadLibraryA"); if (procAddress.ToInt64() == 0) return InjectorResult.NoProcedure; var bytes = Encoding.ASCII.GetBytes(_library); var allocated = Usefuls.VirtualAllocEx(handle, IntPtr.Zero, new IntPtr(bytes.Length), 12288U, 64U); if (allocated.ToInt64() == 0) return InjectorResult.NoAllocation; if (Usefuls.WriteProcessMemory(handle, allocated, bytes, (uint)bytes.Length, 0) == 0) throw new Exception("Was unable to write library location into allocated memory."); var thread = Usefuls.CreateRemoteThread(handle, IntPtr.Zero, IntPtr.Zero, procAddress, allocated, 0U, IntPtr.Zero); if (thread.ToInt64() == 0) throw new Exception("Was unable to create a remote thread."); Usefuls.CloseHandle(handle); return InjectorResult.Success; } catch (Exception e) { Console.WriteLine(e); return InjectorResult.Error; } } CSHARP private readonly string _library = $@"{Environment.CurrentDirectory}\NAOT.dll"; internal InjectorResult Inject() { try { if (null == _process) return InjectorResult.NoClient; if (!File.Exists(_library)) return InjectorResult.MissingFile; var handle = Usefuls.OpenProcess(1082U, 1, (uint)_process.Id); if (handle.ToInt64() == 0) return InjectorResult.NoHandle; var libAddress = Usefuls.GetModuleHandle("kernel32.dll"); if (libAddress.ToInt64() == 0) return InjectorResult.NoLibrary; var procAddress = Usefuls.GetProcAddress(libAddress, "LoadLibraryA"); if (procAddress.ToInt64() == 0) return InjectorResult.NoProcedure; var bytes = Encoding.ASCII.GetBytes(_library); var allocated = Usefuls.VirtualAllocEx(handle, IntPtr.Zero, new IntPtr(bytes.Length), 12288U, 64U); if (allocated.ToInt64() == 0) return InjectorResult.NoAllocation; if (Usefuls.WriteProcessMemory(handle, allocated, bytes, (uint)bytes.Length, 0) == 0) throw new Exception("Was unable to write library location into allocated memory."); var thread = Usefuls.CreateRemoteThread(handle, IntPtr.Zero, IntPtr.Zero, procAddress, allocated, 0U, IntPtr.Zero); if (thread.ToInt64() == 0) throw new Exception("Was unable to create a remote thread."); Usefuls.CloseHandle(handle); return InjectorResult.Success; } catch (Exception e) { Console.WriteLine(e); return InjectorResult.Error; } }