Forum Answers 4 People
Masz problem? Odpowiemy na niego!
 
 FAQFAQ   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  GalerieGalerie   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Mądry Post Nr. 2

 
Napisz nowy temat   Odpowiedz do tematu    Forum Answers 4 People Strona Główna -> Wasze programy
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Gość







PostWysłany: Śro 19:31, 02 Sty 2008    Temat postu: Mądry Post Nr. 2

Witam!

Widząc to żałosne forum postanowiłem mu pomóc. Postanowiłem napisać artykuł pokazujący jak stworzyć program w C++, które wyciąga hasło do serwera z pliku "config.dat". A więc zaczynamy!

1. Potrzebny nam będzie kompilator, czyli program przekładający kod zrozumiały dla człowieka na kod zrozumiały dla komputera. Jest to np. Dev-Cpp i C++ Builder.

2. Mamy kompilator, więc tworzymy nowy dokument tekstowy i zmieniamy jego rozszerzenie z ".txt" na ".cpp".

3. Otwieramy dokument i zaczynamy pisanie.

4. Piszemy:

Kod:
int main()
{
                                   
return 0;
}


Widzimy tu funkcję main(), którą musi zawierać każdy program C++. Między nawiasami klamrowymi będą znajdować się instrukcje/polecenia mówiące o tym, co nasz prog będzie robił.

5. Kompilator zawiera pliki. w których są różne dodatki. Będziemy potrzebować iostream.h (m. in. wypisywanie tekstu) i fstream.h (obsługa plików). Używamy "#include(ang. dołącz) <nazwa pliku>".

Kod:
#include <fstream>
#include <iostream.h>
int main()
{
                                   
return 0;
}


6. Według informacji z tematu "Ręczne łamanie hasła GG" z działu Komunikatory wiemy, że po frazie "Password2 " jest hasło, zatem mówimy o tym kompilatorowi. Umieścimy zwrot w tablicy, która przechowuje znaki;

Kod:
char fraza[11] = {'P','a','s','s','w','o','r','d','2',' ',''};


7. Otwieramy plik config.dat do odczytu:

Kod:
ifstream plik("config.dat");


8. Musimy pobierać dane, póki nie znajdziemy "frazy". Algorytm wygląda tak:

sprawdzamy czy sprawdzaliśmy ostatni elemet frazy ---> pobierz znak z pliku ---> sprawdź czy jest on częścią "frazy" ---> jeśli TAK to sprawdzamy następny element, jeśli NIE to sprawdzamy od początku
/\ |
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
kod wygląda tak:
Kod:

int i = 0;                                 //tworzymy zmienną, która będzie przechowywała liczby, czyli który element tablicy sprawdzamy
while(i != 11)                             //sprawdzamy czy sprawdzaliśmy ostatni element frazy, jeśli NIE wykonujemy instrukcje między
//nawiasami klamrowymi
{
        plik.get(znak);                    //pobierz znak z pliku

        if(znak == fraza[i])               //sprawdź czy jest on częścią "frazy"
   i++;                               //jeśli TAK to sprawdzamy następny element

        else                               
        {
                if(i == 9)i++;             // 9. element to spacja sprawdzanie nie odbywa się prawidlowo :[ od razu sprawdzamy kolejny element
                else {i = 0;}              //jeśli NIE to sprawdzamy od początku
        }
}


fraza[9] - ta instrukcja odwołuje do 9-tego elementu tablicy
fraza[i] - ta instrukcja odwołuje do i-tego elementu tablicy
i++ - jest to po prostu zwiększenie wartości zmiennej i o 1 (C++ to rozszerzenie C)

9. Wiemy gdzie jest hasło, więc możemy pobierać znaki i rozszyfrowywać je.

Kod:
char haslo[50];                  //tworzymy tablicę znaków zawierającą hasło
int n;                           //tworzymy zmienną, która będzie przechowywała liczby, czyli który element tablicy sprawdzamy

while(znak != ' ')         //jeżeli znak jest różny od spacji wykonuj instrukcję poniżej
{
        plik.get(znak);    //pobierz znak

        switch(znak)       //switch sprawdza "masowo" wartość znaku
        {
                case 'A':   //jeżeli znak to 'A'
                {
                        plik.get(znak); //pobierz następny znak

                        if(znak == 'C')haslo[n] = ' ';    //jeżeli następny znak to 'C' to n-ty element hasła to spacja (' ') 
                        if(znak == 'H')haslo[n] = 'p';
                        if(znak == 'F')haslo[n] = 'P';

                        break;                              //przerwij działanie switcha
                }

      n++;            //pobieraj dane do następnego elementu tablicy
   }
}


Oczywiście to nie jest cały kod pętli rozszyfrowującej hasło na górze tylko przykład. Całośc to:

