Ghidra udostępnia funkcję różnicowania kodów, która umożliwia porównanie różnic pomiędzy dwoma plikami binarnymi o tym samym układzie adresów i pozycji. Jest to przydatne w przypadku porównań binarnych z korelacją przesunięcia jeden do jednego, ale nie koreluje kodu pod względem kontekstu i przepływu wykonania. Na szczęście możemy rozszerzyć możliwości Ghidry, instalując wtyczki takie jak BinDiffHelper1 dla doskonałego narzędzia BinDiff. Aby to zrobić, wykonaj następujące kroki:
1. Zainstaluj narzędzie do automatyzacji kompilacji Gradle w wersji 6.5, uruchamiając następujące polecenia:
- Sklonuj i skompiluj wtyczkę BinExport2 z oficjalnego repozytorium. Ta wtyczka automatyzuje proces generowania bazy danych różnic BinExport:
Proces kompilacji może zająć kilka minut. Po zakończeniu należy utworzyć plik ZIP wtyczki BinExport w folderze ~/binexport/java/BinExport.
3. W oknie projektu Ghidry przejdź do Plik | Menu Zainstaluj rozszerzenie i kliknij ikonę znaku plus (+), aby dodać plik ZIP wtyczki do folderu ~/binexport/java/BinExport/dist, jak pokazano poniżej:
- Kliknij OK i zrestartuj Ghidrę, aby zmiany wtyczki zostały zastosowane.
- W oknie terminala pobierz i zainstaluj BinDiff v6 z oficjalnej strony:
Instalacja pakietu .deb wyświetli monit o podanie ścieżki IDA Pro. Pozostaw to pole puste, aby określić, że jesteśmy zainteresowani eksperymentalnymi rozszerzeniami Ghidra.
- Sklonuj i skompiluj wtyczkę BinDiffHelper z oficjalnego repozytorium:
7. W oknie projektu Ghidry przejdź do Plik | Zainstaluj menu rozszerzenia i dodaj plik Zip wtyczki do folderu ~/BinDiffHelper/dist/, jak pokazano poniżej.
- Uruchom ponownie Ghidrę, aby zastosować zmiany wtyczek.
Różnicowanie binarne
Teraz, gdy wtyczki zostały zainstalowane, kontynuujmy laboratorium, badając proces różnicowania plików binarnych:
9. Otwórz plik programu z poprawką uczniów. Zostaniesz poproszony o wykrycie nowych rozszerzeń:
Wybierz Tak, aby skonfigurować nowe wtyczki, a w kolejnym oknie kliknij OK:
- Uruchom Auto-Analizę i zapisz projekt.
- Powtórz kroki 9 i 10, ale tym razem z plikiem programu uczniów.
- Otwórz okno wtyczki Window/BinDiffHelper. Kliknij ikonę konfiguracji, aby ustawić poprawną ścieżkę binarną BinDiff 6 (/opt/bindiff/bin/bindiff), jak pokazano poniżej:
- Otwórz poprawiony przez uczniów program, klikając ikonę „Otwórz plik do porównania”. Powinieneś teraz zobaczyć wyniki podobieństwa i pewności dla każdej funkcji. Przejdź do funkcji ViewStudentGrades na dole, zaznacz pole wyboru importu i kliknij ikonę „Importuj wybraną funkcję”.