reklama - zainteresowany?

Praktyczna inżynieria wsteczna. Metody, techniki i narzędzia - Helion

Praktyczna inżynieria wsteczna. Metody, techniki i narzędzia
ebook
Autor: Gynvael Coldwind, Mateusz Jurczyk
ISBN: 978-83-01-19046-0
stron: 526, Format: ebook
Data wydania: 2016-11-22
Księgarnia: Helion

Cena książki: 75,20 zł (poprzednio: 94,00 zł)
Oszczędzasz: 20% (-18,80 zł)

Dodaj do koszyka Praktyczna inżynieria wsteczna. Metody, techniki i narzędzia

Tagi: Kryptografia | Techniki programowania

Praktyczna Inżynieria Wsteczna. Metody, techniki i narzędzia Inżynieria wsteczna oprogramowania jest procesem dogłębnej analizy bibliotek, aplikacji i systemów, których kod źródłowy nie jest dostępny dla badacza. Umożliwia ona zarówno odtworzenie i pełne zrozumienie logiki konkretnego programu, jak i poszerzenie wiedzy na temat sposobu działania współczesnych procesorów, kompilatorów, czy całych systemów operacyjnych. Umiejętność ta może zostać użyta do odkrywania i eksploitacji luk bezpieczeństwa, analizy złośliwego oprogramowania, a nawet podejmowania bardziej świadomych decyzji programistycznych i łatwiejszego radzenia sobie z błędami we własnym kodzie. Książka jest kompilacją publikacji dwunastu polskich autorów z wieloletnim doświadczeniem, którzy na co dzień posługują się przedstawionymi technikami w pracy jako eksperci od bezpieczeństwa i analitycy. Wśród nich znajdziemy wielu specjalistów zatrudnionych w największych firmach informatycznych, laureatów nagrody Pwnie Award, rozpoznawalnych prelegentów uznanych konferencji i członków czołowych zespołów startujących w konkursach security Capture The Flag. Materiały zostały wybrane i zredagowane przez Gynvaela Coldwinda i Mateusza Jurczyka. Niektóre z poruszanych zagadnień to: Podstawowe struktury znane z języków C i C++ widziane z perspektywy inżynierii wstecznej. Pliki wykonywalne w formatach ELF oraz PE, w tym zaawansowane triki z nimi związane. Wewnętrzna budowa zabezpieczeń przed wykorzystaniem luk bezpieczeństwa. Inżynieria wsteczna oprogramowania na platformy .NET oraz Python. Metody wstrzykiwania kodu w inne procesy. Projektowanie i analiza zabezpieczeń programów. Metody śledzenia wykonania programowe i korzystające ze wsparcia oferowanego przez współczesne procesory. Inżynieria wsteczna w analizie bezpieczeństwa oprogramowania. Różnorodność tematów poruszanych przez autorów sprawia, że pozycja ta może zainteresować zarówno osoby początkujące, jak i pasjonatów pragnących poszerzyć swoją wiedzę lub zwiększyć repertuar używanych narzędzi i technik.

Dodaj do koszyka Praktyczna inżynieria wsteczna. Metody, techniki i narzędzia

 

Osoby które kupowały "Praktyczna inżynieria wsteczna. Metody, techniki i narzędzia", wybierały także:

  • Dow
  • Bezpieczeństwo w ASP.NET Core. Kurs video. Podstawy kryptografii
  • Blockchain. Kurs video. Cyfrowa ewolucja w świecie finansów
  • Dow
  • Złam ten kod z Pythonem. Jak tworzyć, testować i łamać szyfry

Dodaj do koszyka Praktyczna inżynieria wsteczna. Metody, techniki i narzędzia

Spis treści

Praktyczna inżynieria wsteczna. Metody, techniki i narzędzia eBook -- spis treści

