Πρόβλημα με Brute Force

Συζητήσεις για την Java

Συντονιστές: WebDev Moderators, Super-Moderators

mortis1572
Δημοσιεύσεις: 33
Εγγραφή: 13 Ιουν 2010 20:44

Πρόβλημα με Brute Force

Δημοσίευση από mortis1572 » 13 Σεπ 2010 01:13

Τον τέσταρα των κώδικα αλλά και πάλι πήρα τα ίδια αποτελέσματα.
'Οταν ο κωδικός είναι πάνω από 7 χαρακτήρες τότε δεν εμφανίζει τον σωστό αλλά εμφανίζει κάποιον κωδικό που αποτελείται από 6 χαρακτήρεσ και λέει ότι είναι ο σωστός.
Στον επιπλέον κώδικα που μου έδωσες είχες αυτο απενεργοποιημένο

Κώδικας: Επιλογή όλων

try{
                       int available=in.available();
                       byte b[]=new byte[available+1];
                       while(in.read(b,0,available)!=-1){
                             available=in.available();
                             b=new byte[available+1];
                ******* //int a=in.read&#40;b,0,available&#41;;//<--αν διαβάσει τότε είναι το σωστό password
                             //System.out.println&#40;"read="+a&#41;;
                       &#125; 
Το ενεργοποίησα αλλά και πάλι δεν βγήκε το σωστό αποτέλεσμα , δεν χρειαζόταν?
Αν το έχεις τεστάρει καθόλου σου βγάζει κανονικά το password που έχεις δώσει ή σου βγάζει προβλήματα όπως και εμένα?

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Πρόβλημα με Brute Force

Δημοσίευση από virxen75 » 14 Σεπ 2010 01:01

λοιπόν μετά από κάποιες προσπάθειες μάλλον το πέτυχα.Τσέκαρε το και συ και πες μου.


ο νέος κώδικας

Κώδικας: Επιλογή όλων

import java.io.*;
import java.*;
import com.javamex.arcmexer.*;
public class New2&#123;
  private static char fCharList&#91;&#93; = &#123;'1','2','3','4','5','6','7','8','9'&#125;;
  private static final int max_len = 8;
  private static String foundWord;
  private static boolean ok=true;
  private static String filename="C&#58;\\12.zip";//<---το δικό μου zip αρχείο
  private static int count=0;

  public static void Brute&#40;&#41;&#123;
        
        char currentChar = fCharList&#91;0&#93;;
        for &#40;int len=1;len<=max_len;len++&#41;&#123;
        	StringBuffer sb = new StringBuffer&#40;len&#41;;
        	System.out.println&#40;"\nsearching for "+len+" character password..."&#41;;
        	for &#40;int i = 0; i <len; i++&#41;&#123;
            	sb.append&#40;currentChar&#41;;
        	&#125;
        	ChangeCharacters&#40;0, sb,len&#41;;
        	if &#40;ok==false&#41; break;
        &#125;
    &#125;
 
    public static StringBuffer ChangeCharacters&#40;int pos, StringBuffer sb,int len&#41;
  &#123;
       try &#123;
FileInputStream f = new FileInputStream&#40;filename&#41;;
ArchiveReader r = ArchiveReader.getReader&#40;f&#41;;
ArchiveEntry entry ;

while &#40;&#40;entry = r.nextEntry&#40;&#41;&#41;!= null && ok!=false&#41;&#123;//<----συνθήκη τερματισμού
    for &#40;int i = 0; i<=fCharList.length-1; ++i&#41;&#123;   
        sb.setCharAt&#40;pos, fCharList&#91;i&#93;&#41;;
        if &#40;pos == len - 1&#41;&#123;
        	if &#40;count==1000&#41;&#123;
                System.out.println&#40;"checked until&#58;"+sb.toString&#40;&#41;&#41;;
                count=0;
            &#125;
        	count++;
                if &#40;entry.isProbablyCorrectPassword&#40;sb.toString&#40;&#41;&#41;&#41;&#123;
                    foundWord = sb.toString&#40;&#41;;
                    System.out.println&#40;"possible password found&#58;"+foundWord&#41;;//<--πιθανά σωστό password
                    entry.setPassword&#40;foundWord&#41;;
                    InputStream in = entry.getInputStream&#40;&#41;;
                    long total_bytes=entry.getUncompressedLength&#40;&#41;;
                    try&#123;
                    	long a=0,aa=0;
                       while&#40;a!=-1&#41;&#123;
                       		int available=in.available&#40;&#41;;
                       		byte b&#91;&#93;=new byte&#91;available&#93;;
                       		a=in.read&#40;b&#41;;
                       		if &#40;a!=-1&#41; aa+=a;
                       &#125;
                       if &#40;aa==total_bytes&#41;&#123;
                       	System.out.println&#40;"<read bytes="+aa+">  ,<total uncompressed bytes="+total_bytes+">"&#41;;
                       		ok=false;//<--αυτό πρέπει να το ενεργοποιήσεις απλά στο άφησα έτσι για να τεστάρεις τα αποτελέσματα με όλα τα πιθανά passwords μέχρι το σωστό
                       		System.out.println&#40;"This is the password!!"&#41;;//<---ναι το βρήκα!!!
                       &#125;
                       in.close&#40;&#41;;
                    &#125;catch&#40;Exception ee&#41;  &#123;
                        ok=true;
                        //System.out.println&#40;"exception="+ee&#41;;
                        //System.out.println&#40;"This in not the password , try again"&#41;;//<--Δεν το βρήκα
                    &#125;
                &#125;else&#123;//<----για να δεις μόνο τα πιθανά passwords απενεργοποίησα το μήνυμα λάθους
                    //System.out.println&#40;"This in not the password , try again"&#41;;

                &#125;
        &#125;else&#123;
                ChangeCharacters&#40;pos + 1 , sb,len&#41;;
            &#125;
        &#125;     
&#125;
&#125;catch &#40;Exception e&#41;&#123;
System.out.println&#40;"Exception raised!"&#41;;
e.printStackTrace&#40;&#41;;
&#125;
 return sb;
  &#125;
    public static void Read&#40;&#41;&#123;
        try &#123;
    Brute&#40;&#41;;
    System.out.println&#40;"finally The password is&#58; " + foundWord&#41;;
        &#125;catch &#40;Exception e&#41;&#123;
System.out.println&#40;"Exception raised!"&#41;;
e.printStackTrace&#40;&#41;;
&#125;
    &#125;
    public static void main&#40;String&#91;&#93; args&#41; &#123;
        Read&#40;&#41;;
    &#125;
&#125; 

επεξήγηση αλλαγών

long total_bytes=entry.getUncompressedLength();//παίρνουμε το μέγεθος σε bytes του αρχείου σε αποσυμπιεσμένη μορφή
try{
long a=0,aa=0;//a=πόσα bytes διάβασε στην κλήση της read και aa τα συνολικά μέχρι τώρα
while(a!=-1){//'οσο διαβάζεις bytes από το αρχείο κάνε.....
int available=in.available();//πόσα bytes περιμένουν να διαβαστούν
byte b[]=new byte[available];//δημιουργία πίνακα bytes για διάβασμα από το αρχείο
a=in.read(b);//a=πόσα bytes διάβασε αυτή την φορά από το αρχείο
if (a!=-1) aa+=a;//όσο διαβάζει bytes με την κλήση της read ,στο aa κρατάω τα συνολικά bytes που διαβάστηκαν
}
if (aa==total_bytes){//αν έχει διαβάσει τα σωστά σε αριθμό bytes τότε το password ειναι το σωστό........

mortis1572
Δημοσιεύσεις: 33
Εγγραφή: 13 Ιουν 2010 20:44

Πρόβλημα με Brute Force

Δημοσίευση από mortis1572 » 14 Σεπ 2010 01:18

Πριν τεστάρω τον καινούριο κώδικα που μου έγραψες , κάνωντας κάποιες αλλαγές στον προηγούμενο είδα ότι λειτουργεί κανονικά.Μου έβγαλε το αποτέλεσμα για κωδικό με μέγεθος 7 χαρακτήρων και τώρα δοκιμάζω και για μέγεθος 8 χαρακτήρων.
Οι αλλαγές που έκανα είναι:
Πρώτα:

Κώδικας: Επιλογή όλων

try&#123;
                       int available=in.available&#40;&#41;;
                       byte b&#91;&#93;=new byte&#91;available+1&#93;;
                       while&#40;in.read&#40;b,0,available&#41;!=-1&#41;&#123;
                             available=in.available&#40;&#41;;
                             b=new byte&#91;available+1&#93;;
                             //int a=in.read&#40;b,0,available&#41;;//<--αν διαβάσει τότε είναι το σωστό password
                             //System.out.println&#40;"read="+a&#41;;
                       &#125;

Και αφού έκανα την αλλαγή:

Κώδικας: Επιλογή όλων

try&#123;
                       int available=in.read&#40;&#41;;
                       byte b&#91;&#93;=new byte&#91;available+1&#93;;
                       while&#40;in.read&#40;b,0,available&#41;!=-1&#41;&#123;
                             available=in.read&#40;&#41;;
                             b=new byte&#91;available+1&#93;;
                             //int a=in.read&#40;b,0,available&#41;;//<--αν διαβάσει τότε είναι το σωστό password
                             //System.out.println&#40;"read="+a&#41;;
                       &#125;
Αντί για

Κώδικας: Επιλογή όλων

in.available&#40;&#41;
έβαλα

Κώδικας: Επιλογή όλων

in.read&#40;&#41;
και μέχρι στιγμής δουλεύει κανονικά.
Ακόμα δούλεψε και όταν έκανα την εξής αλλαγή:

Κώδικας: Επιλογή όλων

try&#123;
                       int available=in.available&#40;&#41;;
                       byte b&#91;&#93;=new byte&#91;available+1&#93;;
                       while&#40;in.read&#40;b,0,available&#41;!=-1&#41;&#123;
                             available=in.available&#40;&#41;;
                             b=new byte&#91;available+1&#93;;
                             //int a=in.read&#40;b,0,available&#41;;//<--αν διαβάσει τότε είναι το σωστό password
                             //System.out.println&#40;"read="+a&#41;;
                       &#125;

Και αφού έκανα την αλλαγή:

Κώδικας: Επιλογή όλων

try&#123;
                       int available=in.available&#40;&#41;;
                       byte b&#91;&#93;=new byte&#91;available+1&#93;;
                       while&#40;in.read&#40;b,0,available&#41;!=-1&#41;&#123;
                             available=in.read&#40;&#41;;
                             b=new byte&#91;available+1&#93;;
                             //int a=in.read&#40;b,0,available&#41;;//<--αν διαβάσει τότε είναι το σωστό password
                             //System.out.println&#40;"read="+a&#41;;
                       &#125;
Αν κατάλαβα καλά υπάρχει μια διαφορά ανάμεσα στο read και το available.
Θα τρέξω και τον καινούριο κώδικα που μου είπες και θα σου πω αύριο τα αποτελέσματα.

mortis1572
Δημοσιεύσεις: 33
Εγγραφή: 13 Ιουν 2010 20:44

Πρόβλημα με Brute Force

Δημοσίευση από mortis1572 » 14 Σεπ 2010 21:58

Τον τέσταρα τον τελευταίο κώδικα που μου έστειλες χθες το βράδυ και δουλεύει κανονικά.Το έβαλα να ψάξει μέχρι και για 7 χαρκτήρες και το βρήκε κανονικά.
Δεν το έβαλα να ψάξει για 8 γιατί με τις αλλαγές που έκανα στον δικό σου προηγούμενο κώδικα έπαιξε κανονικά και μου πήρε γύρω στις 18 ώρες για να το βρει.
Ακριβώς από πάνω στο προηγούμενο post σου επισημάνω τις αλλαγές που έκανα στον προηγούμενο δικό σου κώδικα και δούλεψε κανονικά και για 7 και για 8 χαρακτήρες.
Από ότι κατάλαβα το πρόβλημα με τον αρχικό σου κώδικα ήταν με τις μεθόδους read και available.
Σχετικα με τους 2 κώδικες τον δικό σου τον χθεσινό και αυτόν με τις αλλαγές που έκανα εγώ ποιος μπορείς να πεις ότι είναι ο ποιος σωστός?
Ο κώδικας με τις αλλαγές:

Κώδικας: Επιλογή όλων

try&#123;
                       int available=in.read&#40;&#41;;
                       byte b&#91;&#93;=new byte&#91;available+1&#93;;
                       while&#40;in.read&#40;b,0,available&#41;!=-1&#41;&#123;
                             available=in.read&#40;&#41;;
                             b=new byte&#91;available+1&#93;;
                             //int a=in.read&#40;b,0,available&#41;;//<--αν διαβάσει τότε είναι το σωστό password
                            // System.out.println&#40;"read="+a&#41;;
                       &#125;
και ακόμη μια αλλαγή που έκανα και δούλεψε

Κώδικας: Επιλογή όλων

try&#123;
                       int available=in.available&#40;&#41;;
                       byte b&#91;&#93;=new byte&#91;available+1&#93;;
                       while&#40;in.read&#40;b,0,available&#41;!=-1&#41;&#123;
                             available=in.read&#40;&#41;;
                             b=new byte&#91;available+1&#93;;
                             //int a=in.read&#40;b,0,available&#41;;//<--αν διαβάσει τότε είναι το σωστό password
                            // System.out.println&#40;"read="+a&#41;;
                       &#125;
και ο δικό σου ο χθεσινός

Κώδικας: Επιλογή όλων

import java.io.*;
import java.*;
import com.javamex.arcmexer.*;
public class exmpl&#123;
  private static char fCharList&#91;&#93; = &#123;'0','1','2','3','4','5','6','7','8','9'&#125;;
  private static final int max_len = 8;
  private static String foundWord;
  private static boolean ok=true;
  private static String filename="C&#58;\\0123456.zip";//<---το δικό μου zip αρχείο
  private static int count=0;

  public static void Brute&#40;&#41;&#123;
       
        char currentChar = fCharList&#91;0&#93;;
        for &#40;int len=1;len<=max_len;len++&#41;&#123;
           StringBuffer sb = new StringBuffer&#40;len&#41;;
           System.out.println&#40;"\nsearching for "+len+" character password..."&#41;;
           for &#40;int i = 0; i <len; i++&#41;&#123;
               sb.append&#40;currentChar&#41;;
           &#125;
           ChangeCharacters&#40;0, sb,len&#41;;
           if &#40;ok==false&#41; break;
        &#125;
    &#125;
 
    public static StringBuffer ChangeCharacters&#40;int pos, StringBuffer sb,int len&#41;
  &#123;
       try &#123;
FileInputStream f = new FileInputStream&#40;filename&#41;;
ArchiveReader r = ArchiveReader.getReader&#40;f&#41;;
ArchiveEntry entry ;

while &#40;&#40;entry = r.nextEntry&#40;&#41;&#41;!= null && ok!=false&#41;&#123;//<----συνθήκη τερματισμού
    for &#40;int i = 0; i<=fCharList.length-1; ++i&#41;&#123;   
        sb.setCharAt&#40;pos, fCharList&#91;i&#93;&#41;;
        if &#40;pos == len - 1&#41;&#123;
           if &#40;count==1000&#41;&#123;
                System.out.println&#40;"checked until&#58;"+sb.toString&#40;&#41;&#41;;
                count=0;
            &#125;
           count++;
                if &#40;entry.isProbablyCorrectPassword&#40;sb.toString&#40;&#41;&#41;&#41;&#123;
                    foundWord = sb.toString&#40;&#41;;
                    System.out.println&#40;"possible password found&#58;"+foundWord&#41;;//<--πιθανά σωστό password
                    entry.setPassword&#40;foundWord&#41;;
                    InputStream in = entry.getInputStream&#40;&#41;;
                    long total_bytes=entry.getUncompressedLength&#40;&#41;;
                    try&#123;
                       long a=0,aa=0;
                       while&#40;a!=-1&#41;&#123;
                             int available=in.available&#40;&#41;;
                             byte b&#91;&#93;=new byte&#91;available&#93;;
                             a=in.read&#40;b&#41;;
                             if &#40;a!=-1&#41; aa+=a;
                       &#125;
                       if &#40;aa==total_bytes&#41;&#123;
                          System.out.println&#40;"<read bytes="+aa+">  ,<total uncompressed bytes="+total_bytes+">"&#41;;
                             ok=false;//<--αυτό πρέπει να το ενεργοποιήσεις απλά στο άφησα έτσι για να τεστάρεις τα αποτελέσματα με όλα τα πιθανά passwords μέχρι το σωστό
                             System.out.println&#40;"This is the password!!"&#41;;//<---ναι το βρήκα!!!
                       &#125;
                       in.close&#40;&#41;;
                    &#125;catch&#40;Exception ee&#41;  &#123;
                        ok=true;
                        //System.out.println&#40;"exception="+ee&#41;;
                        //System.out.println&#40;"This in not the password , try again"&#41;;//<--Δεν το βρήκα
                    &#125;
                &#125;else&#123;//<----για να δεις μόνο τα πιθανά passwords απενεργοποίησα το μήνυμα λάθους
                    //System.out.println&#40;"This in not the password , try again"&#41;;

                &#125;
        &#125;else&#123;
                ChangeCharacters&#40;pos + 1 , sb,len&#41;;
            &#125;
        &#125;     
&#125;
&#125;catch &#40;Exception e&#41;&#123;
System.out.println&#40;"Exception raised!"&#41;;
e.printStackTrace&#40;&#41;;
&#125;
 return sb;
  &#125;
    public static void Read&#40;&#41;&#123;
        try &#123;
    Brute&#40;&#41;;
    System.out.println&#40;"finally The password is&#58; " + foundWord&#41;;
        &#125;catch &#40;Exception e&#41;&#123;
System.out.println&#40;"Exception raised!"&#41;;
e.printStackTrace&#40;&#41;;
&#125;
    &#125;
    public static void main&#40;String&#91;&#93; args&#41; &#123;
        Read&#40;&#41;;
    &#125;
&#125;

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Πρόβλημα με Brute Force

Δημοσίευση από virxen75 » 15 Σεπ 2010 00:22

o xθεσινός με διαφορά.

mortis1572
Δημοσιεύσεις: 33
Εγγραφή: 13 Ιουν 2010 20:44

Πρόβλημα με Brute Force

Δημοσίευση από mortis1572 » 16 Σεπ 2010 00:49

Τελικά δοκίμασα τον χθεσινό δικό σου κώδικα και για 8 χαρακτήρες και τον βρήκε χωρίς κανένα πρόβλημα.
'Ηθελα να σε ρωτήσω αν μπορώ τον ίδιο κώδικα να τον χρησιμοποιήσω κάνοντας κάποιες αλλαγές και για την dictionary attack.
Γιατί και εκεί μου δημιουργήθηκε το ίδιο πρόβλημα που είχα με την brute force.
'Οταν μεγάλωσα το αρχείο txt με όλα τα πιθανα password που θα διαβάζει άρχισε να μου βγάζει άλλον κωδικό για σωστό αντί για αυτόν που έπρεπε.
Μήπως έχεις να μου προτείνεις κανένα e-book για gui γιατί πρέπει και τους 2 κώδικες να τους βάλω σε ένα gui.

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Πρόβλημα με Brute Force

Δημοσίευση από virxen75 » 16 Σεπ 2010 01:59

ναι μπορείς η μετατροπή είναι απλή.

GUI:αν σου επιτρέπεται κάντο με το netbeans να τελειώνεις.

αλλιώς π.χ. αυτό
www.wikihow.com/Create-a-Swing-GUI-in-Java

με το google θα βρεις άπειρα tutorials.

αν ζοριστείς κάπου πες μου να σε βοηθήσω.

mortis1572
Δημοσιεύσεις: 33
Εγγραφή: 13 Ιουν 2010 20:44

Πρόβλημα με Brute Force

Δημοσίευση από mortis1572 » 17 Σεπ 2010 02:09

Δοκίμασα και έκανα τη μετατροπή αλλά και πάλι το ίδιο λάθος με την brute.
Παρακάτω είναι ο κώδικας που μετέτρεψα:

Κώδικας: Επιλογή όλων

import java.io.*;
import java.*;
import com.javamex.arcmexer.*;
public class Decrypt1&#123;
    private static String line;
private static String inputLine;
//private static String foundWord;
private static boolean ok=true;
public static void Dictionary&#40;&#41;&#123;
    try &#123;
System.out.println&#40;"Give the path of the file"&#41;;
BufferedReader flnm = new BufferedReader&#40;new InputStreamReader&#40;System.in&#41;&#41;;
inputLine = flnm.readLine&#40;&#41;;
System.out.println&#40;"What is the password of " + inputLine + " ? "&#41;;
System.out.println&#40;"Working..."&#41;;
    findWord&#40;&#41;;
    System.out.println&#40;"The password is&#58; " + line&#41;;
    &#125;catch &#40;Exception e&#41;&#123;
System.out.println&#40;"Exception raised!"&#41;;
e.printStackTrace&#40;&#41;;
&#125;
  &#125;
public static void findWord&#40;&#41;&#123;
    try&#123;
FileInputStream f = new FileInputStream&#40;inputLine&#41;;
ArchiveReader r = ArchiveReader.getReader&#40;f&#41;;
ArchiveEntry entry = r.nextEntry&#40;&#41;;
FileReader fr = new FileReader&#40;"C&#58;//length08.txt"&#41;;
BufferedReader br = new BufferedReader&#40;fr&#41;;
while &#40;/*&#40;entry = r.nextEntry&#40;&#41;&#41;!= null &&*/ &#40;line = br.readLine&#40;&#41;&#41;!= null&#41;&#123;
    //while&#40;&#40;line = br.readLine&#40;&#41;&#41; !=null&#41;&#123;
            System.out.println&#40;line&#41;;
    if &#40;entry.isProbablyCorrectPassword&#40;line&#41;&#41;&#123;
        //foundWord = line;
                    System.out.println&#40;"possible password found&#58;"+line&#41;;//<--πιθανά σωστό password
                    entry.setPassword&#40;line&#41;;
                    InputStream in = entry.getInputStream&#40;&#41;;
                    long total_bytes=entry.getUncompressedLength&#40;&#41;;
                    try&#123;
                       long a=0,aa=0;
                       while&#40;a!=-1&#41;&#123;
                             int available=in.available&#40;&#41;;
                             byte b&#91;&#93;=new byte&#91;available&#93;;
                             a=in.read&#40;b&#41;;
                             if &#40;a!=-1&#41; aa+=a;
                       &#125;
                       if &#40;aa==total_bytes&#41;&#123;
                          System.out.println&#40;"<read bytes="+aa+">  ,<total uncompressed bytes="+total_bytes+">"&#41;;
                             ok=false;//<--αυτό πρέπει να το ενεργοποιήσεις απλά στο άφησα έτσι για να τεστάρεις τα αποτελέσματα με όλα τα πιθανά passwords μέχρι το σωστό
                             System.out.println&#40;"This is the password!!"&#41;;//<---ναι το βρήκα!!!
                       &#125;
                       in.close&#40;&#41;;
                    &#125;catch&#40;Exception ee&#41;  &#123;
                        ok=true;
                        System.out.println&#40;"This in not the password , try again"&#41;;//<--Δεν το βρήκα
                    &#125;
    break;                
    &#125;else&#123;//<----για να δεις μόνο τα πιθανά passwords απενεργοποίησα το μήνυμα λάθους
                    //System.out.println&#40;"This in not the password , try again"&#41;;
                &#125;
    //&#125;
    &#125;
&#125;catch &#40;Exception e&#41;&#123;
System.out.println&#40;"Exception raised!"&#41;;
e.printStackTrace&#40;&#41;;
&#125;
&#125;
public static void main&#40;String&#91;&#93; args&#41; &#123;
    Dictionary&#40;&#41;;
&#125;
&#125;

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Πρόβλημα με Brute Force

Δημοσίευση από virxen75 » 17 Σεπ 2010 02:27

χωρίς να το τσεκάρω η μετατροπή είναι αυτή

Κώδικας: Επιλογή όλων

import java.io.*;
import java.*;
import com.javamex.arcmexer.*;
public class New3&#123;
  //private static char fCharList&#91;&#93; = &#123;'1','2','3','4','5','6','7','8','9'&#125;;
  //private static final int max_len = 8;
  private static String foundWord;
  private static boolean ok=true;
  private static String filename="C&#58;\\12.zip";//<---το δικό μου zip αρχείο
  private static int count=0;

  public static void Brute&#40;&#41;&#123;
        
        //char currentChar = fCharList&#91;0&#93;;
        //for &#40;int len=8;len<=max_len;len++&#41;&#123;
        	//StringBuffer sb = new StringBuffer&#40;len&#41;;
        	//System.out.println&#40;"\nsearching for "+len+" character password..."&#41;;
        //	for &#40;int i = 0; i <len; i++&#41;&#123;
         //   	sb.append&#40;currentChar&#41;;
        //	&#125;
        //	ChangeCharacters&#40;0, sb,len&#41;;
        //	if &#40;ok==false&#41; break;
        //&#125;
   // &#125;
 
 //   public static StringBuffer ChangeCharacters&#40;int pos, StringBuffer sb,int len&#41;
 // &#123;
       try &#123;
FileInputStream f = new FileInputStream&#40;filename&#41;;
ArchiveReader r = ArchiveReader.getReader&#40;f&#41;;
ArchiveEntry entry ;
FileReader fr = new FileReader&#40;"C&#58;//length08.txt"&#41;;
BufferedReader br = new BufferedReader&#40;fr&#41;; 

while &#40;&#40;entry = r.nextEntry&#40;&#41;&#41;!= null && ok!=false&#41;&#123;//<----συνθήκη τερματισμού
    //for &#40;int i = 0; i<=fCharList.length-1; ++i&#41;&#123;   
        //sb.setCharAt&#40;pos, fCharList&#91;i&#93;&#41;;
        //if &#40;pos == len - 1&#41;&#123;
        	while &#40;&#40;foundWord = br.readLine&#40;&#41;&#41;!= null&#41;&#123; 
        	if &#40;count==1000&#41;&#123;
                System.out.println&#40;"checked until&#58;"+foundWord&#41;;
                count=0;
            &#125;
        	count++;
                if &#40;entry.isProbablyCorrectPassword&#40;foundWord&#41;&#41;&#123;
                    //foundWord = sb.toString&#40;&#41;;
                    System.out.println&#40;"possible password found&#58;"+foundWord&#41;;//<--πιθανά σωστό password
                    entry.setPassword&#40;foundWord&#41;;
                    InputStream in = entry.getInputStream&#40;&#41;;
                    long total_bytes=entry.getUncompressedLength&#40;&#41;;
                    try&#123;
                    	long a=0,aa=0;
                       while&#40;a!=-1&#41;&#123;
                       		int available=in.available&#40;&#41;;
                       		byte b&#91;&#93;=new byte&#91;available&#93;;
                       		a=in.read&#40;b&#41;;
                       		if &#40;a!=-1&#41; aa+=a;
                       &#125;
                       if &#40;aa==total_bytes&#41;&#123;
                       	System.out.println&#40;"<read bytes="+aa+">  ,<total uncompressed bytes="+total_bytes+">"&#41;;
                       		ok=false;//<--αυτό πρέπει να το ενεργοποιήσεις απλά στο άφησα έτσι για να τεστάρεις τα αποτελέσματα με όλα τα πιθανά passwords μέχρι το σωστό
                       		System.out.println&#40;"This is the password!!"&#41;;//<---ναι το βρήκα!!!
                       &#125;
                       in.close&#40;&#41;;
                    &#125;catch&#40;Exception ee&#41;  &#123;
                        ok=true;
                        //System.out.println&#40;"exception="+ee&#41;;
                        //System.out.println&#40;"This in not the password , try again"&#41;;//<--Δεν το βρήκα
                    &#125;
                &#125;else&#123;//<----για να δεις μόνο τα πιθανά passwords απενεργοποίησα το μήνυμα λάθους
                    //System.out.println&#40;"This in not the password , try again"&#41;;

                &#125;
        //&#125;//else&#123;
             //   ChangeCharacters&#40;pos + 1 , sb,len&#41;;
            //&#125;
        &#125;     
&#125;
&#125;catch &#40;Exception e&#41;&#123;
	System.out.println&#40;"Exception raised!"&#41;;
	e.printStackTrace&#40;&#41;;
&#125;
 //return sb;
  &#125;
    public static void Read&#40;&#41;&#123;
        try &#123;
    Brute&#40;&#41;;
    System.out.println&#40;"finally The password is&#58; " + foundWord&#41;;
        &#125;catch &#40;Exception e&#41;&#123;
System.out.println&#40;"Exception raised!"&#41;;
e.printStackTrace&#40;&#41;;
&#125;
    &#125;
    public static void main&#40;String&#91;&#93; args&#41; &#123;
        Read&#40;&#41;;
    &#125;
&#125; 
αλλιώς στείλε το txt και το zip να το δω

mortis1572
Δημοσιεύσεις: 33
Εγγραφή: 13 Ιουν 2010 20:44

Πρόβλημα με Brute Force

Δημοσίευση από mortis1572 » 17 Σεπ 2010 21:07

Τον τρέχω τον κώδικα που μου έδωσες αλλά βγάζει exception στο σημείο:

Κώδικας: Επιλογή όλων

InputStream in = entry.getInputStream&#40;&#41;; 
Το zip και τα txt είναι αυτά.
Συνημμένα
test2.txt
(637.33 KiB) Μεταφορτώθηκε 26443 φορές
test1.txt
(676.61 KiB) Μεταφορτώθηκε 60652 φορές
readzip.zip
(464 Ψηφιολέξεις) Μεταφορτώθηκε 243 φορές

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Πρόβλημα με Brute Force

Δημοσίευση από virxen75 » 18 Σεπ 2010 00:35

πριν το κοιτάξω μία ερώτηση ερώτηση.
άλλαξες το όνομα αρχείου από 12.zip να βάλεις το όνομα του δικού σου?

mortis1572
Δημοσιεύσεις: 33
Εγγραφή: 13 Ιουν 2010 20:44

Πρόβλημα με Brute Force

Δημοσίευση από mortis1572 » 18 Σεπ 2010 15:00

Ναι εννοείται ότι το άλλαξα.

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Πρόβλημα με Brute Force

Δημοσίευση από virxen75 » 19 Σεπ 2010 02:00

το μόνο που μου δούλεψε είναι αυτό.

Κώδικας: Επιλογή όλων

import java.io.*;
import java.*;
import com.javamex.arcmexer.*;
public class New3&#123;
  private static String foundWord;
  private static boolean ok=true;
  private static String filename="C&#58;\\readzip.zip";//<---το δικό μου zip αρχείο
  private static int count=0;

  public static void Brute&#40;&#41;&#123;
 	ArchiveEntry entry=null;//τα ορίζω πιο μπροστά από το try για να τα ελέγχω καλύτερα
    InputStream in=null;
    String temp=null;
	FileInputStream f = null;
	ArchiveReader r = null;
    try &#123;
		f = new FileInputStream&#40;filename&#41;;
		r = ArchiveReader.getReader&#40;f&#41;;
		FileReader fr = new FileReader&#40;"test2.txt"&#41;;
		BufferedReader br = new BufferedReader&#40;fr&#41;;
		while &#40;&#40;entry = r.nextEntry&#40;&#41;&#41;!= null && ok!=false&#41;&#123;//<----συνθήκη τερματισμού
			System.out.println&#40;"started!!!"+entry.getFilename&#40;&#41;&#41;;        //sb.setCharAt&#40;pos, fCharList&#91;i&#93;&#41;;
           	while &#40;&#40;foundWord = br.readLine&#40;&#41;&#41;!= null&#41;&#123;
           		temp=foundWord;
           		if &#40;count==1000&#41;&#123;
                		System.out.println&#40;"checked until&#58;"+foundWord&#41;;
                		count=0;
            	&#125;
           		count++;
                if &#40;entry.isProbablyCorrectPassword&#40;foundWord&#41;&#41;&#123;
	                System.out.println&#40;"possible password found&#58;"+foundWord&#41;;//<--πιθανά σωστό password
                   	entry.setPassword&#40;foundWord&#41;;
                    try&#123;//εδώ οι αλλαγές
                    	in = entry.getInputStream&#40;&#41;;
                    &#125;catch&#40;java.io.EOFException ee&#41;&#123;
						f = new FileInputStream&#40;filename&#41;;
						r = ArchiveReader.getReader&#40;f&#41;;
						entry = r.nextEntry&#40;&#41;;
                    	entry.setPassword&#40;foundWord&#41;;
                    	in = entry.getInputStream&#40;&#41;;
                    &#125;//μέχρι εδώ
                    long total_bytes=entry.getUncompressedLength&#40;&#41;;
                    try&#123;
                       	long a=0,aa=0;
                       	while&#40;a!=-1&#41;&#123;
                           	 int available=in.available&#40;&#41;;
                             byte b&#91;&#93;=new byte&#91;available&#93;;
                             a=in.read&#40;b&#41;;
                             if &#40;a!=-1&#41; aa+=a;
                       	&#125;
                       	if &#40;aa==total_bytes&#41;&#123;
                          	//System.out.println&#40;"<read bytes="+aa+">  ,<total uncompressed bytes="+total_bytes+">"&#41;;
                             ok=false;//<--αυτό πρέπει να το ενεργοποιήσεις απλά στο άφησα έτσι για να τεστάρεις τα αποτελέσματα με όλα τα πιθανά passwords μέχρι το σωστό
                             System.out.println&#40;"This is the password!!"&#41;;//<---ναι το βρήκα!!!
                       	&#125;
                       	in.close&#40;&#41;;
                    &#125;catch&#40;java.util.zip.ZipException ee&#41;  &#123;
                        ok=true;
                        System.out.println&#40;"this is not the password!"&#41;;
                    &#125;
                &#125;	
        &#125;     
&#125;
&#125;catch &#40;Exception e&#41;&#123;
   System.out.println&#40;"Exception raised!"&#41;;
   e.printStackTrace&#40;&#41;;
&#125;
  &#125;
    public static void Read&#40;&#41;&#123;
        try &#123;
    Brute&#40;&#41;;
    System.out.println&#40;"finally The password is&#58; " + foundWord&#41;;
        &#125;catch &#40;Exception e&#41;&#123;
System.out.println&#40;"Exception raised!"&#41;;
e.printStackTrace&#40;&#41;;
&#125;
    &#125;
    public static void main&#40;String&#91;&#93; args&#41; &#123;
        Read&#40;&#41;;
    &#125;
&#125; 

mortis1572
Δημοσιεύσεις: 33
Εγγραφή: 13 Ιουν 2010 20:44

Πρόβλημα με Brute Force

Δημοσίευση από mortis1572 » 20 Σεπ 2010 14:15

Στη συγκεκριμένη περίπτωση όπου το temp παίρνει μια τιμή

Κώδικας: Επιλογή όλων

temp=foundWord;
αλλά δεν βλέπω μετά να εμφανίζεται αλλού.Υπάρχει κάποιος λόγος που το foundWord δίνει την τιμή στο temp?

Και σε ένα πιο παλιό post ήθελα να σε ρωτήσω κάτι.
if (ChoiceS.charAt(j)=='1' && !numbersCompleted){
for (int i=0;i<numbers.length;i++)
temp[current++]=numbers;
numbersCompleted=true;
}else if (ChoiceS.charAt(j)=='A' && !upperCompleted){
for (int i=0;i<upper.length;i++)
temp[current++]=upper;
upperCompleted=true;
}else if (ChoiceS.charAt(j)=='a' && !lowerCompleted){
for (int i=0;i<lower.length;i++)
temp[current++]=lower;
lowerCompleted=true;
}

Το
numbersCompleted
,
upperCompleted
,
lowerCompleted
τη ακριβώς κάνει,
Γιατί δεν το κατάλαβα.'Οταν αφαίρεσα εντελώς τις συγκεκριμένες λογικες μεταβλητές πάλι έπαιρνα τα ίδια αποτελέσματα χωρίς κάποιο σφάλμα.
Μπορείς να μου το διευκρινίσεις?

Άβαταρ μέλους
virxen75
Δημοσιεύσεις: 493
Εγγραφή: 18 Φεβ 2009 00:17
Τοποθεσία: ΗΡΑΚΛΕΙΟ ΚΡΗΤΗΣ

Πρόβλημα με Brute Force

Δημοσίευση από virxen75 » 21 Σεπ 2010 01:41

mortis1572 έγραψε:Στη συγκεκριμένη περίπτωση όπου το temp παίρνει μια τιμή

Κώδικας: Επιλογή όλων

temp=foundWord;
αλλά δεν βλέπω μετά να εμφανίζεται αλλού.Υπάρχει κάποιος λόγος που το foundWord δίνει την τιμή στο temp?
δεν προσέχεις καθόλου τον κώδικα μου φαίνεται.Γιατί?Δες παρακάτω.

Κώδικας: Επιλογή όλων

..........
while &#40;&#40;foundWord = br.readLine&#40;&#41;&#41;!= null&#41;&#123;
                 temp=foundWord; 
........
ΕΡ: πότε τερματίζει η while?
ΑΠ: όταν foundWord=null.

ΕΡ: άρα εδώ τι θα πάρεις?

Κώδικας: Επιλογή όλων

Brute&#40;&#41;;
    System.out.println&#40;"finally The password is&#58; " + foundWord&#41;;
ΑΠ: null φυσικά!

ΕΡ: ποια η χρήση του temp=foundWord?
ΑΠ: κρατάει την τελευταία μη null τιμή του foundWord,το password δηλαδή.

Απάντηση

Επιστροφή στο “Java”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες