Podręczne narzędzia #5
Podręczne narzędzia: NetworkMiner do analizy ruchu sieciowego, VirusTotal Uploader, RegShot do śledzenia zmian w rejestrze Windows i zaciemnianie JavaScript.
Podręczne narzędzia: NetworkMiner do analizy ruchu sieciowego, VirusTotal Uploader, RegShot do śledzenia zmian w rejestrze Windows i zaciemnianie JavaScript.
Dwie struktury PEB w procesie WOW64 w Windows: adres zwracany przez NtQueryInformationProcess zależy od tego, czy proces analizujący jest 32 czy 64-bitowy.
Nieudokumentowane zachowanie WinApi: CreateToolhelp32Snapshot zwraca inne sterty 32-bitowego procesu, gdy narzędzie diagnostyczne jest skompilowane jako x64.
Algorytm KMP (Knuth-Morris-Pratt) do wyszukiwania wzorca w tekście: prefikso-sufiksy, tablice MPNext i KMPNext, implementacja Morrisa-Pratta i KMP w Pythonie.
Wyszukiwanie wzorca w tekście algorytmem naiwnym: implementacja w Pythonie, złożoność O(mn) i porównanie z algorytmami Knuth-Morris-Pratt i Boyer-Moore.
Karty zbliżeniowe MIFARE Classic i Ultralight: norma ISO/IEC 14443, mapa pamięci i bezpieczeństwo. Obsługa kart w Pythonie z czytnikiem ACR122 przez ramki APDU.
Garncarstwo a programowanie: cytat z Art & Fear o grupach ocenianych za ilość i za jakość. Nauka przez praktykę, błędy i proporcje między teorią a praktyką.
MD5 implementacja w C++: prosta implementacja algorytmu MD5 bez makr, oparta na constexpr. Kod z zadania CTF, opis funkcji process_block i ograniczeń.
Sprintf a wydajność w C++: jak formatowanie logów przez sprintf spowalnia aplikację. Przy liczeniu 5 mln skrótów MD5 szybkość spada z 8 do 0,47 mln hash/s.
Kontenery STL a pamięć: własny allocator śledzący alokacje i zużycie pamięci przez std::set, std::unordered_set, std::vector i std::list w trybie 32 i 64 bit.
Programowanie dynamiczne na przykładzie Longest Common Subsequence (LCS): tabela, wzór rekurencyjny, odtwarzanie najdłuższego wspólnego podciągu, Python i C++.
Programowanie dynamiczne na przykładzie Longest Increasing Sequence: rozbicie problemu na podproblemy i wyznaczenie najdłuższego podciągu rosnącego.
Zadanie rekrutacyjne C++: najmniejsza liczba uint32_t spoza zbioru. Sortowanie, zliczanie, std::set, std::unordered_set i podział zakresu, z analizą złożoności.
Zadanie rekrutacyjne w Pythonie: policz elementy listy jednokierunkowej, mając dowolny węzeł. Rozwiązanie szuka referencji do obiektu przez garbage collector.
Wykrywanie cyklu w liście jednokierunkowej w C++: rozwiązanie z hash set, wersja niszcząca i algorytm żółwia i zająca Floyda. Złożoność czasowa i pamięciowa.
Zadanie rekrutacyjne w C++: policz ustawione bity w liczbie. Cztery rozwiązania: std::bitset, dzielenie, przesuwanie bitów i tablica wartości dla każdego bajtu.
Podręczne narzędzia USB: Free USB Analyzer do podglądu deskryptorów, USBPcap z Wiresharkiem do podsłuchu transmisji oraz Zadig do instalacji WinUSB i libusb.
Pułapki w C++: komentarz zakończony ??/ skleja się z kolejną linią i zmienia wynik. Trigrafy i digrafy, ich zamiana przed kompilacją i usunięcie w C++17.
Wzbogacanie kontrolek WPF w MVVM: attached property ScrollToLast dla ListBox, która przewija listę do ostatniego elementu bez code behind. Przykład w C# i XAML.
AsyncCommand w C# z opóźnionym wykonaniem (debouncing): klasa DelayedSingleCommand resetuje licznik przy kolejnym wywołaniu, wspiera SynchronizationContext.
Async command w .NET: klasa LimitedRepetCommand ograniczająca częstotliwość wykonywania akcji z użyciem SynchronizationContext. Kod C# i testy jednostkowe.
Enum w C# z czytelnymi opisami w ComboBox WinForms: atrybut Description, metoda pomocnicza GetValueDescriptionEnumerable i bindowanie enum do listy wyboru.
Pluginy do Notepad++: Compare do porównywania plików, Hex Editor, MultiClipboard, Explorer z panelem ulubionych oraz JSTool i XMLTools do pracy z JSON i XML.
Java pułapka: komentarz ze znakiem Unicode \u000d wykonuje kod. Kompilator dekoduje sekwencje Unicode przed analizą leksykalną, więc komentarz staje się kodem.
Narzędzia do pracy z tekstem w Windows: WinGnu32 z portami unixowych programów (grep, sed, gawk) oraz Windows Grep do wyszukiwania tekstu w wielu plikach.