Wstęp 15 1. Funkcje, struktury, klasy i obiekty na niskim poziomie 19 1.1. Wywoływanie funkcji w językach (bardzo) niskiego poziomu 21 1.1.1. CALL, RET i konwencje wywołań 21 1.1.2. Konwencje wywołań x86 24 1.1.3. Konwencje wywołań x86-64 27 1.2. Struktury 28 1.2.1. ,,Zgadywanie" wielkości i ułożenia elementów struktury w pamięci 30 1.2.2. Rozpoznawanie budowy struktur lokalnych i globalnych 30 1.2.3. Rozpoznawanie budowy struktur dynamicznie alokowanych 32 1.3. Klasy, obiekty, dziedziczenie i tablice wirtualne 34 1.3.1. Prosta klasa a struktura 34 1.3.2. Obiekty = struktury + funkcje + thiscall 38 1.3.3. Wszystko zostaje w rodzinie, czyli dziedziczenie 38 1.4. Podsumowanie 41 2. Środowisko uruchomieniowe na systemach GNU/Linux 43 2.1. Wstęp 45 2.2. Pliki wykonywalne ELF 45 2.2.1. Identyfikacja systemu i architektury docelowej 46 2.2.2. Segmenty 49 2.2.3. Segment PT_LOAD 51 2.2.4. Segment PT_DYNAMIC 53 2.2.5. Sekcja dynamic 53 2.2.5.1. Deklaracja bibliotek zależnych 57 2.2.5.2. Wczesna inicjalizacja programu 59 2.3. Środowisko uruchomieniowe 62 2.3.1. Kod PIC 62 2.3.2. Tablice GOT i PLT 65 2.3.3. Program ładujący ld.so 73 2.3.3.1. Zmienne środowiskowe 73 2.3.3.2. LD_LIBRARY_PATH 74 2.3.3.3. LD_PRELOAD 75 2.3.3.4. LD_AUDIT 77 2.3.4. Zrzucanie pamięci procesów 81 2.3.4.1. System plików /proc 81 2.3.4.2. Pliki specjalne w /proc/pid 82 2.3.4.3. Pliki specjalne maps i mem 83 2.3.4.4. VDSO 85 2.3.4.5. Wektory inicjalizacyjne 86 2.3.5. Wstrzykiwanie kodu 88 2.3.5.1. Wersja ptrace(2) 95 2.3.6. Samomodyfikujący się kod 96 2.4. Podsumowanie 98 Bibliografia 99 3. Mechanizmy ochrony aplikacji 101 3.1. Wstęp 103 3.2. Przepełnienie bufora na stosie 104 3.3. Procedury obsługi wyjątków 108 3.4. Zapobieganie wykonaniu danych 112 3.5. Losowość układu przestrzeni adresowej 114 3.6. Dodatkowe materiały 116 3.7. Podsumowanie 116 Bibliografia 116 4. Metody przeciwdziałania odbudowie kodu aplikacji z pamięci procesu 119 4.1. Wstęp 121 4.1.1. Zawartość rozdziału 121 4.2. Packery, szyfratory i protektory plików PE 122 4.3. Emulowanie zabezpieczeń 126 4.4. Ochrona przed odbudową kodu programu zapisanego z pamięci procesu 128 4.5. Nanomity 130 4.6. Skradziony punkt rozpoczęcia programu 135 4.7. Przekierowanie i obfuskacja importowanych funkcji 142 4.9. Podsumowanie 147 Bibliografia 148 5. NET internals - format & RE 151 5.1. Wstęp 153 5.2. Format pliku NET 153 5.2.1. JIT, czyli drugi stopień kompilacji programu 153 5.2.2. Język pośredni CIL 154 5.2.2.1. Przykład 1: add() 155 5.2.2.2. Przykład 2: stringWriteTest() 155 5.2.2.3. Przykład 3: programFlowTest() 157 5.2.3. Dedykowane kontenery metadanych 161 5.2.4. Wysokopoziomowa struktura programu zachowana w pliku wykonywalnym 161 5.2.5. Token 164 5.2.6. Funkcje natywne 165 5.2.7. AOT 165 5.3. Inżynieria wsteczna 166 5.3.1. Analiza statyczna 166 5.3.2. Dekompilacja 166 5.3.3. Rekompilacja i odtwarzanie działania programu 170 5.3.4. Modyfikacja istniejących metod 170 5.3.5. Debug 174 5.3.5.1. dnSpy 174 5.3.5.2. Wtyczki do WinDbg 176 5.4. Metody protekcji plików NET 176 5.4.1. Nadpisywanie nazw nadanych przez użytkownika 176 5.4.2. Szyfrowanie stałych tekstowych 176 5.4.3. Utrudnianie dekompilacji 178 5.4.4. Ukrywanie kodu programu 178 5.4.5. Deobfuskacja 179 5.5. Podsumowanie 180 Bibliografia 180 6. Python - obfuskacja i inżynieria wsteczna 181 6.1. Wstęp 183 6.2. Obfuskacja a model wykonania 183 6.3. Obfuskacja źródeł 185 6.4. Pliki pyc i pyo 188 6.5. Bundlery i kompilator 190 6.5.1. Py2exe 190 6.5.2. cx_Freeze 193 6.5.3. PyInstaller 194 6.5.4. Nuitka 198 6.5.5. Inne bundlery i kompilatory 205 6.6. Obiekty code i function 205 6.7. Kod bajtowy i gdzie go szukać 213 6.8. Prosta obfuskacja kodu bajtowego 216 6.9. Samomodyfikujący się kod bajtowy 222 6.10. Podsumowanie 224 Bibliografia 224 7. Malware w owczej skórze, czyli o wstrzykiwaniu kodu w inne procesy 225 7.1. Wstęp 227 7.2. Przegląd technik wstrzykiwania 228 7.2.1. Schemat działania 228 7.2.2. Przygotowania przed implementacją 228 7.2.3. Wybieranie celu 229 7.2.3.1. Wstrzykiwanie kodu do istniejącego procesu 229 7.2.3.2. Wstrzykiwanie kodu do nowo uruchomionego procesu 230 7.2.4. Wpisywanie kodu do zdalnego procesu 231 7.2.5. Metody przekierowania do wstrzykniętego kodu 233 7.2.5.1. Uruchomienie dodanego kodu w nowym wątku 233 7.2.5.2. Dodawanie do istniejącego wątku (przy użyciu NtQueueApcThread) 234 7.2.5.3. Nadpisywanie punktu wejścia procesu 235 7.2.5.4. Nadpisywanie kontekstu procesu 238 7.2.5.5. Dodawanie do okienka Tray 239 7.2.5.6. PowerLoader 241 7.3. Tworzenie wstrzykiwalnego kodu 242 7.3.1. Podstawy shellcodu 242 7.3.2. Warunki wstrzykiwania plików PE 244 7.3.2.1. Wstępne przygotowanie pliku PE 245 7.3.3. Samodzielne ładowanie pliku PE 246 7.3.3.1. Konwersja surowego obrazu na wirtualny 246 7.3.3.2. Pobieranie adresów tabel 248 7.3.3.3. Rozwiązywanie relokacji 250 7.3.3.4. Rozwiązywanie importów 253 7.3.3.5. Przekierowanie wykonania do dodanego pliku PE 261 7.3.3.6. Plik PE o cechach shellcodu 261 7.3.4. Debugowanie wstrzykniętego kodu 262 7.4. Metody wstrzykiwania plików PE 264 7.4.1. Klasyczny DLL Injection 265 7.4.1.1. Demonstracja 265 7.4.1.2. Implementacja 266 7.4.2. RunPE (Process Hollowing) 267 7.4.2.1. Demonstracja 267 7.4.2.2. Implementacja 269 7.4.3. ChimeraPE 273 7.4.3.1. Demonstracja 274 7.4.3.2. Implementacja 275 7.4.4. Reflective DLL injection 277 7.4.4.1. Demonstracja 277 7.4.4.2. Implementacja 278 7.4.5. Wstrzyknięcia DLL na poziomie systemu operacyjnego 282 7.4.5.1. AppInit_DLLs 283 7.4.5.2. Shim + InjectDll Tag 283 7.5. Podsumowanie 285 Bibliografia 286 8. ELFie brudne sztuczki 287 8.1. Wstęp 289 8.2. ELFie struktury 289 8.3. Rozdwojenie jaźni 292 8.3.1. Niewidzialny kod 292 8.4. Misja: przechwycić resolver 299 8.5. Klasyka wiecznie żywa 302 8.7. DYNAMICzne zmiany 307 8.7.1. Co dwie tablice to nie jedna 307 8.7.2. Jeden bajt by nimi rządzić 309 8.8. Podsumowanie 311 Bibliografia 311 9. Łamanie zaawansowanych technik przekierowania API 313 9.1. Wstęp 315 9.2. Format PE - podstawy 315 9.3. Tabela importów 319 9.4. Tabela eksportów 321 9.5. Proste metody obfuskacji IAT 322 9.6. Przekierowania API z przepisywaniem kodu 323 9.7. Zróbmy to lepiej! 325 9.8. Weryfikacja hipotezy pod debuggerem 326 9.9. Automatyczne przepisywanie plików DLL 326 9.10. Pierwsza próba i pierwsze problemy 331 9.11. Modyfikacja NTDLL 333 9.12. Ostatnie poprawki 335 9.13. Efekt końcowy 336 9.14. Podsumowanie 337 Bibliografia 337 10. Śledzenie ścieżki wykonania procesu w systemie Linux 339 10.1. Wstęp 341 10.2. Metody programowe 342 10.2.1. Instrumentacja kodu źródłowego 342 10.2.2. Instrumentacja programu w ramach kompilacji 344 10.2.3. Instrumentacja kodu binarnego 347 10.2.4. Śledzenie wywołań systemowych 349 10.2.5. Śledzenie wywołań funkcji bibliotecznych 350 10.2.6. Emulacja instrukcji 351 10.2.7. Nagrywanie i odtwarzanie przebiegu ścieżki wykonania 353 10.3. Metody programowo-sprzętowe 355 10.3.1. Próbkowanie instrukcji 356 10.3.2. Rejestry debuggera 357 10.3.3. Wykonanie krokowe 360 10.3.4. BTF (Branch Trap Flag) 362 10.3.5. LBR (Intel Last Branch Record) 363 10.3.6. BTS (Intel Branch Trace Store) 365 10.3.7. IPT (Intel Processor Trace) 367 10.4. Metody sprzętowe 370 10.5. Porównanie wydajności 371 10.6. Podsumowanie 372 11. Ciasteczko zagłady - studium przypadku eksploitacji routera 373 11.1. Wstęp 375 11.2. Konsola 375 11.3. Architektura MIPS 379 11.4. Ciasteczko i ból brzucha 381 11.5. Co w trawie piszczy 383 11.5.1. Funkcja sub_80244E88 386 11.5.2. Funkcja sub_802CF6E8 389 11.5.3. Funkcja sub_802457D0 394 11.5.4. Argumenty dla funkcji sub_8024281C 396 11.5.5. Funkcja sub_8024281C 398 11.6. Wykorzystanie podatności 400 11.6.1. Adres docelowy 401 11.7. Podsumowanie 404 Bibliografia 406 12. W pogoni za flagą - eksploitacja na systemach Windows i Linux 407 12.1. Wstęp 409 12.2. Lokalne testowanie rozwiązań 410 12.3. Multipurpose Calculation Machine (średnio trudne) 411 12.4. Memory (łatwe) 424 12.5. Crypto Machine (średnio trudne) 433 12.6. Quarantine (bardzo trudne) 444 12.7. Night Sky (bardzo trudne) 461 12.8. Bubblegum (bardzo trudne) 480 12.9. Antipasto (łatwe) 501 12.10. Entree (średnio trudne) 511 12.11. Podsumowanie 518 Bibliografia 518 Indeks

Dodaj do koszyka Praktyczna inżynieria wsteczna. Metody, techniki i narzędzia

Code, Publish & WebDesing by CATALIST.com.pl



(c) 2005-2025 CATALIST agencja interaktywna, znaki firmowe należą do wydawnictwa Helion S.A.