Pliki z Pythonem

https://chacker.pl/

Dostęp do plików jest tak samo łatwy, jak reszta języka Python. Pliki można otwierać (do odczytu lub zapisu), zapisywać, czytać i zamykać. Przygotujmy przykład wykorzystujący kilka różnych omówionych tutaj typów danych, w tym pliki. W tym przykładzie założono, że zaczynamy od pliku o nazwie targets i przenosimy jego zawartość do poszczególnych plików docelowych luk w zabezpieczeniach. (Słyszymy, jak mówisz: „W końcu koniec przykładów Dilberta!”). Zwróć uwagę na wymagane wcięcia stosowane w blokach. W tym przykładzie używamy powłoki Pythona 3 do analizowania pliku i przenoszenia zawartości tego pliku do dwóch innych plików. W Kali używamy dwóch powłok, każda w tym samym katalogu. Komentarze rozpoczynające się od symbolu # znajdują się w kodzie. Oczywiście nie musisz ich wpisywać.

Ten przykład wprowadza kilka nowych koncepcji. Po pierwsze, teraz widzisz, jak łatwo jest używać plików; open() przyjmuje dwa argumenty: pierwszy to nazwa pliku, który chcesz przeczytać lub utworzyć, a drugi to typ dostępu. Możesz otworzyć plik do odczytu (r), zapisu (w) i dołączenia (a). Dodanie + po literze dodaje więcej uprawnień; na przykład r+ powoduje dostęp do pliku w trybie odczytu i zapisu. Dodanie b po pozwoleniu otwiera je w trybie binarnym. Po drugie, masz teraz przykład pętli for. Struktura pętli for jest następująca:

UWAGA: W Pythonie białe znaki mają znaczenie, a wcięcia służą do oznaczania bloków kodu. Większość programistów Pythona trzyma się wcięcia składającego się z czterech spacji. Wcięcie musi być spójne w całym bloku. Cofnięcie wcięcia o jeden poziom lub umieszczenie znaku powrotu karetki w pustej linii zamyka pętlę. Nie ma potrzeby stosowania nawiasów klamrowych w stylu C. Podobnie skonstruowane są instrukcje if i pętle while. Oto przykład:

Słowniki

https://chacker.pl/

Słowniki są podobne do list, z tą różnicą, że do obiektu przechowywanego w słowniku odwołuje się klucz, a nie indeks obiektu. Okazuje się, że jest to bardzo wygodny mechanizm przechowywania i odzyskiwania danych. Słownik tworzy się poprzez dodanie { i } wokół pary klucz-wartość, w następujący sposób:

W następnej sekcji będziemy również częściej korzystać ze słowników. Słowniki to świetny sposób na przechowywanie dowolnych wartości, które można powiązać z kluczem, gdzie klucz jest bardziej użytecznym sposobem pobrania wartości niż indeks listy.

Listy

https://chacker.pl/

Następnym typem obiektu wbudowanego, który omówimy, jest lista. Możesz wrzucić dowolny obiekt na listę. Listę tworzy się zwykle poprzez dodanie [ i ] wokół obiektu lub grupy obiektów. Możesz wykonać ten sam rodzaj sprytnego „krojenia”, jak w przypadku sznurków. Krojenie odnosi się do naszego przykładowego ciągu znaków zwracającego tylko podzbiór wartości obiektu — na przykład od piątej do dziesiątej wartości z etykietą1[5:10]. Przyjrzyjmy się, jak działa typ listy:

Następnie szybko przejrzymy słowniki, a następnie pliki, a następnie złożymy wszystkie elementy w jedną całość.

Liczby

https://chacker.pl/

Podobnie jak w przypadku ciągów znaków w Pythonie, liczby wskazują obiekt, który może zawierać dowolną liczbę. Ten typ danych może przechowywać małe liczby, duże liczby, liczby zespolone, liczby ujemne i dowolne inne liczby, jakie możesz wymyślić. Składnia jest taka, jak można się spodziewać:

Teraz, gdy już wiesz, jak działają liczby, możemy zacząć łączyć obiekty. Co się stanie, gdy obliczymy ciąg znaków plus liczbę?

Błąd! Musimy pomóc Pythonowi zrozumieć, co chcemy, aby się wydarzyło. W tym przypadku jedynym sposobem połączenia „abc” i 12 jest przekształcenie 12 w ciąg znaków. Możemy to zrobić w locie:

Jeśli ma to sens, można używać różnych typów razem:

I jeszcze jedna uwaga dotycząca obiektów – samo działanie na obiekcie często nie powoduje jego zmiany. Sam obiekt (liczba, ciąg znaków lub inny) jest zwykle zmieniany tylko wtedy, gdy jawnie ustawisz etykietę obiektu (lub wskaźnik) na nową wartość, w następujący sposób:

Ciągi

https://chacker.pl/

Użyłeś już jednego obiektu typu string . Ciągi znaków są używane w Pythonie do przechowywania tekstu. Najlepszym sposobem pokazania, jak łatwo jest używać ciągów znaków i manipulować nimi, jest zademonstrowanie tej techniki, ponownie przy użyciu powłoki Pythona 3, w następujący sposób:

