[Thread] Scheint nicht Sequenziell zu Arbeiten

ProTokra

Mitglied
Guten Tag Zusammen

Ich habe ein Problem mit Folgendem Code, der zu einem ICQ Passwort Wiederherstlelungstool gehört.
Die Kommandozeilenausgabe gibt auch schon Auskunft über das Problem.
Wie man in den erstne Zeilen der Ausgabe erkennt, wird z.b die in ASCII Kodierte Zahl 1 in
der setBrute Methode Ausgegeben und auch gespeichert.
In der run Methode des Thread wird jedoch als erstes ASCII zeichen die Zahl 2 Ausgegeben.

Die Methode setBrute() wird dabei von einer Oberklasse nur Aufgerufen,
wen die Variable needBrute == true ist.

Java:
	private class MD5Creator extends Thread {
		private boolean needBrute = true;
		private byte Brute[];
		
		void setBrute(byte BruteS[]) {
			System.out.println("setBrute: \t" + new String(BruteS));
			this.Brute = BruteS;
			this.needBrute = false;
		}

		public void run() {
			while (!HashCracked) {
				if (needBrute == false) {
					System.out.println("In Run: \t" + new String(Brute));
					if (MD5Hash.equals(MD5Java.hash(Brute))) {
						FinalBrute = String.valueOf(new String(Brute));
						HashCracked = true;
						break;
					}
					needBrute = true;
				}
				else {
					try {Thread.sleep(1);}
					catch (InterruptedException e) {}
				}
			}
		}
	}

Die Ausgabe in der Kommandozeile
Code:
setBrute: 	1
In Run: 	2
setBrute: 	2
In Run: 	3
setBrute: 	3
In Run: 	4
setBrute: 	4
In Run: 	5
setBrute: 	5
In Run: 	6
setBrute: 	6
In Run: 	7
setBrute: 	7
In Run: 	8
setBrute: 	8
In Run: 	9
setBrute: 	9
In Run: 	0
setBrute: 	0
In Run: 	a
setBrute: 	a
In Run: 	b
setBrute: 	b
In Run: 	c
setBrute: 	c
In Run: 	d
setBrute: 	d
In Run: 	e
setBrute: 	e
In Run: 	f
setBrute: 	f
In Run: 	g
setBrute: 	g
In Run: 	h
setBrute: 	h
In Run: 	i
setBrute: 	i
In Run: 	j
setBrute: 	j
In Run: 	k
setBrute: 	k
In Run: 	l
setBrute: 	l
In Run: 	m
setBrute: 	m
In Run: 	n
setBrute: 	n
In Run: 	o
setBrute: 	o
In Run: 	p
setBrute: 	p
In Run: 	q
setBrute: 	q
In Run: 	r
setBrute: 	r
In Run: 	s
setBrute: 	s
In Run: 	t
setBrute: 	t
In Run: 	u
setBrute: 	u
In Run: 	v
setBrute: 	v
In Run: 	w
setBrute: 	w
In Run: 	x
setBrute: 	x
In Run: 	y
setBrute: 	y
In Run: 	z
setBrute: 	z
In Run: 	A
setBrute: 	A
In Run: 	B
setBrute: 	B
In Run: 	C
setBrute: 	C
In Run: 	D
setBrute: 	D
In Run: 	E
setBrute: 	E
In Run: 	F
setBrute: 	F
In Run: 	G
setBrute: 	G
In Run: 	H
setBrute: 	H
In Run: 	I
setBrute: 	I
In Run: 	J
setBrute: 	J
In Run: 	K
setBrute: 	K
In Run: 	L
setBrute: 	L
In Run: 	M
setBrute: 	M
In Run: 	N
setBrute: 	N
In Run: 	O
setBrute: 	O
In Run: 	P
setBrute: 	P
In Run: 	Q
setBrute: 	Q
In Run: 	R
setBrute: 	R
In Run: 	S
setBrute: 	S
In Run: 	T
setBrute: 	T
In Run: 	U
setBrute: 	U
In Run: 	V
setBrute: 	V
In Run: 	W
setBrute: 	W
In Run: 	X
setBrute: 	X
In Run: 	Y
setBrute: 	Y
In Run: 	Z
setBrute: 	Z
In Run: 	Z

Danke im Vorraus
 

gp

Aktives Mitglied
Ich würde folgendes machen / probieren:
setBrute synchronisieren, also "void synchronised setBrute(byte BruteS[]) "

dann die Berechnungsmethode in eine eigne Methode auslagern und auch diese synchronisieren.

Günter
 

ProTokra

