Wszystkie wpisy

Post

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.

Post

Dwie struktury PEB w procesie

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.

Post

Dwa słowa o kartach Mifare

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.

Post

Garncarstwo a programowanie

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

Post

MD5 implementacja w C++

MD5 implementacja w C++: prosta implementacja algorytmu MD5 bez makr, oparta na constexpr. Kod z zadania CTF, opis funkcji process_block i ograniczeń.

Post

Sprintf a wydajność

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.

Post

Kontenery STL a pamięć

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.

Post

Programowanie dynamiczne #2

Programowanie dynamiczne na przykładzie Longest Common Subsequence (LCS): tabela, wzór rekurencyjny, odtwarzanie najdłuższego wspólnego podciągu, Python i C++.

Post

Programowanie dynamiczne #1

Programowanie dynamiczne na przykładzie Longest Increasing Sequence: rozbicie problemu na podproblemy i wyznaczenie najdłuższego podciągu rosnącego.

Post

Zadanie rekrutacyjne #4

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.

Post

Zadanie rekrutacyjne #3

Zadanie rekrutacyjne w Pythonie: policz elementy listy jednokierunkowej, mając dowolny węzeł. Rozwiązanie szuka referencji do obiektu przez garbage collector.

Post

Zadanie rekrutacyjne #2

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.

Post

Zadanie rekrutacyjne #1

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.

Post

Podręczne narzędzia #4 (USB)

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.

Post

c++ Komentarze i inne pułapki

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.

Post

Wzbogacanie kontrolek WPF #1

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.

Post

Async command #2

AsyncCommand w C# z opóźnionym wykonaniem (debouncing): klasa DelayedSingleCommand resetuje licznik przy kolejnym wywołaniu, wspiera SynchronizationContext.

Post

Async command #1

Async command w .NET: klasa LimitedRepetCommand ograniczająca częstotliwość wykonywania akcji z użyciem SynchronizationContext. Kod C# i testy jednostkowe.

Post

Podręczne narzędzia #3

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.

Post

Java pułapka

Java pułapka: komentarz ze znakiem Unicode \u000d wykonuje kod. Kompilator dekoduje sekwencje Unicode przed analizą leksykalną, więc komentarz staje się kodem.

Post

Podręczne narzędzia #2

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.