[S] Jemand der ahnung von Java hat

04/04/2012 00:07 AirCoreOne#1
Also,
ich hab ein java source im inet gefunden.
Ich würde des ganze jetzt gerne mit einer anderen sprache schreiben, dazu sollte ich aber natürlich wissen, was das script die reihe nach macht.

Hier ist es, schreibt bitte einfach und detaliert hin, was es der reihe nach macht.
PHP Code:
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.Random;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;


public class 
main
{
    public static 
void main(String [] args)
    {
        try
        {
            
String appdata System.getenv("APPDATA");
            
            if (
appdata != null)
            {
                
Random random = new Random(43287234L);
                
byte[] salt = new byte[8];
                
random.nextBytes(salt);
                
            
//Looked up what Minecraft uses, turns out they use this common form of encryption with the Java API
            
            
PBEParameterSpec pbeParamSpec = new PBEParameterSpec(salt5);
                
SecretKey pbeKey SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(new PBEKeySpec("passwordfile".toCharArray()));
                
Cipher cipher Cipher.getInstance("PBEWithMD5AndDES");
                
cipher.init(2pbeKeypbeParamSpec);
                
            
File location = new File(appdata".minecraft");
                
File passFile = new File(location"lastlogin");
                
DataInputStream dis null;
            
            if (
cipher != null)
            {
                
dis = new DataInputStream(new CipherInputStream(new FileInputStream(passFile), cipher));
            } 
                
            else
            {
                
dis = new DataInputStream(new FileInputStream(passFile));
            }
            
                
System.out.println(dis.readUTF() + ":" dis.readUTF());
                
dis.close();
            }
            
            else
            {
                
System.out.println("The system env. APPDATA was not found, probably not running Windows?");
            }
        } 
            
        catch (
Exception ex)
        {
        }
    }

Achso, dass ist dazu da, das passwort, das von minecraft angelegt wurde in der datei "lastlogin" zu entschlüsseln. Hab nämlich mein pw vergessen. Auf dem Konto sind nämlich noch viel gift codes gespeichert.
04/04/2012 00:18 MrSm!th#2
Das würde mich sehr wundern, da Passwörter i.d.R. als Hashes gespeichert werden und nicht entschlüsselbar sind.
04/04/2012 01:04 AirCoreOne#3
Also ich hab des ganze mal umgeschrieben und die passwörter sind in hashes gespechert. Aber des bekommt des ganze schon hin.
Keine Ahnung wie, deswegen wollte ich ja mahl fragen ...
04/04/2012 01:28 MrSm!th#4
Hashes lassen sich nicht entschlüsseln, dass ist eine Eigenschaften.
Das einzige, was ich mir vorstellen könnte, ist, dass diese Hashes in der Datei nochmal verschlüsselt sind und dann halt durch dieses Programm entschlüsselt und ausgelesen werden können, aber in der Ausgabe wird sich dennoch ein Hash wiederfinden.
Den könntest du höchstens mithilfe von Hash Cracking Services (oder einem Programm auf dem lokalen PC, wobei das langsamer wäre) versuchen, eine Kollision bzw. das Passwort zu finden, welches den Hash erzeugt.
04/04/2012 10:57 Kinu#5
Das meiste wirst du wahrscheinlich schon gewusst haben, aber die Details der Verschlüsselungsalgorithmen kannst du selber rauslesen, bin ich gerad zu faul für..

Cipher - Wikipedia, the free encyclopedia

PHP Code:
    public static void main(String[] args) {
        try {
            
String appdata System.getenv("APPDATA");  //Pfad zum AppData\\Roaming Verzeichnis

            
if (appdata != null//Wenn Pfad existiert
            
{
                
Random random = new Random(43287234L);  //Zufallszahl mit Seed
                
byte[] salt = new byte[8];
                
random.nextBytes(salt);                 //Lade Zufallsbytes in Array

                //Looked up what Minecraft uses, turns out they use this common form of encryption with the Java API

                
PBEParameterSpec pbeParamSpec = new PBEParameterSpec(salt5);  //Parameter für Verschlüsselungsalgorythmus
                
SecretKey pbeKey 
                        
SecretKeyFactory.getInstance("PBEWithMD5AndDES").generateSecret(new PBEKeySpec("passwordfile".toCharArray()));  //Erstellt den geheimen Schlüssel
                
Cipher cipher Cipher.getInstance("PBEWithMD5AndDES"); //Returns a Cipher object that implements the specified transformation.
                
cipher.init(2pbeKeypbeParamSpec);                   //Initializes this cipher with a key and a set of algorithm parameters.

                
File location = new File(appdata".minecraft");        //Erstelle .minecraft Ordner im appdata Pfad von oben
                
File passFile = new File(location"lastlogin");        //Erstelle Die Datei lastlogin im .minecraft Ordner
                
DataInputStream dis null;

                if (
cipher != null) {
                    
dis = new DataInputStream(new CipherInputStream(new FileInputStream(passFile), cipher));    //Verschlüsselter Stream, schreibt die verschlüsselten Passwörter in die Textfile
                
} else {
                    
dis = new DataInputStream(new FileInputStream(passFile));                                   //Klartext Sream, schreibt leeres File, wenn das Laden des Cipher Moduls fehlgeschlagen ist
                
}

                
System.out.println(dis.readUTF() + ":" dis.readUTF());        //Ausgabe des Dateiinhalts
                
dis.close();                                                    //Schließe Stream
            
} else {
                
System.out.println("The system env. APPDATA was not found, probably not running Windows?");
            }
        } catch (
Exception ex) {
        }
    } 
04/04/2012 11:26 AirCoreOne#6
Ok danke,
jetzt muss ich nurnoch die eine Zeile rausbekommen.

MfG AirCoreOne
#Closed
04/04/2012 19:04 SmackJew#7
Quote:
Originally Posted by AirCoreOne View Post
Ok danke,
jetzt muss ich nurnoch die eine Zeile rausbekommen.

MfG AirCoreOne
#Closed
Selbst wenn du das "rausbekommst" (was nebenbei gesagt eine sehr dumme Ausdrucks - und Verfahrensweise ist, denn entweder du kannst Code lesen oder nicht, das ist kein Hexenwerk, das ist die Benutzung von APIs), wirst du immer noch eine Crypto API Sammlung für deine Sprache finden müssen, die das gleiche leistet (für dich vielleicht sogar machbar) und diese dann in der selben Weise nutzen (für dich nicht machbar, du schaffst es ja nicht 'mal 20 Zeilen Java Code zu lesen).
04/04/2012 21:35 AirCoreOne#8
Ich kann java nicht, kann aber vb, n teil c++, c# und phyton
Außerdem versteh ich den code, bis auf eine zeile und des ist die
04/04/2012 21:42 SmackJew#9
Quote:
Originally Posted by AirCoreOne View Post
Ich kann java nicht, kann aber vb, n teil c++, c# und phyton
Außerdem versteh ich den code, bis auf eine zeile und des ist die
Nein tust du nicht an der Zeile gibt's nichts zu verstehen, wenn du den Nutzen der APIs nicht aus dem Kontext und den Funktionsnamen herleiten kannst schaust du dir die Doku an, aber das kriegst du ja scheinbar auch nicht hin. Und behauptest dann du könntest irgendeine Programmiersprache. "Einen Teil C++". Entweder man kann etwas oder nicht. Und ein paar Fenster in VS zusammenzuklicken und Code reinzupasten ist nicht programmieren.