2017-12-31 90 views
2

Ich weiß, dass Sie safely execute arbitrary code from Lua durch sichere Dinge mit der Funktion setfenv Lua Whitelisting. Aber wenn ich das über ein Skript mache, ist es nicht nur unordentlich, sondern (benutzermodifizierbares Spiel) ein ahnungsloser Benutzer, der einen Mod installiert, könnte einfach auf "Alles ersetzen" oder etwas klicken, wenn er einen Mod in einen Ordner installiert, ohne etwas daran zu denken . Ich bin mir sicher, dass es auch andere Möglichkeiten gibt, die super leicht umgangen werden können.sicher beliebiges Lua Ausführen von Code mit nur C

Insgesamt ist der sicherste Weg, dies mit direkten C Anrufen tun soll, sicher zu sein sein, ohne Lua-Code/Zeichenkette bei der Einstellung der Sandbox beteiligt. Wie kann ich das machen?

Antwort

0

verwenden einfach nicht luaL_openlibs. Eine andere Option wäre, dass in Ihrem c-Programm ein Lua-Code als String oder Bytecode existiert, den Sie vor allem anderen ausführen.

1

Alles, was Sie Code in einer Lua-Skript kann auch in C über den Lua-C-API durchgeführt werden. Aber es ist schwieriger, in C zu folgen als das entsprechende Lua-Skript. Als ich einige geschützte Lua-Skripte für ein Host-Programm haben wollte, habe ich Dinge wie zum Beispiel getan:

  • legte sie in einem separaten Verzeichnis.
  • verschlüsseln sie in ein Archiv, das mein C-Programm nur für den privaten Schlüssel kennt.
  • Eingebettete als mehrzeilige Strings im C-Quellcode.
  • einbetten der kompilierten Skripte als Binärketten in Code meines C-Quelle, so dass sie nicht so leicht hack-Lage über die binäre bearbeiten von exe des Programms. (Manchmal verwende ich eine SHA der Skripte, um zu verhindern, dass sie innerhalb der exe bearbeitet werden) ... und so weiter.
  • Sie möchten den Computer, auf dem Ihr Spiel läuft, auf jeden Fall vor schädlichen Skripts schützen, indem Sie Sandboxes verwenden. ZB kein Dateisystemzugriff. Aber beachten Sie, dass Sie Ihr Host-Programm auch vor allen Arten von bösartigen Skripten schützen müssen (z. B. indem Sie den Lua-Instanz-Thread des Spiels über eine while-1-Schleife hängen lassen) und fügen Sie der Umgebung, die den Mod-Skripten gegeben wird, weitere Einschränkungen hinzu.

    z. sogar ein während 1 Ende wird immer noch die WOW UI hängen.

    Hoffe, dass hilft.