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

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

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

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

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

Δημοσίευση από mortis1572 » 13 Ιουν 2010 21:06

Καλησπέρα ,
Το πρόγραμμα που θέλω να κάνω έχει ως σκοπό να παίρνει ένα αρχείο σε zip μορφή με κρυπτογράφηση AES και να βρίσκει τον κωδικό είτε με brute force είτε με επίθεση λεξικού.
Τον κώδικα για την επίθεση λεξικού τον έχω κάνει αλλά για την brute force έχω κάποιο πρόβλημα.
Το πρόβλημα μου είναι το εξής:Το πρόγραμμα που έχω γράψει εμφάνιζει όλους τους πιθανούς κωδικούς αλλά όταν βρίσκει αυτόν που θέλω δεν σταματάει. Συνεχίζει και σταματάει μόνο όταν εμφανίσει και τον τελευταίο πιθανό κωδικό.Επιπλέον το έχω κάνει να εμφανίζει κάτω από κάθε κωδικό και αν είναι σωστό το password ή όχι. 'Οταν βρίσκει το password αντί να δείξει τον κωδικό και την πρόταση "This is the password" , εμφανίζει μόνο την πρόταση και όχι τον κωδικό.
Παρακάτω σας δείχνω πως φαίνεται το αποτέλεσμα και το πρόγραμμα που έχω γράψει.
Αν υποθέσουμε ότι to password που ψάχνω είναι το "12345678" παίρνω ως αποτελέσμα:

This in not the password , try again
12345676
This in not the password , try again
12345677
This is the password (παραλέιπεται το 12345678 και δεν σταματάει το πρόγραμμα εδώ όπως θα έπρεπε.)
This in not the password , try again
12345681
Και σταματάει μόλις ο κωδικός γίνει 88888888 (αν υποθέσουμε ότι έχω ένα πίνακα με 8 στοιχεία απο το 1 έως το 8).

Και το πρόγραμμα:

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

import java.io.*;
import java.*;
import com.javamex.arcmexer.*;
public class Geo{
  private static char fCharList[] = {'1','2','3','4','5','6','7','8'};
  private static final int len = 8;
  private static boolean stop;
  private static String foundWord;
  