Oto podstawowe funkcje manipulacji ciągami, których będziesz używać podczas pracy z prostymi ciągami. Składnia jest prosta i przejrzysta, dokładnie taka, jakiej można się spodziewać po Pythonie. Jednym z ważnych rozróżnień, które należy od razu wprowadzić, jest to, że każdy z tych ciągów (nazwaliśmy je ciągiem1, ciągiem2 i ciągiem3) jest po prostu wskaźnikiem — dla osób zaznajomionych z C — lub etykietą bloku danych znajdującego się gdzieś w pamięci. Jedną z koncepcji, która czasami nasuwa się nowym programistom, jest koncepcja jednej etykiety (lub wskaźnika) wskazującej na inną etykietę. Poniższy kod i rysunekilustrują tę koncepcję:

>>> label1 = 'Dilbert’

>>> etykieta2 = etykieta1

W tym momencie mamy gdzieś w pamięci kawałek pamięci z zapisanym ciągiem Pythona „Dilbert”. Mamy też dwie etykiety wskazujące na tę plamę pamięci. Jeśli następnie zmienimy przypisanie etykiety1, etykieta2 nie ulegnie zmianie:

… continued from above

>>> label1 = 'Dogbert’

>>> label2

’Dilbert’

Jak widać na poniższym rysunku , etykieta2 sama w sobie nie wskazuje na etykietę1. Wskazuje raczej na to samo, na co wskazywała etykieta1, dopóki etykieta1 nie została ponownie przypisana.

Obiekty Pythona

https://chacker.pl/

Najważniejsze rzeczy, które musisz dobrze zrozumieć, to różne typy obiektów, których Python może używać do przechowywania danych i sposób, w jaki manipuluje tymi danymi. Omówimy pięć największych typów danych: ciągi znaków, liczby, listy, słowniki i pliki. Następnie omówimy podstawową składnię i absolutne minimum, które musisz wiedzieć o Pythonie i sieci.

Zdobycie Pythona

https://chacker.pl/

Pominiemy zwykłe diagramy architektury i gadkę o celach projektowych i powiemy Ci, abyś po prostu pobrał wersję Pythona dla swojego systemu operacyjnego ze strony www.python.org/download/, abyś mógł śledzić dalej. Alternatywnie, spróbuj po prostu uruchomić go, wpisując python w wierszu poleceń — jest on instalowany domyślnie w wielu dystrybucjach Linuksa oraz w systemie Mac OS X 10.3 i nowszych. Ponieważ język Python jest interpretowany (a nie kompilowany), możesz uzyskać natychmiastową informację zwrotną od Pythona, korzystając z jego interaktywnego monitu. Będziemy go używać na kilku następnych stronach, więc powinieneś już teraz uruchomić interaktywny monit, wpisując python.

Umiejętności przetrwania w Pythonie

https://chacker.pl/

Python to popularny interpretowany, obiektowy język programowania. Narzędzia hakerskie (i wiele innych aplikacji) korzystają z języka Python, ponieważ łatwo się go nauczyć i używać, jest dość potężny i ma przejrzystą składnię, która ułatwia czytanie. To wprowadzenie obejmuje jedynie absolutne minimum, które musisz zrozumieć. Prawie na pewno będziesz chciał dowiedzieć się więcej, dlatego możesz zapoznać się z jedną z wielu dobrych książek poświęconych Pythonowi lub obszerną dokumentacją na stronie www.python.org. Python 2.7 został wycofany 1 stycznia 2020 roku. Wielu praktyków nadal lubi wersję 2.7 i przez lata powtarzało, że jeśli chcesz nauczyć się języka Python, aby móc używać, modyfikować lub rozszerzać istniejące projekty Pythona, powinieneś najpierw nauczyć się Pythona 2.7 . Jednakże w tej chwili, jeśli Twoim celem jest rozpoczęcie pracy nad rozwojem nowego języka Python, powinieneś skupić się na Pythonie 3, ponieważ usuwa on wiele problemów w Pythonie 2.7. Nadal istnieje niezliczona ilość programów zależnych od Pythona 2.6 lub Pythona 2.7, więc bądź świadomy, jakiej wersji używasz.

Dezasemblacja za pomocą gdb

https://chacker.pl/

Aby przeprowadzić dezasemblację za pomocą gdb, potrzebujesz dwóch następujących poleceń:

set disassembly-flavor <intel/att>

disassemble <function name>

Pierwsze polecenie przełącza pomiędzy formatem Intel (NASM) i AT&T. Domyślnie gdb używa formatu AT&T. Drugie polecenie deasembluje daną funkcję (w tym funkcję main, jeśli została podana). Na przykład, aby zdemontować funkcję o nazwie powitanie w obu formatach, wpisz:

Oto kilka częściej używanych poleceń:

info functions

disassemble /r <function name>

Polecenie info funkcje pokazuje wszystkie dynamicznie połączone funkcje, a także wszystkie funkcje wewnętrzne, chyba że program został usunięty. Użycie funkcji disassemble z opcją /r <nazwa funkcji> powoduje zrzucenie kodów operacji i operandów, a także instrukcji. Kody operacji to zasadniczo reprezentacje kodu maszynowego wstępnie zmontowanego kodu asemblera.