Skocz do zawartości

[C# / Unity] Proste injectowanie własnego kodu do gier


KubaTMoffici
# CSH External VIP Project

Masz dosyć problemów z czynnikiem zaufania w CS2 lub notorycznymi banami?

Sprawdź CSH External VIP Project.


Więcej informacji  

Rekomendowane odpowiedzi

Witam, jako, że jestem nowy to chcę jakoś zacząć przygodę na tej stronie z takim trickiem/poradnikiem/coś takiego:

 

Pierwsze co musisz mieć by z tym zacząć to:

  • Gra z Unity (w przypadku gdy ta gra nie ma pliku UnityEngine.[wstaw jakieś słowa].dll itd. to znajdź to z innego programu w Unity albo pobierz tutaj: UnityEngine - Pliki.zip),
  • Cokolwiek do programowania w CSharpie [polecam Visual Studio 2019], będę przedstawiał wszystko na Visual Studio 2019 bo z nim najbardziej jestem zaznajomiony,
  • Injector: SharpMonoInjector.Gui.zip

 

Jak już to wszystko mamy to przechodzimy do działania:

1.Otwieramy środowisko w którym będziemy programować i przy tworzeniu nowego projektu zaznaczamy byśmy stworzyli coś takiego jak Class Library (.NET Framework), jak nie macie tego to zainstalujcie .NET Framework, podgląd na screenie:

obraz.thumb.png.7815ca24f3de5c9b00d86dd33eca3f6c.png

 

2.Nazywamy go jakkolwiek chcemy i przechodzimy dalej.

3.Gdy będziemy już mieli widoczne miejsce do wpisywania kodu itd. nazywamy nasz plik który powinien mieć nazwę class1.cs [lub coś w tym stylu] na jakiś łatwy np. Loader.cs by było lepiej i szybciej, podgląd niżej:

 

obraz.png.42de1a63cac4c2ad15dce183b6894ef1.png

obraz.png.e3320c4a77a85a7f9d49b4e61ef6e67d.png

 

4.Dodajemy do projektu odniesienia czyli te pliki UnityEngine klikając prawym na References i wtedy Add Reference...

 

obraz.png.94616d9ec2a4e821d87e302e0a5c86ba.png

 

5.W nim klikamy na Browse i teraz w zależności co zrobiliśmy:

a)Posiadamy te pliki z gry

b)Pobraliśmy z linku wyżej

 

1a.Wchodzimy do folderu z grą a następnie w [nazwa gry]_Data > Managed

2a.Bierzemy z niego wszystkie pliki które zaczynają się na "UnityEngine" i je zaznaczamy

 

1b.Wypakowujemy wszystko z pliku .zip

2b.Klikamy wszystkie pliki i je zaznaczamy

 

6.Klikamy "Add" a następnie Ok, program powinien się teraz zawiesić na chwilę, spokojnie to jest normalne

 

7.Na samej górze dodajemy using UnityEngine; który powie naszemu kodowi z jakiego odniesienia używamy,

 

8.W tej klasie którą nazwaliśmy na początku tworzymy voidy o nazwach: Init, Unload i _Unload [tak, razem z _] i GameObject [Czyli objekt Unity który posłuży nam do ładowania skryptów do gry] o nazwie Load, tak powinien wyglądać kod:

    public class Loader
    {

        public static void Init()
        {
        }

        public static void Unload()
        {
        }

        private static void _Unload()
        {
        }


        private static GameObject Load;

    }

8a.W pierwszym voidzie "Init" wpisujemy kod który doda Komponent w którym będą skrypty, po to dodaliśmy GameObject o nazwie Load by on wgrywał ten komponent:

            Loader.Load = new GameObject();
            Loader.Load.AddComponent<script1>();
            UnityEngine.Object.DontDestroyOnLoad(Loader.Load);

8b.W drugim voidzie "Unload" wpisujemy kod _Unload(); który będzie odloadowywał nam skrypt który później zrobimy