  public static void Brute() 
    {
        StringBuffer sb = new StringBuffer(len);
        char currentChar = fCharList[0];
        for &#40;int i = 0; i < len; i++&#41;
        &#123;
            sb.append&#40;currentChar&#41;;
        &#125;
 
        ChangeCharacters&#40;0, sb&#41;;
        &#125;
  
    public static StringBuffer ChangeCharacters&#40;int pos, StringBuffer sb&#41;
  &#123;
       try &#123;
FileInputStream f = new FileInputStream&#40;"C&#58;//12.zip"&#41;;
ArchiveReader r = ArchiveReader.getReader&#40;f&#41;;
ArchiveEntry entry ;
while &#40;&#40;entry = r.nextEntry&#40;&#41;&#41;!= null&#41;&#123; 
    for &#40;int i = 0; i < len ; i++&#41;&#123;    
        sb.setCharAt&#40;pos, fCharList&#91;i&#93;&#41;;
        if &#40;pos == len - 1&#41;
            &#123;
                if &#40;entry.isProbablyCorrectPassword&#40;sb.toString&#40;&#41;&#41;&#41;&#123;
                   System.out.println&#40;"This is the password"&#41;;
                   foundWord = sb.toString&#40;&#41;;
            break;   
             &#125;else&#123;
                    System.out.println&#40;"This in not the password , try again"&#41;;
                &#125;
                System.out.println&#40;sb.toString&#40;&#41;&#41;; 
        &#125;else    
        &#123;
                ChangeCharacters&#40;pos + 1 , sb&#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;"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 01:45

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

import java.io.*;
import java.*;
import com.javamex.arcmexer.*;
public class Geo&#123;
  private static char fCharList&#91;&#93; = &#123;'1','2','3','4','5','6','7','8'&#125;;
  private static final int len = 8;
  private static boolean stop;
  private static String foundWord;
  private static boolean ok=true;//<-------------------------αλλαγή 1
  public static void Brute&#40;&#41;
    &#123;
        StringBuffer sb = new StringBuffer&#40;len&#41;;
        char currentChar = fCharList&#91;0&#93;;
        for &#40;int i = 0; i < len; i++&#41;
        &#123;
            sb.append&#40;currentChar&#41;;
        &#125;
 
        ChangeCharacters&#40;0, sb&#41;;
        &#125;
 
    public static StringBuffer ChangeCharacters&#40;int pos, StringBuffer sb&#41;
  &#123;
       try &#123;
FileInputStream f = new FileInputStream&#40;"C&#58;//12.zip"&#41;;
ArchiveReader r = ArchiveReader.getReader&#40;f&#41;;
ArchiveEntry entry ;

while &#40;&#40;entry = r.nextEntry&#40;&#41;&#41;!= null && ok!=false&#41;&#123;//<---------------αλλαγή 2
    for &#40;int i = 0; i < len ; i++&#41;&#123;   
        sb.setCharAt&#40;pos, fCharList&#91;i&#93;&#41;;
        if &#40;pos == len - 1&#41;&#123;
                if &#40;entry.isProbablyCorrectPassword&#40;sb.toString&#40;&#41;&#41;&#41;&#123;
                   System.out.println&#40;"This is the password"&#41;;
                   foundWord = sb.toString&#40;&#41;;
                   System.out.println&#40;foundWord&#41;;<--------------αλλαγή 3
                   ok=false;   //<-------------------αλλαγή 4
                &#125;else&#123;
                    System.out.println&#40;"This in not the password , try again"&#41;;
                    System.out.println&#40;sb.toString&#40;&#41;&#41;;//<--------------αλλαγή 5
                &#125;    
        &#125;else&#123;
                ChangeCharacters&#40;pos + 1 , sb&#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;"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 » 16 Ιουν 2010 11:42

Ευχαριστώ πολύ για την απάντηση αλλά δυστυχώς το πρόβλημα δεν λύθηκε.Τώρα το πρόβλημα είναι ότι δεν βρίσκει τον κωδικό που θέλω στην περίπτωσή μου "12345678" αλλά για κάποιον λόγο το πρόγραμμα αντί αυτού μου εμφανίζει σαν αποτέλεσμα το "11524786" νομίζοντας ότι αυτό είναι το σωστό.Από ότι παρατήρησα συμβαίνει να βγάζει λάθος κωδικό όταν το μήκος του κλειδιού είναι πάνω απο 7 χαρακτήρες όταν είναι μικρότερο τον εμφανίζει κανονικά.Το πρόβλημα πρέπει να βρίσκεται στη συνάρτηση isProbablyCorrectPassword() και στη λογική μεταβλητή που χρησιμοποιούμε.Κοίταξα λίγο στο site www.javamex.com/arcmexer/zip_password_recovery.shtml που δίνει πληροφορίες για την συγκεκριμένη συνάρτηση και είδα όπως λέει και το όνομά της, δεν είναι 100% σωστή ,για να είσαι σίγουρος πρέπει για όσα σου γυρίζει true να δοκιμάζεις ότι λειτουργεί η αποκρυπτογράφηση.
Η isProbablyCorrectPassword() θα γυρίσει true για περισσότερα από 1 strings.Έτσι είναι φτιαγμένη. Οπότε όταν γυρίσει true πρέπει ή να επιβεβαιώσεις ότι όντως είναι ο σωστός κωδικός και μετά να σταματήσεις το ψάξιμο, ή να εμφανίσεις το string ως πιθανό κωδικό και να συνεχίσεις το ψάξιμο μέχρι το τέλος για να σου φέρει και τους υπόλοιπους πιθανούς.
Αλλά όταν την χρησιμοποίησα στη επίθεση λεξικού δεν είχα κανένα πρόβλημα εκεί ειναι που μπαιρδεύομαι και δεν βγάζω καμία άκρη.Πως στην μια περίπτωση πάιζει και στην άλλη όχι.
Το πρόγραμμα που έχω γράψει και είναι παρόμοιο με το δικό σου και βγάζουν σχεδόν το ίδιο αποτέλεσμα το παραθέτω πιο κάτω.

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

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

public class New&#123;
  private static char charList&#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', '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','0',*/'1','2','3','4','5','6','7','8'&#125;;
  private static int len = 8;
  private static String foundWord;
  private static String inputLine;
  private static boolean stop;

  public static void main&#40;String&#91;&#93; args&#41;
  &#123;
    prompt&#40;&#41;;
  &#125;
  
  public static void prompt&#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; " + 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 findWord&#40;&#41;
  &#123;
    StringBuffer sb = new StringBuffer&#40;len&#41;;
    char currChar = charList&#91;0&#93;;
    for&#40;int a = 0; a < len; a++&#41;
      sb.append&#40;currChar&#41;;

    cycleChars&#40;0, sb&#41;;
  &#125;

  public static StringBuffer cycleChars&#40;int pos, StringBuffer sb&#41;
  &#123;
      try&#123;
FileInputStream f = new FileInputStream&#40;inputLine&#41;;
ArchiveReader r = ArchiveReader.getReader&#40;f&#41;;
ArchiveEntry entry ;
while &#40;&#40;entry = r.nextEntry&#40;&#41;&#41;!= null&#41;&#123;
   if &#40;stop == false&#41;
    &#123;
      for&#40;int i = 0; i < len; i++&#41;
      &#123;
        sb.setCharAt&#40;pos, charList&#91;i&#93;&#41;;
        if &#40;pos == len - 1&#41;
        &#123;
            if &#40;entry.isProbablyCorrectPassword&#40;sb.toString&#40;&#41;&#41;&#41;&#123;
          stop = true;
            foundWord = sb.toString&#40;&#41;;
            break;
            &#125;
        &#125;else
          cycleChars&#40;pos + 1, sb&#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; 

Άβαταρ μέλους
soteres2002
S. & H. Moderator
Δημοσιεύσεις: 1524
Εγγραφή: 05 Μαρ 2004 22:17
Τοποθεσία: Ιωάννινα

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

Δημοσίευση από soteres2002 » 17 Ιουν 2010 00:42

Οπότε το πρόβλημά σου τώρα είναι να φτιάξεις μία δική σου συνάρτηση που να επαληθεύει τα passwords uniquely και όχι 2 ή 3 τη φορά...

so go on!! :hammer:

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

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

Δημοσίευση από mortis1572 » 17 Ιουν 2010 11:08

Μπορείς να μου δώσεις καμιά ιδέα πως να αρχίσω για να κάνω αυτή τη συνάρτηση επειδή κόλλησα?
Τη να βάλω σαν ορίσματα και τη να επιστρέφει?

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

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

Δημοσίευση από virxen75 » 20 Ιουν 2010 00:21

mortis1572 έγραψε:Μπορείς να μου δώσεις καμιά ιδέα πως να αρχίσω για να κάνω αυτή τη συνάρτηση επειδή κόλλησα?
Τη να βάλω σαν ορίσματα και τη να επιστρέφει?
ουσιαστικά η απαντηση που πέρνεις για το αν είναι όντως το σωστό password
είναι είτε false οπότε σίγουρα δεν είναι το σωστό
είτε true οπότε διακρίνουμε 2 περπτώσεις
α) σωστό β)λάθος

