dynamic-instrumentation
Instrumentacja binarna w czasie rzeczywistym – monitoruj i analizuj kod bez dostępu do źródła
Instalacja
Wybierz klienta i sklonuj repozytorium do odpowiedniego katalogu skilli.
Instalacja
O skillu
Skill do dynamicznej instrumentacji binarnej oparty na infrastrukturze LLVM. Pozwala modyfikować zachowanie programów w trakcie wykonania, wstawiać kod analityczny w dowolne punkty i monitorować przebieg działania aplikacji. Idealne do budowy narzędzi do analizy runtime'owej, systemów pomiaru pokrycia kodu, profilerów i monitorów bezpieczeństwa. Obejmuje praktyczną wiedzę na temat QBDI (QuarkslaB Dynamic Binary Instrumentation), Instrew i binopt – narzędzi opartych na LLVM do szybkiej instrumentacji i optymalizacji kodu binarnego.
Jak używać
Zainstaluj QBDI (QuarkslaB Dynamic Binary Instrumentation) – główne narzędzie do instrumentacji binarnej opisane w skill'u. Pobierz je z oficjalnego repozytorium QuarkslaB i skompiluj lub zainstaluj prebudowaną wersję dla twojego systemu operacyjnego.
Przygotuj funkcję callback'u do obsługi instrukcji. Utwórz funkcję w stylu
onInstruction, która będzie wywoływana dla każdej instrukcji maszynowej. Funkcja powinna przyjmować referencję do VM, stan rejestrów (GPR i FPR) oraz wskaźnik na dane użytkownika. Wewnątrz callback'u możesz odczytać informacje o bieżącej instrukcji (adres, mnemonik, operandy) za pomocąvm.getInstAnalysis().Zainicjalizuj maszynę wirtualną QBDI i przydziel pamięć dla stosu. Utwórz instancję
QBDI::VM, a następnie zaalokuj wirtualny stos za pomocąQBDI::allocateVirtualStack()z wymaganym rozmiarem (np. 0x100000 bajtów).Zarejestruj callback instrukcji w maszynie wirtualnej. Użyj metody
vm.addCodeCB()z flagąQBDI::PREINST(aby callback wykonał się przed instrukcją) i przekaż funkcję callback'u oraz wskaźnik na dane użytkownika.Wykonaj funkcję docelową wewnątrz VM. Wywołaj
vm.call()z adresem funkcji, którą chcesz monitorować, oraz listą argumentów. VM będzie śledzić każdą instrukcję i wywoływać twój callback dla każdej z nich.Przetwórz wyniki z callback'u. Dane zebrane w callback'u (adresy instrukcji, dostępy do pamięci, zmienne stanu) możesz logować, analizować lub przekazać do systemu monitorowania w celu budowy profilu wykonania, mapy pokrycia kodu lub wykrywania anomalii bezpieczeństwa.