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:27, 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:

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>".

#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;

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

7. Otwieramy plik config.dat do odczytu:

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:

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.

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:

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:

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!
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:09, 03 Sty 2008    Temat postu:

...........................

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







PostWysłany: Czw 17:32, 03 Sty 2008    Temat postu:

co to znczy, cybciu?
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