για να δεις αν όντως είναι το σωστό πρέπει να ανοίξεις το αρχείο σου
αφού ορίσεις entry.setPassword(foundWord); και να δεις αν το ανοίγει.
αν το ανοίγει έχεις βρει το password.

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

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

Δημοσίευση από mortis1572 » 22 Ιουν 2010 01:06

Αν κατάλαβα καλά πρέπει να βάλω το entry.setPassword(foundWord) μέσα στη while.
Κάτι σαν αυτό π.χ

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

while &#40;&#40;entry = r.nextEntry&#40;&#41;&#41;!= null && ok!=false&#41;&#123;//<---------------αλλαγή 2
    for &#40;int i = 0; i < len ; i++&#41;&#123;   
        sb.setCharAt&#40;pos, fCharList&#91;i&#93;&#41;;
        if &#40;pos == len - 1&#41;&#123;
                if &#40;entry.isProbablyCorrectPassword&#40;sb.toString&#40;&#41;&#41;&#41;&#123;
                   entry.setPassword&#40;foundWord&#41;; //<------------- εδώ το έβαλα
                    System.out.println&#40;"This is the password"&#41;;
                   foundWord = sb.toString&#40;&#41;;
                   System.out.println&#40;foundWord&#41;;//<--------------αλλαγή 3
                   ok=false;   //<-------------------αλλαγή 4
                &#125;else&#123;
                    System.out.println&#40;"This in not the password , try again"&#41;;
                    System.out.println&#40;sb.toString&#40;&#41;&#41;;//<--------------αλλαγή 5
                &#125;   
        &#125;else&#123;
                ChangeCharacters&#40;pos + 1 , sb&#41;;
            &#125;
        &#125;     