Mitglied
Die setBrute Methode hat jetzt den synchronized Modifier.
Was du mit Berechnungsmethode meinst weis ich grad nicht, könntest evt genauer Beschreiben welchen Abschnitt^^
Java:
		synchronized void setBrute(byte BruteS[]) {
			System.out.println("setBrute: \t" + new String(BruteS));
			this.Brute = BruteS;
			this.needBrute = false;
		}
 
Zuletzt bearbeitet:
P

phreak

Gast
das ziel ist hier ganz klar zu erkennen : bruteforce gegen icq-password-recovery und fällt damit unter "cracking" was in diesem forum nicht erwünscht ist / keine hilfe gegeben wird
 

gp

Aktives Mitglied
Schadet aber nicht. Jetzt wuerd ich mir mal den Aufruf ansehen. Wieso eigentlich ein Thread? Ich wuerde die Werte eher in einem blockierenden FiFo-Buffer speichern.

guenter via tapatalk
 

ProTokra

Mitglied
@gb Ja da hast du Recht, aber der Fehler ist so Komisch das ich iwie Versuche ihn zu Finden^^
Nen Alternativen Algorithmus habe ich der Funktioniert auch.
Den Fehler zu finden ist mehr so ne Persöhnliche Sache^^

Habe das ganze jetzt mal mit einer Blockierenden Queue gemacht.
Aber der Fehler ist Immernoch der selbe, die Konsolenausgabe ebenfalls.

Java:
	private class MD5Comparer extends Thread {
		private byte[] Brute;
		private SynchronousQueue<byte[]> BFIFO = new SynchronousQueue<byte[]>();
			
		public void run() {
			while (!HashCracked) {
				try {this.Brute = BFIFO.take();}
				catch (InterruptedException e) {}
				System.out.println("In Run: \t" + new String(Brute));
				if (MD5Hash.equals(MD5Java.hash(Brute))) {
					MD5Key = String.valueOf(new String(Brute));
					HashCracked = true;
					break;
				}
			}
		}
	}

Okay habe eine KSKB erstellt, hoffe wir können das Problem finden <.<
Konnte Heute Nacht deswegen nichtmal richtig Schlafen habe nur Quellcode vor den Augen gehabt <.<

Die Main Klasse
[Java]
package ThreadProblem;

public class ThreadProblem {
static final byte zTon[] = {'1','2','3','4','5','6','7','8','9','0'};
static MD5Creator thread1 = new MD5Creator();

public static void main(String[] args) {
thread1.start();

byte Brute[] = new byte[1];
for (byte c : zTon) {
Brute[0] = c;
BruteGiven:
while (true) {
if (thread1.needBrute) {
thread1.setBrute(Brute);
break BruteGiven;
}
}
}

thread1.interrupt();
System.exit(1);
}

}
[/Java]

Die Klasse vom Thread
[Java]
package ThreadProblem;

class MD5Creator extends Thread {
boolean needBrute = true;
byte Brute[];

synchronized void setBrute(byte BruteS[]) {
System.out.println("setBrute: \t" + new String(BruteS));
this.Brute = BruteS;
this.needBrute = false;
}

public void run() {
while (true) {
if (needBrute == false) {
System.out.println("In Run: \t" + new String(Brute));
needBrute = true;
}
else {
try {Thread.sleep(1);}
catch (InterruptedException e) {}
}
}
}
}
[/Java]
 

gp

Aktives Mitglied
Habe das ganze umgebaut, vielleicht etwas zu kompliziert (ist ja schon spät am abend), aber es funktioniert:

Java:
public class MD5Creator extends Thread
{
    boolean needBrute = true;
    byte Brute[];

    synchronized void setBrute(byte BruteS[])
    {
        this.Brute = new byte[BruteS.length];
        for (int i = 0; i < BruteS.length; i++) {
            this.Brute[i] = BruteS[i];
        }
        System.out.println("setBrute: \t" + new String(this.Brute));
        this.needBrute = false;
    }

    synchronized boolean isNeedBrute() {
        return needBrute;
    }

    synchronized public void setNeedBrute(boolean needBrute) {
        this.needBrute = needBrute;
    }

    synchronized boolean isWarte()
    {
        boolean warte = true;

        if (isNeedBrute() == false)
        {
           System.out.println("In Run: \t" + new String(Brute));
           setNeedBrute(true);
           warte = false;
        }

        return warte;
    }
    public void run() {
        while (true) {
            if (isWarte() == false) {
                try {Thread.sleep(1);}
                catch (InterruptedException e) {}
            }
        }
    }

}

Und dann das Programm:

Java:
public class ThreadProblem
{
        static final byte zTon[] = {'1','2','3','4','5','6','7','8','9','0'};
        static MD5Creator thread1 = new MD5Creator();

