Mam wiele skryptów Lua (dla trybu multiplayer Multi Theft Auto), które są kompilowane, z wielu powodów, w tym zapobiegania kradzieży. W rzeczywistości jest to tylko środek odstraszający, ponieważ Luadec (http://luadec51.luaforge.net/) może łatwo zdekompilować skrypty. Czy ktoś ma jakieś wskazówki, w jaki sposób mogę sprawić, aby moje skrypty nie podlegały dekompilacji?Jak mogę spowodować, że skrypty Lua będą podlegać dekompilacji?
Odpowiedz
Szyfrowanie; to naprawdę jedyny sposób, żeby to zadziałało. Oczywiście, ponieważ twój program musiałby je odszyfrować, mogliby po prostu wyrwać odszyfrowane dane z pamięci.
Więc nie, nic nie możesz zrobić. Jakakolwiek metoda będzie w pewnym stopniu "tylko środkiem odstraszającym kradzież". Nawet kompilacja do rzeczywistego montażu jest tylko środkiem odstraszającym, ponieważ można go złożyć w coś, co nie jest całkowicie odmienne od oryginalnego kodu źródłowego.
Pytanie brzmi po prostu, jak wiele kłopotów chcesz dać użytkownikowi. Szyfrowanie prawdopodobnie daje ci najwięcej za swoje pieniądze. To zmusi ich do przejścia przez plik wykonywalny, aby dowiedzieć się, jak wyrwać dane z pamięci. Większość zwykłych użytkowników nie chce tego robić.
Jeśli chcesz być naprawdę poważny, możesz zmienić kodowanie generowane i używane przez lua vm, wtedy nie można go zdekompilować za pomocą oprogramowania na półce. Choć może to spowodować więcej problemów, niż jest to warte - musiałbyś wesprzeć własną wersję lua, a prawdopodobnie nie mógłbyś używać takich rzeczy jak luajit.
Aby dokonać dekompilacji, musieli wymyślić mapowanie opkodów, które wymyślili i przetłumaczyli. Prawdopodobnie nie byłoby to zbyt trudne, ale prawdopodobnie bym tego nie zrobił.
[Aktualizacja]
Patrząc na źródła może to być dość łatwe, istnieją dwa pliki lopcode.c i lopcode.h może jeśli wystarczy zmienić kolejność rozkazy w tych będziesz zrobienia. Proszę pisać, jeśli w końcu to zrobisz i to działa, czy nie.
Nie sądzę, że to możliwe. Sama natura bestii (bardzo minimalny język działający na bardzo małej maszynie wirtualnej) w zasadzie jej zabrania.
Najlepsze, na co możesz liczyć, to, że kod dekompilowany jest tak trudny do zrozumienia, jak to tylko możliwe, dla człowieka.
Multi Theft Auto obsługuje teraz szyfrowanie skryptów. Możesz je skompilować online pod numerem http://luac.mtasa.com/ lub pobrać samodzielny kompilator.
- 1. Czy mogę profilować skrypty Lua działające w Redis?
- 2. Jak mogę spowodować, że Eclipse skompiluje GWT z flagą -strict?
- 3. Najlepsze narzędzie (narzędzia) do dekompilacji kodu bajtowego Lua?
- 4. co może spowodować, że html i skrypt będą się zachowywać w różnych iteracjach pętli for?
- 5. Jak uruchomić skrypty Lua na Androida w aplikacji Java?
- 6. LuaL_openlibs() i skrypty piaskownicy
- 7. Skrypty # wewnątrz Java
- 8. Jak mogę całkowicie zakończyć wątek Lua?
- 9. Jak mogę spowodować, że proces potomny zostanie zakończony, gdy rodzic zrobi?
- 10. Czy mogę spowodować, że Android Studio będzie wyświetlał błędy natychmiast, tak jak to robił Eclipse?
- 11. Jak mogę spowodować, że MSTest.exe zwróci 0, nawet jeśli test się nie powiedzie?
- 12. Jak mogę przekonwertować Ruby na Lua?
- 13. Co może spowodować, że rozmowy ITransaction.CommitAsync potrwają naprawdę długo (24h)?
- 14. Jak celowo spowodować zakleszczenie?
- 15. Jak mogę złożyć wniosek GUI w Lua
- 16. Jak mogę dołączyć do tabeli w Lua
- 17. Co może spowodować, że automatyczne uzupełnianie Chrome przestanie działać?
- 18. gwarancji, że rodziny typu będą czerpać pewne klasy
- 19. W języku C# czy mogę spowodować, że auto-własność wykona dodatkową pracę przy pomocy atrybutu?
- 20. Skrypty użytkownika końcowego
- 21. Czy mogę spowodować wyjątek celowo w python?
- 22. Jak mogę spowodować zakleszczenie w MySQL dla celów testowych?
- 23. Wybranie opcji może spowodować, że VoiceOver przeskoczy na górę strony
- 24. Co może spowodować, że clang nie znajdzie nagłówka unordered_map?
- 25. Co może spowodować, że wartość ViewData.ModelState.IsValid stanie się fałszywa
- 26. Co może spowodować, że Double Buffering zabije moją aplikację?
- 27. Nie można zaimplementować elementu Paczki, ponieważ nie mogę spowodować, że pole KATALOG_SERWATORA będzie statyczne.
- 28. W jaki sposób mogę spowodować, że Android Studio przestanie zwracać wygenerowany kod w wynikach wyszukiwania?
- 29. Jak skompilować skrypty Lua do jednego pliku wykonywalnego, a jednocześnie uzyskać szybki kompilator LuaJIT?
- 30. Czy mogę oczekiwać, że wyniki przy użyciu System.Random będą odtwarzalne na wszystkich systemach?
Możesz zrobić to trochę trudniej, zmieniając kolejność operandów w instrukcjach VM. – lhf
Należy zauważyć, że to podejście prawdopodobnie nie w pełni działa, jeśli masz dostęp do listeru kodu bajtowego, takiego jak ten podany przez 'luac', ponieważ możesz odwrócić inżynierię zamówienia. Ale byłby to ból i prawdopodobnie zniechęci większość ludzi. Lub być wyzwaniem dla zmotywowanego hakera. :-) – lhf
Rzeczywiście nic nie zatrzyma dedykowanego hakera z heksowym zrzutem. Jeśli umieścisz to w szyfrowaniu sugerowanym przez Nicola poniżej i najpierw uruchomisz je za pomocą obfuscatora lua, pozostanie tylko prawdziwie oddany. – daven11