&#125;
Αλλά και πάλι ως αποτέλεσμα μου βγάζει κάτι όπως και πριν.
Στον επιθυμητώ κωδικό μου εμφανίζει τη λέξη This is the password παραλέιπεται το password και μου βγάζει ένα exception :
java.lang.NullPointerException
και δεν τερματίζει εκεί το πρόγραμμα αλλά συνεχίζει έως ότου διαβάσει όλο τον πίνακα.
Το entry.setPassword(foundWord) το τοποθέτησα παντού μέσα στη while αλλά δεν είχε το επιθυμητώ αποτέλεσμα , πάντα έβγαζε το συγκεκριμένο exception ή εμφάνιζε άλλο password για σωστό.
Αν έκανα κάτι λάθος παρακαλώ πες μου που να κοιτάξω.

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

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

Δημοσίευση από virxen75 » 22 Ιουν 2010 02:00

πρέπει μετα το setPaswword να ανοίξεις το αρχείο zip να δεις αν όντως to διαβάζει

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

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

Δημοσίευση από mortis1572 » 22 Ιουν 2010 11:34

Δηλαδή μετά την setPassword πρέπει να διαβάζει μόνο τον κωδικό από το αρχείο ή ό,τι περιέχει ο φάκελος zip (κάποιο άλλο αρχείο ή κάποιον άλλο φάκελο)?
Αυτό θα το κάνω με μια συνάρτηση ή απλώς θα ανίξω το αρχείο και θα πρέπει να συγκρίνω πάλι τον κωδικό του αρχείου με το setPassword
Το entry.setPassword το τοποθέτησα σε σωστό μέρος?
Συγγνώμη αν γίνομαι κουραστικός με τις ερωτήσεις μου , αλλά νομίζω ότι βρίσκομαι κοντά στο τέλος αλλά κάπου σκαλώνω.

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

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

Δημοσίευση από virxen75 » 23 Ιουν 2010 01:23

έχεις ένα αρχείο zip με κάποιο κωδικό χ.

η συνάρτηση που χρησιμοποιείς σου λέει αν κάποιο Υ είναι πιαθανώς ο σωστός κωδικός.

αν η απάντηση είναι true σημαίνει ότι είναι πιθανό.

για να γίνει το πιθανό και το σωστό πρέπει:

1) να ορίσεις το password του αρχείου ότι είναι το πιθανό (Υ) entry.setPassword(Y);
2) να ανοίξεις το αρχείο zip και να δεις αν σου εμφανίζει τα δεδομένα ή όχι.
αν σου τα εμφανίζει(αποσυμπίεση σωστή δηλαδή) τότε το Y είναι σίγουρα ο σωστός κωδικός
αν δεν αποσυμπιέζει το αρχείο τότε είναι λάθος.


έχεις τον κώδικα αποσυμπίεσης ενός αρχείου zip?
αν ναι φτιάξε μία συνάρτηση που θα δέχεται σαν είσοδο το πιθανό κωδικό
θα προσπαθεί να το αποσυμπιέσει και αν επιτύχει θα επιστρέφει true ή false.

αν και πάλι δεν το κατάλαβες στείλε τον κώδικα αποσυμπίεσης να σου πω τι να κάνεις
ακριβώς.

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

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

Δημοσίευση από mortis1572 » 24 Ιουν 2010 00:54

Τον κώδικα για την αποσυμπίεση zip αρχείου δεν τον έχω.
Στο συγκεκριμένο πρόγραμμα (πτυχιακή εργασία) ο καθηγητής μου είπε ότι δεν τον ενδιαφέρει να διαβάζει τα περιεχόμενα του zip αρχείου.Εφόσον βρει τον κωδικό ο χρήτης θα τον βάζει σε κάποιο πλαίσιο και θα ανοίγει το αρχείο.

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

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

Δημοσίευση από virxen75 » 24 Ιουν 2010 02:12

mortis1572 έγραψε:Τον κώδικα για την αποσυμπίεση zip αρχείου δεν τον έχω.
Στο συγκεκριμένο πρόγραμμα (πτυχιακή εργασία) ο καθηγητής μου είπε ότι δεν τον ενδιαφέρει να διαβάζει τα περιεχόμενα του zip αρχείου.Εφόσον βρει τον κωδικό ο χρήτης θα τον βάζει σε κάποιο πλαίσιο και θα ανοίγει το αρχείο.
χωρίς αυτό θα έχεις την απάντηση για τα πιθανά passwords και όχι του
σωστού και μοναδικού password.

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

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

Δημοσίευση από dva_dev » 24 Ιουν 2010 03:00

Θα συμφωνήσω κι εγώ με τον virxen75. Επειδή ο καθηγητής είπε ότι δεν τον ενδιαφέρει να διαβάζει τα περιεχόμενα του zip αρχείου, δεν σημαίνει ότι δεν το χρειάζεσαι.
Το δεν με ενδιαφέρει σημαίνει ότι δεν είναι αυτό που ζητάω. Αν για να μου δώσεις αυτό που ζητάω πρέπει να το κάνεις δεν σου λέω μην το κάνεις.

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

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

Δημοσίευση από mortis1572 » 25 Ιουν 2010 12:05

Επειδή δεν έχω τον συγκεκριμένο κώδικα για την αποσυμπίεση αρχείου , μπορείτε να με παραπέμψετε σε κάπιο παράδειγμα για να δω πως μπορώ να το τροποποιοήσω για το δικό μου πρόγραμμα.
Δηλαδή πρέπει να διαβάζει τα περιεχόμενα του zip αρχείου ή να το κάνει αποσυμπίεση το αρχείο?

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

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

Δημοσίευση από mortis1572 » 29 Ιουν 2010 12:38

Βρήκα κάποια site με παρεμφερές κώδικα με αυτόν που ψάχνω.Σας παραθέτω παρακάτω τα sites για να μου πείτε αν είναι αντίστοιχο με τον κώδικα για την αποσυμπίεση zip αρχείου που δεν έχω.

http://www.java2s.com/Code/Java/File-In ... IPFile.htm

http://www.java-tips.org/java-se-tips/j ... ile-2.html

Απάντηση

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

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

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