        public static void main(String[] args) {
            thread1.start();

            byte Brute[] = new byte[1];
            for (byte c : zTon) {
                Brute[0] = c;
                BruteGiven:
                while (true) {
                    if (thread1.isNeedBrute() == true) {
                        thread1.setBrute(Brute);
                        break BruteGiven;
                    }
                }
            }

            thread1.interrupt();
            System.exit(1);
        }

}

Läuft, ohne Verklemmungen.

Wichtig ist, dass die Byte-Übergabe nicht als Referenz erfolgt, sonder die Bytes in die Variable des Threads kopiert wird. Mal wieder das Geheimhaltungsprinzip missachtet :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A java logging api scheint nicht thread save zu sein Allgemeine Java-Themen 22
I EDT scheint zu blocken wegen Dateioperation in anderem Thread Allgemeine Java-Themen 9
R 11 GB File lesen ohne zu extrahieren Filedaten Bereich für Bereich adressieren dann mit Multi-Thread id die DB importieren Allgemeine Java-Themen 3
urmelausdemeis Exception in thread "main" java.lang.Error: Unresolved compilation problem: Allgemeine Java-Themen 7
smarterToby Wie stoppe ich diesen Thread Allgemeine Java-Themen 4
A Thread.sleep Problem Allgemeine Java-Themen 2
J Thread started nur einmal Allgemeine Java-Themen 19
W Server-Thread schreibt nicht alle Dateien Allgemeine Java-Themen 6
OnDemand Logfile pro User / Thread Allgemeine Java-Themen 7
OnDemand Thread / Service abbrechen Allgemeine Java-Themen 3
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
P Swing Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: npoints > xpoints.length || npoints > ypoints.length Allgemeine Java-Themen 5
B Thread.sleep() in EJB Container wie lösen? Allgemeine Java-Themen 11
S Ist das Neuzuweisen von Feldern atomic und damit Thread-Safe? Allgemeine Java-Themen 2
S Exception in thread "main" java.lang.NullPointerException at FamilienApp.main(FamilienApp.java:15) Allgemeine Java-Themen 1
J Einen Thread in einer Schleife Allgemeine Java-Themen 2
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
Flynn Thread-Problem... Allgemeine Java-Themen 2
G Thread-Programmierung Allgemeine Java-Themen 5
S Datei wird nicht gefunden Thread.currentThread().getContextClassLoader().getResourceAsStream() Allgemeine Java-Themen 1
G Beendet sich der Thread selbst?! Allgemeine Java-Themen 3
mrbig2017 Sleep wird ignoriert und der Thread wartet nicht Allgemeine Java-Themen 1
S Thread beenden Allgemeine Java-Themen 9
M Array aus Thread Objekten erstellen Allgemeine Java-Themen 2
Aruetiise Swing JOptionPane ohne denn Thread zu pausieren Allgemeine Java-Themen 1
M Nanosekunden-Pause innerhalb einen Thread-Loops Allgemeine Java-Themen 3
E Thread Exception Allgemeine Java-Themen 6
javaerd Binomialkoeffizient ausrechnen, Exception in thread "main" java.lang.StackOverflowError Allgemeine Java-Themen 6
T Merkwürdiges Thread-Verhalten Allgemeine Java-Themen 6
K Thread Problem Allgemeine Java-Themen 6
W Thread sleep 30 sekunden - wenn keine Antwort bis dahin neu senden Allgemeine Java-Themen 2
H Thread bleibt stehen bei jar in jar Allgemeine Java-Themen 1
J Threads HTTP Request (Thread) dauert lange - in Android Allgemeine Java-Themen 3
F CPU Last eines Thread ausfindig machen Allgemeine Java-Themen 0
V Compiler-Fehler Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 125, Size: 125 Allgemeine Java-Themen 11
Tausendsassa Threads Einen Thread sich selbst schließen lassen Allgemeine Java-Themen 17
P Threads BufferedImage, Thread Concurrency Allgemeine Java-Themen 1
M Klasse in separaten Thread ausführen.Wie genau? Allgemeine Java-Themen 2
llabusch Thread blockiert Dialog Allgemeine Java-Themen 1
J Thread wait() Allgemeine Java-Themen 2
V Thread.sleep und InterruptedException? Allgemeine Java-Themen 1
G Thread nicht von GC zerstört Allgemeine Java-Themen 6
J Wie erschaffe ich einen sicheren Datenaustausch zwischen Thread und Nicht-Threads Allgemeine Java-Themen 8
Sogomn Thread blocken bis Taste gedrückt Allgemeine Java-Themen 5
T Starten vom Thread Allgemeine Java-Themen 3
T Wait/Notify() bei Thread Allgemeine Java-Themen 6
J Exception in thread "main" java.lang.NoClassDefFoundError Allgemeine Java-Themen 4
M Exception in thread "AWT-EventQueue-0" Allgemeine Java-Themen 6
Q Thread wacht nicht auf Allgemeine Java-Themen 7
T Fragen zum Thread-Thema Allgemeine Java-Themen 4
T Threads Input/Output im Thread - Datei ohne Inhalt Allgemeine Java-Themen 1
T Fragen zum Thread-Thema Allgemeine Java-Themen 9
C Threads Variablen in einem Thread Aktualisieren Allgemeine Java-Themen 17
U Thread beenden Allgemeine Java-Themen 3
W Threads Mit Thread und Runtime externe Programme öffnen Allgemeine Java-Themen 0
N Thread interrupt Status debuggen Allgemeine Java-Themen 6
A Thread: Code paralell ausführen in mehreren Instanzen Allgemeine Java-Themen 1
E Threads linkedlist/multi-thread problem Allgemeine Java-Themen 3
B Erkennen, wann Prozess beendet ist, dann Thread beenden. Allgemeine Java-Themen 6
A Thread Fehler absichtlich provozieren Allgemeine Java-Themen 3
B Threads Java Thread kommunizieren Allgemeine Java-Themen 12
N Thread Sicherheit im komplexen Datenmodell Allgemeine Java-Themen 7
K Thread richtig benutzen Allgemeine Java-Themen 3
K Exception in thread "AWT-EventQueue-1" Allgemeine Java-Themen 2
vandread Problem bei kleiner Thread-Übung Allgemeine Java-Themen 2
G Thread erzeugt nicht plausible NullPointerException Allgemeine Java-Themen 7
H Netbeans Warning bei Thread.sleep in Schleife Allgemeine Java-Themen 4
A eine test thread.join() frage Allgemeine Java-Themen 2
tuttle64 Verständnisprobleme mit Thread Locks Allgemeine Java-Themen 4
G Threads Thread bei Datenabfrage Allgemeine Java-Themen 3
S Thread anhalten per Button ? Allgemeine Java-Themen 3
E Thread Programmierung Allgemeine Java-Themen 2
S Threads ServerSocket-Thread soll schlafen, bis er gebraucht wird Allgemeine Java-Themen 2
V Thread schneller stoppen Allgemeine Java-Themen 2
V anstatt thread.join() einfach while schleife? Allgemeine Java-Themen 8
B Mausbewegung im Thread erkennen (hoch/runter) Allgemeine Java-Themen 6
G Linux/C++/Pthreads auf JVM zugreifen, thread safe? Allgemeine Java-Themen 10
K Threads Probleme mit Thread Allgemeine Java-Themen 13
K Threads Thread überprüfen Allgemeine Java-Themen 3
Z Threads Thread für einen Client Allgemeine Java-Themen 9
M Thread JavaFish Allgemeine Java-Themen 10
G Thread.sleep Allgemeine Java-Themen 12
M Threads Viele Aufrufe aus Thread, komisches Verhalten Allgemeine Java-Themen 8
B Threads Main Thread warten auf abgebrochen Task warten lassen Allgemeine Java-Themen 25
K Timer Thread Allgemeine Java-Themen 8
M Methoden Static Methoden und Thread??? Allgemeine Java-Themen 4
N java.lang.IllegalMonitorStateException: object not locked by thread before notify() Allgemeine Java-Themen 2
C Mehothode in anderenm Thread aufrufen Allgemeine Java-Themen 10
R Thread läuft nicht?! Allgemeine Java-Themen 7
R ThreadPool - vorhandene thread liste überprüfen bzw. aufräumen Allgemeine Java-Themen 3
J Anderem Thread Variable mitgeben Allgemeine Java-Themen 2
C Argument an einen Thread übergeben Allgemeine Java-Themen 4
S java.util.ConcurrentModificationException - aber nur ein Thread Allgemeine Java-Themen 3
G JUnit Test Methoden in anderen Thread verlagern Allgemeine Java-Themen 4
P Java Probleme - java.lang.Thread.run(Unkown Source) Allgemeine Java-Themen 10
L Im Thread auf Eingaben warten Allgemeine Java-Themen 3
P aus Thread auf Form zugreifen Allgemeine Java-Themen 9
C Threads Thread blockieren Allgemeine Java-Themen 4
K Threads Thread für Sleep Allgemeine Java-Themen 6
H Threads Thread stirbt aber Objekte in ihm leben weiter?! Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben