Jakie byłoby najlepsze podejście do porównywania dwóch podpisów heksadecymalnych pod względem podobieństwa.Podejście programistyczne w Javie do porównywania plików
Dokładniej, chciałbym wykonać szesnastkową reprezentację pliku .exe i porównać ją z serią sygnatur wirusów. W tym podejściu planuję złamać reprezentację heksadecymalną pliku (exe) w poszczególne grupy N znaków (tj. 10 znaków szesnastkowych) i zrobić to samo z podpisem wirusa. Mam zamiar przeprowadzić heurystykę, a zatem statystycznie sprawdzić, czy plik exe ma X% podobieństwa w stosunku do znanego sygnatury wirusów.
Najprostszym i najprawdopodobniej błędnym sposobem, w jaki myślałem o zrobieniu tego, jest porównanie exe [n, n-1] z wirusem [n, n-1], gdzie każdy element w tablicy jest podtablicą, a zatem exe1 [0,9] przeciwko wirusowi1 [0,9]. Każdy podzbiór zostanie oceniony statystycznie.
Jak można sobie wyobrazić, byłaby ogromna liczba porównań, a co za tym idzie, bardzo powolna. Zastanawiałem się, czy zapytać, czy potraficie wymyślić lepsze podejście do takiego porównania, na przykład wspólnie wdrażając różne struktury danych.
To jest dla projektu robię dla mojego BSc, gdzie próbuję opracować algorytm do wykrywania polimorficznego szkodliwego oprogramowania, to tylko jedna część całego systemu, gdzie druga jest oparta na algorytmach genetycznych, aby rozwinąć statyczny wirus podpis. Wszelkie rady, uwagi lub ogólne informacje, takie jak zasoby, są bardzo mile widziane.
Definicja: polimorficzne złośliwego oprogramowania (wirusy, robaki, ...) utrzymuje taką samą funkcjonalność i ładowność jako ich „oryginalnej” wersji, mając najwyraźniej różne struktury (warianty). Osiągają to poprzez obfuskację kodu i tym samym zmieniają swój podpis heksagonalny. Niektóre z technik stosowanych do polimorfizmu są; zmiana formatu (wstaw usuń puste), zmienna zmiana nazwy, reorganizacja instrukcji, dodawanie nowego kodu, zastępowanie instrukcji (x = 1 zmiana na x = y/5 gdzie y = 5), zamiana instrukcji sterujących. Tak jak wirus grypy mutuje, a zatem szczepienie nie jest skuteczne, polimorficzne szkodliwe oprogramowanie mutuje, aby uniknąć wykrycia.
Aktualizacja: Po radzę chłopaki dali mi w odniesieniu do jakich czytanie zrobić; Zrobiłem to, ale nieco mnie to zdezorientowało. Znalazłem kilka algorytmów odległości, które można zastosować do mojego problemu, takie jak;
- Najdłuższy wspólny podciąg
- algorytm Levenshteina
- Needleman-Wunsch algorytm
- Smith-Waterman algorithm
- Boyer Moore algorytm
- Algorytm Aho-Corasick
Ale teraz don Wiedząc, z czego korzystać, wszystkie wydają się robić to samo na różne sposoby. Będę kontynuować badania, aby lepiej zrozumieć każdego; ale w międzyczasie mógłbyś dać mi swoją opinię na temat which might be more suitable
, abym mógł nadać mu priorytet podczas moich badań i pogłębić to badanie.
Aktualizacja 2: skończyło się używając konglomerat z LCSubsequence, LCSubstring i Odległość Levenshteina. Dziękuję wszystkim za sugestie.
Istnieje egzemplarz gotowego papieru na GitHub
Definiowanie złośliwego oprogramowania polimorficznego. –
Zdecydowanie przeczytać na "Najdłuższy wspólny podciąg" i "Najdłuższy wspólny podciąg" – Pace
@Pace; Pozdrawiam kumpla, źle to zrobię – Carlos