8c.W trzecim i ostatnim voidzie "_Unload" wpisujemy równie krótki kod GameObject.Destroy(Load); który usunie objekt ładujący wszystko.

 

9.Po tym wszystkim powinniśmy mieć błąd, że komponent script1 nie istnieje, więc by to zniwelować klikamy prawym na nazwe projektu, wtedy Add a następnie New Item

obraz.png.f7eeac633a5f6431ae89c5af3231f12a.png

 

10.Gdy to zrobimy w nowym oknie dodajemy klasę o nazwie script1.cs

obraz.thumb.png.55a37fa94d2c6adae16b48e63021cf5d.png

 

11.W nim powinniśmy mieć linijkę class script1, zmieniamy ją na class script1 : MonoBehaviour a na samej górze również wpisujemy kod z punktu 7

12.Dodajemy 2 voidy o nazwach [piszcie tak jak ja, muszą być Case Sensitivity]: "Start" i "Update", jak można przetłumaczyć Start służy od tego, że wykonuje kod kiedy skrypt startuje, a Update wykonuje się co milisekundę całość tego kodu powinna się prezentować następująco:

        public void Start()
        {
        }

        public void Update()
        {
	}

 

13.Do Update dodajemy mały kod który pomoże nam gdy będziemy chcieli dezaktywować skrypt czyli:

            if (Input.GetKeyDown(KeyCode.Delete))
            {
                Loader.Unload();
            }

Od tego momentu po wstrzyknięciu kodu możemy go szybko dezaktywować po kliknięciu Delete, możemy to zmienić usuwając w kodzie Delete na inny guzik np. F12

 

14.Po wszystkim klikamy na pasku u góry Build i Build Solution:

obraz.png.94a1095318ff31fdf4c3d4692d9eee79.png

 

Teraz powinniśmy mieć gotowy kod do użycia! Teraz tylko jak to zinjectować:

 

15.Pobieramy program SharpMonoInjector z linku wyżej który pomoże nam to zrobić

16.Wypakowujemy program i go odpalamy

17.Odpalamy grę do której chcemy mieć wgrany kod i klikamy w SharpMonoInjectorze "Refresh" by odświeżyć listę procesów które są na Unity, po czym wybieramy odpowiedni:

obraz.png.1913b884769f8a12fd33cf5c059b0fad.pngobraz.png.435c8082306d049a27c20c3118037cd7.png

 

18.Klikamy na "..." i szukamy naszego pliku .dll który zrobiliśmy, zazwyczaj jest on w C:\Users\[nazwa uzytkownika]\source\repos\[nazwa projektu]\[nazwa projektu]\bin\Debug

19.Resztę wpisujemy następująco:

obraz.png.f4048f6bbc5d61df09cd9f171da059e2.png

i klikamy Inject, jak mamy nazwę projektu ze spacją to w Namespace usuwamy spacje i za nie dajemy "_"

 

I gotowe! Mamy teraz injectowany program! Teraz tylko klikamy guzik jaki ustawiliśmy i możemy dezaktywować to! Przykład modów jakie możemy z tym zrobić przy chwili napracowania:

obraz.png.fd985e01b019fef78d37a52254c30173.png

 

Nie pogardziłbym plusikiem i może niedługo będzie poradnik jak zrobić takie GUI! Pozdrawiam i miłych świąt ❤️

 

obraz.png

 

Skany antywirusowe:

Injector: https://www.virustotal.com/gui/file/3c28a42e1ce22ed277d9c7f51a3eddbcf63026e69ce881f692a232fe780a1f96/detection

Przykładowe pliki silnika Unity: https://www.virustotal.com/gui/file-analysis/NDEzYzIxNmI0NTk1MzNhZDY0NmU2OTY4MjMwY2Y1NmI6MTYwODU2MzU2NQ==/detection

Staram się dodawać dobre posty na tym forum, proszę daj plusika bym wiedział, że to co robię jest warte starań ❤️

ezgif.com-resize.gif.fa404565a9e49e40a55ee8f45b1ff54d.gif

Odnośnik do komentarza

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Regulamin. Polityka prywatności