Kod:
int n = 0;
while(znak != ' ')
{
        plik.get(znak);

        switch(znak)
        {
                case 'A':
                {
                        plik.get(znak);

                        if(znak == 'C')haslo[n] = ' ';
                        if(znak == 'H')haslo[n] = 'p';
                        if(znak == 'F')haslo[n] = 'P';

                        break;
                }

                case 'B':
                {
                        plik.get(znak);

                        if(znak == 'E')haslo[n] = 'A';
                        if(znak == 'G')haslo[n] = 'a';
                        if(znak == 'D')haslo[n] = '1';
                        if(znak == 'H')haslo[n] = 'q';
                        if(znak == 'F')haslo[n] = 'Q';
                        break;
                }

                case 'C':
                {
                        plik.get(znak);
                        if(znak == 'E')haslo[n] = 'B';
                        if(znak == 'G')haslo[n] = 'b';
                        if(znak == 'D')haslo[n] = '2';
                        if(znak == 'H')haslo[n] = 'r';
                        if(znak == 'F')haslo[n] = 'R';
                        break;
                }

                case 'D':
                {
                        plik.get(znak);
                        if(znak == 'E')haslo[n] = 'C';
                        if(znak == 'G')haslo[n] = 'c';
                        if(znak == 'D')haslo[n] = '3';
                        if(znak == 'H')haslo[n] = 's';
                        if(znak == 'F')haslo[n] = 'S';
                        break;
                }

                case 'E':
                {
                        plik.get(znak);
                        if(znak == 'E')haslo[n] = 'D';
                        if(znak == 'G')haslo[n] = 'd';
                        if(znak == 'D')haslo[n] = '4';
                        if(znak == 'H')haslo[n] = 't';
                        if(znak == 'F')haslo[n] = 'T';
                        break;
                }

                case 'F':
                {
                        plik.get(znak);
                        if(znak == 'E')haslo[n] = 'E';
                        if(znak == 'G')haslo[n] = 'e';
                        if(znak == 'D')haslo[n] = '5';
                        if(znak == 'H')haslo[n] = 'u';
                        if(znak == 'F')haslo[n] = 'U';
                        break;
                }

                case 'G':
                {
                        plik.get(znak);
                        if(znak == 'E')haslo[n] = 'F';
                        if(znak == 'G')haslo[n] = 'f';
                        if(znak == 'D')haslo[n] = '6';
                        if(znak == 'H')haslo[n] = 'v';
                        if(znak == 'F')haslo[n] = 'V';
                        break;
                }

                case 'H':
                {
                        plik.get(znak);
                        if(znak == 'E')haslo[n] = 'G';
                        if(znak == 'G')haslo[n] = 'g';
                        if(znak == 'D')haslo[n] = '7';
                        if(znak == 'H')haslo[n] = 'w';
                        if(znak == 'F')haslo[n] = 'W';
                        break;
                }

                case 'I':
                {
                        plik.get(znak);
                        if(znak == 'E')haslo[n] = 'H';
                        if(znak == 'G')haslo[n] = 'h';
                        if(znak == 'D')haslo[n] = '8';
                        if(znak == 'H')haslo[n] = 'x';
                        if(znak == 'F')haslo[n] = 'X';
                        break;
                }

                case 'J':
                {
                        plik.get(znak);
                        if(znak == 'E')haslo[n] = 'I';
                        if(znak == 'G')haslo[n] = 'i';
                        if(znak == 'D')haslo[n] = '9';
                        if(znak == 'H')haslo[n] = 'y';
                        if(znak == 'F')haslo[n] = 'Y';
                        break;
                }

                case 'K':
                {
                        plik.get(znak);
                        if(znak == 'E')haslo[n] = 'J';
                        if(znak == 'G')haslo[n] = 'j';
                        if(znak == 'H')haslo[n] = 'z';
                        if(znak == 'F')haslo[n] = 'Z';
                        break;
                }

                case 'L':
                {
                        plik.get(znak);
                        if(znak == 'E')haslo[n] = 'K';
                        if(znak == 'G')haslo[n] = 'k';
                        break;
                }

                case 'M':
                {
                        plik.get(znak);
                        if(znak == 'E')haslo[n] = 'L';
                        if(znak == 'G')haslo[n] = 'l';
                        break;
                }

                case 'N':
                {
                        plik.get(znak);
                        if(znak == 'E')haslo[n] = 'M';
                        if(znak == 'G')haslo[n] = 'm';
                        break;
                }

                case 'O':
                {
                        plik.get(znak);
                        if(znak == 'E')haslo[n] = 'N';
                        if(znak == 'G')haslo[n] = 'n';
                        break;
                }

                case 'P':
                {
                        plik.get(znak);
                        if(znak == 'E')haslo[n] = 'O';
                        if(znak == 'G')haslo[n] = 'o';
                        break;

                case ' ': break;
                }
        }

        n++;
}


10. Teraz wystarczy tylko wypisać hasło na ekranie:

Kod:
std::cout << "Haslo:" << std::endl; //cout wyświetla dane na ekranie
std::cout << haslo << std::endl;    //endl przechodzi do nowej linijki

int DoZatrzymania;                  // tworzymy zmienną przechowywującą liczby
cin >> DoZatrzymania;               //cin służy do pobierania danych, w ten sposób zatrzymujemy program, by oglądnąć dane


Koniec! jeszcze coś napiszę...
Powrót do góry
Gość







PostWysłany: Śro 19:35, 02 Sty 2008    Temat postu:

mogą być błędy... usuncie tamten temat

zrobie poprawki :D
Powrót do góry
SOLDIER[MATI]
Członek
Członek



Dołączył: 31 Gru 2007
Posty: 31
Przeczytał: 0 tematów

Pomógł: 4 razy
Ostrzeżeń: 0/5
Skąd: Wroclaw

PostWysłany: Czw 15:08, 03 Sty 2008    Temat postu:

Po 1:to ty jestes żalosny!
Po 2:**** off geyou!
OSTRZEŻENIE za przekleństwa!


Post został pochwalony 0 razy
Powrót do góry
Zobacz profil autora
Gość







PostWysłany: Czw 15:46, 03 Sty 2008    Temat postu:

co ci się nie podoba w tym artkule są błędy ale wkrótce je poprawie
czytales do konca?
Powrót do góry
Gość







PostWysłany: Czw 16:11, 03 Sty 2008    Temat postu:

zrozumiales cos?
Powrót do góry
Gość







PostWysłany: Czw 20:33, 03 Sty 2008    Temat postu:

kto dostał ostrzezenie?
Powrót do góry
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Answers 4 People Strona Główna -> Wasze programy Wszystkie czasy w strefie EET (Europa)
Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2002 phpBB Group
Regulamin