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

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

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

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

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

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

για αρχή κατέβασε το netbeans 6.9.1 και εγκατέστησε το για να έχουμε
την ίδια έκδοση

για το browse
=============
πρόσθεσε την πιο κάτω κλάση στο project που έχεις στο netbeans

(δεξί κλικ στο όνομα του project add new java class)

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

import java.io.File;
public class ZipFilter extends javax.swing.filechooser.FileFilter{

  public boolean accept(File f)  {

    if (f.isDirectory())
      return true;
    String extension = getExtension(f);
    if (extension.equalsIgnoreCase("zip") || extension.equalsIgnoreCase("rar") || extension.equalsIgnoreCase("7z"))
       return true;
    return false;
  }

  public String getDescription()
  {
      return "Zipped files";
  }

  private String getExtension(File f)
  {
    String s = f.getName();
    int i = s.lastIndexOf('.');
    if &#40;i > 0 &&  i < s.length&#40;&#41; - 1&#41;
      return s.substring&#40;i+1&#41;.toLowerCase&#40;&#41;;
    return "";
  &#125;
&#125;
έπειτα διπλό κλικ στο button browse

και πρόσθεσε τα πιο κάτω

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

    private void jButton1ActionPerformed&#40;java.awt.event.ActionEvent evt&#41; &#123;
        // TODO add your handling code here&#58;
        JFileChooser fc=new JFileChooser&#40;&#41;;
        fc.setFileFilter&#40;new ZipFilter&#40;&#41;&#41;;
        int returnVal =fc.showOpenDialog&#40;this&#41;;
        if &#40;returnVal==JFileChooser.APPROVE_OPTION&#41; jTextField1.setText&#40;fc.getSelectedFile&#40;&#41;.getName&#40;&#41;&#41;;

    &#125;
όπου jTextField1 το text field που κρατάει το όνομα του αρχείου
και jButton1 το κουμπί browse

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

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

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

Το έκανα και έπαιξε κανονικά , χωρίς πρόβλημα.

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

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

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

ωραία πάμε παρακάτω

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

    private void jButton2ActionPerformed&#40;java.awt.event.ActionEvent evt&#41; &#123;
        // TODO add your handling code here&#58;
        System.out.println&#40;"you pressed start"&#41;;
        System.out.println&#40;"you selected the file with name="+jTextField1.getText&#40;&#41;&#41;;
        System.out.println&#40;"you selected attack mode="+jComboBox1.getSelectedItem&#40;&#41;&#41;;
        System.out.println&#40;"selected numbers?="+jCheckBox1.isSelected&#40;&#41;&#41;;
        System.out.println&#40;"selected lower letters?="+jCheckBox2.isSelected&#40;&#41;&#41;;
        System.out.println&#40;"selected capital letters?="+jCheckBox3.isSelected&#40;&#41;&#41;;
    &#125;
jButton2---->start button

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

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

Δημοσίευση από mortis1572 » 01 Οκτ 2010 01:37

OK , και αυτό το έκανα

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

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

Δημοσίευση από virxen75 » 01 Οκτ 2010 02:13

Θα φτιάξεις μία κλάση η οποία θα ψάχνει το password
αλλά ο constructor της θα δέχεται τις παραπάνω παραμέτρους
και θα επιστρέφει το αποτέλεσμα(password) αν βρήκε.

jComboBox1.getSelectedIndex());
σου επιστρέφει την θέση της επιλεγμένης τιμής του combo box , αρχίζοντας από το 0 για την πρώτη επιλογή.
αυτό το περνάς σαν παράμετρο παρακάτω.


p.x.
public ZipPasswordChecker(int attackMode,String filename,boolean numbers,boolean lower,boolean capitals){
....
if (attakMode==0){
//brute force
}else{
//dictionary
}

φτιάξε το σε αυτήν την μορφή και στείλε το για διορθώσεις

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

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

Δημοσίευση από mortis1572 » 02 Οκτ 2010 00:43

Θα φτιάξω μια κλάση που ονομάζεται ZipPasswordChecker και μετά θα φτιάξω τον constructor της αρχικής κλάσης με τα συγκεκριμένα ορίσματα.Πρέπει να προσθέσω κάποιο άλλο όρισμα?
'Οπως μου λες για το jComboBox1.getSelectedIndex()?
Η με αυτό θα πάρω από το ComboBox έναν ακέραιο ανάλογα με την επιλογή που θα έχει κάνει ο χρήστης και θα λέει ότι είναι η πρώτη ή η δεύτερη επιλογή?Και αυτόν τον ακέραιο που θα πάρω μπορώ να τον χρησιμοποιήσω για να αρχικοποιήσω την μεταβλητή attackMode?
π.χ
int attackMode = jComboBox1.getSelectedIndex();
Επιπλέον δεν πρέπει να αρχικοποιήσω όλες τις μεταβλητές από τον constructor?
'Οπως τις λογικές μεταβλητές να τις ορίσω ως false?
π.χ
numbers=lower=capitals=false
Και για το filename μπορώ να χρησιμοποιήσω την κλάση που είχαμε κάνει για το κουμπί browse για να πάρει από εκεί το αρχείο?
Από την προηγούμενη κλάση που είχαμε κάνει για την brute force και την dictionary attack μπορώ να χρησιμοποιήσω κάποιο μέρος τους ή επειδή τώρα τα δεδομένα(τη είδους επίθεση και αν θα χρησιμοποιήσω αριθμούς ή γράμματα) θα τα πάρω από το gui δεν γίνεται.
Μέσα στον constructor θα διαλέγει αν τρέξει την brute force ή την dictionary attack ή χρειάζεται να δημιουργήσω κάποια άλλη συνάρτηση εκτός constructor?

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

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

Δημοσίευση από virxen75 » 02 Οκτ 2010 00:53

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

public static void Brute(){
ότι έχω σε BOLD πρέπει να περαστεί σαν παράμετρος του constructor.

ή να δημιουργηθεί από την κλάση αυτή π.χ. numbers=true --->fCharList[]={'0','1','2','3','4','5','6','7','8','9'} αν και lower letters=true --->fCharList[]={'0','1','2','3','4','5','6','7','8','9','a',...,'z'}


επίσης τα numbers,lower letter,capital letters δεν έχουν νόημα στην χρήση λεξικού.
Άρα αν το επιλέξει ο χρήστης από το GUI σαν μέθοδο πρέπει να γίνονται τα
αντίστοιχα JCheckbox setEnabled(false);
και εφόσον επιλέγεις λεξικό κάπου πρέπει ο χρήστης με browse να το βρίσκει σωστά?

σου στέλνω αυτό που έχω φτιάξει στο Netbeans με βάση τα παραπάνω σχόλια
Συνημμένα
GuiZip.rar
(24.07 KiB) Μεταφορτώθηκε 233 φορές

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

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

Δημοσίευση από mortis1572 » 05 Οκτ 2010 14:44

Δεν ξέρω αν έλαβες το χθεσινό mail που σου έστειλα αλλά αν δεν το έλαβες στο ξαναστέλνω.
'Ετσι έκανα την Brute Force:

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

import java.io.*;
import java.*;
import com.javamex.arcmexer.*;

public class BFAttack&#123;
  private  char numbers&#91;&#93; = &#123;'0','1','2','3','4','5','6','7','8','9'&#125;;
  private  char lower&#91;&#93; = &#123;'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
                                  'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
                                  'u', 'v', 'w', 'x', 'y', 'z'&#125;;
  private  char upper&#91;&#93; = &#123;'A', 'B', 'C', 'D','E', 'F', 'G', 'H', 'I', 'J', 'K', 
                                 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 
                                  'W', 'X','Y', 'Z'&#125;; 
  private  int max_len = 8;//το μέγιστο μέγεθος του κωδικού που προσπαθεί να βρει
  private  String foundWord=null;
  private  boolean ok=true;
  private  String filename;
  private  int count=0;
  private  int current=0;
  private  char temp&#91;&#93; = new char&#91;62&#93;;
  private  boolean upperCompleted=false;
  private  boolean lowerCompleted=false;
  private  boolean numbersCompleted=false;
  
  public BFAttack&#40;String zipFilename , int length , char numberArray&#91;&#93; , char lowerArray&#91;&#93; , char upperArray&#91;&#93;&#41;&#123;
      filename = zipFilename;
      max_len = length;
      numbers = numberArray;
      lower = lowerArray;
      upper = upperArray;
  &#125;
  
  public String Brute_Force&#40;&#41;&#123;    
    /*παιρνει τιςς τιμές που έχει δώσεο ο χρήστης αν είναι για αριμθούς κεφαλάια ή μικρά γράμαμτα*/
/*αν ο χρήστης δώσει 1 παίρνει μόνο τους αριθμούς αν δώσεις a μόνο μικρά και αν γίνει συνδυασμός όπως 1a το σθνδυασμό
 επιπλέον με την χρήση της λογικής μεταβλητής αποφεύγω και τις διπλοεγγραφές αν οχρήστης δώσει καταλάθος 11*/
    try&#123;
      if &#40;!numbersCompleted&#41;&#123;
      for &#40;int i=0;i<numbers.length;i++&#41;
         temp&#91;current++&#93;=numbers&#91;i&#93;;
      numbersCompleted=true;
   &#125;else if &#40;!upperCompleted&#41;&#123;
      for &#40;int i=0;i<upper.length;i++&#41;   
         temp&#91;current++&#93;=upper&#91;i&#93;;
      upperCompleted=true;
   &#125;else if &#40;!lowerCompleted&#41;&#123;
      for &#40;int i=0;i<lower.length;i++&#41;   
         temp&#91;current++&#93;=lower&#91;i&#93;;
      lowerCompleted=true;
   &#125;
System.out.println&#40;"your choice is&#58;"&#41;;
for &#40;int j=0;j<current;j++&#41;&#123;//οι επιλογές του χρήστη αποθηκεύονται στον πίνακα temp
   System.out.print&#40;temp&#91;j&#93;+","&#41;;
&#125;
        char currentChar = temp&#91;0&#93;;//η μεταβλητή currentChar παίρνει το πρώτο στοιχείο από τον πίνακα temp
        for &#40;int len=1;len<=max_len;len++&#41;&#123;//με ένα for δίνω διαδοχικά τις τιμές από 1 έως max_len στην μεταβλητή len
           StringBuffer sb = new StringBuffer&#40;len&#41;;//η συμβολοσειρά sb πόσο μέγεθος θα έχει
           System.out.println&#40;"\nsearching for "+len+" character password..."&#41;;
           for &#40;int i = 0; i <len; i++&#41;&#123;//προσθήκη των χαρακτήρων από την currentChar στην sb
               sb.append&#40;currentChar&#41;;
           &#125;
           ChangeCharacters&#40;0, sb,len&#41;;
           if &#40;ok==false&#41; break;//αν βρω το σωστό δεν έχει νόημα να συνεχίσω να ψάχνω τα υπόλοιπα
        &#125;
    &#125;catch &#40;Exception e&#41;&#123;
     System.out.println&#40;"Exception raised!"&#41;;
     System.out.println&#40;e.toString&#40;&#41;&#41;;  
    &#125;
    return foundWord; 
  &#125;
   public 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<=current-1; ++i&#41;&#123;//δίνει διαδοχικά τον αριθμό των χαρακτήρων που έχει αποθηκευθεί στη current   
        sb.setCharAt&#40;pos, temp&#91;i&#93;&#41;;//αποθηκεύει τα στοιχεία του temp στη θέση pos
        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;;
                    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 !!" + foundWord&#41;;
                       &#125;
                       in.close&#40;&#41;;
                    &#125;catch&#40;Exception ee&#41;  &#123;
                        ok=true;
                    &#125;
                &#125;else&#123;
              &#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;
&#125;

Απάντηση

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

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

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