 |
Answers 4 People Masz problem? Odpowiemy na niego!
|
Zobacz poprzedni temat :: Zobacz następny temat |
Autor |
Wiadomość |
Gość
|
Wysł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

Dołączył: 31 Gru 2007
Posty: 31
Przeczytał: 0 tematów
Pomógł: 4 razy Ostrzeżeń: 0/5 Skąd: Wroclaw
|
Wysłany: Czw 15:09, 03 Sty 2008 Temat postu: |
|
|
...........................
Post został pochwalony 0 razy
|
|
Powrót do góry |
|
 |
Gość
|
Wysłany: Czw 17:32, 03 Sty 2008 Temat postu: |
|
|
co to znczy, cybciu?
|
|
Powrót do góry |
|
 |
|
|
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
|