6

Cel:Bezpieczna Java z reverse-engineering pomocą szyfrowania gatunek przemysł

Bezpieczne mojej aplikacji Java z inżynierii odwrotnej.

Idea:

  1. podzielić program na dwie połówki (załadunek i programowych)
  2. ładowarka będzie regularny Jar
  3. program będzie zaszyfrowany plik jar (BouncyCastle, AES?)
  4. program ładujący się prosi o bezpieczny serwer (https) dla klucza do odkodowania programu
  5. program ładujący dekoduje program i ładuje jego klasy

Pytania:

numeru, 5 możliwe?
Czy ktoś tutaj to zrobił?
Czy znasz już bibliotekę?
Czy zauważysz poważne pułapki/czy zrobiłbyś to inaczej?

Extra

wiem, że to niemożliwe, aby zapobiec pełną reverse engineering kodu.
Po prostu chcę, aby było to trudniejsze i łatwiejsze do prześledzenia.

+1

Wygląda na to, że powinno być możliwe. Nie sądzę, że byłoby to trudne, ale należy poczekać, aż program ładujący odszyfruje program i zapisze go na dysku ... – Bwmat

+0

Odwrócić strukturę zwykłego słoika, zdekodować program i zapisać go do pliku klasy, a następnie ponownie wykonać inżynierię odwrotną –

+0

@ Bwmat, "program" będzie tylko w pamięci. Nigdy na dysku. – Frankie

Odpowiedz

1

Jest to bardzo możliwe dzięki klasowym ładowarkom. Ale nadal bardzo łatwo jest rozszyfrować program. Wystarczy zmienić program ładujący, aby zapisać wszystkie klasy na dysku, zanim załaduje je do pamięci za pomocą niestandardowej klasy ClassLoader.

Aktualizacja

Jeśli ładowarka jest coś, użytkownicy mogą wykonywać wtedy po prostu trzeba dekompilacji i zastąpić plik Loader JAR zrzucić zajęcia na dysku. Nie tylko jestem pewien, że musi istnieć coś, co może zrzucić zrzut pamięci JVM i wyprowadzić cały załadowany kod bajtowy.

Jeśli program ładujący znajduje się na zablokowanym komputerze, do którego użytkownicy nie mogą uzyskać dostępu, jaki jest przypadek użycia, który próbujesz rozwiązać?

W „rozwiązania” tych problemów są:

  1. Użyj zaawansowanego obfuscator, który jest przeznaczony do złamania decompilers.
  2. Uniemożliwić dostęp do samych plików JAR. Za pośrednictwem list ACL na komputerze lub poprzez użycie zdalnego serwera do wykonania kodu, który chcesz zabezpieczyć. Zasadniczo to działa w aplikacjach internetowych. Może istnieć znaczna ilość adresów IP lub przetwarzania, które Stackoverflow robi, ale nigdy nie mielibyśmy dostępu do przetwarzania back-end, na podstawie wyników User Experience.
+0

weź pod uwagę, że chcesz ponownie utworzyć program ładujący, który uruchomisz - na innym komputerze, który nie byłby autoryzowany przez serwer zdalny. Czy masz lepsze rozwiązanie (używając Java)? Dzięki. – Frankie

+0

@Frankie Dlaczego miałby być uruchamiany na innym komputerze? Czy twój program ładujący znajduje się na komputerze, do którego nikt nie miałby dostępu? Jeśli tak, to dlaczego martwisz się dekompilacją? –

+0

@Frankie Czy maszyna działająca z ładowarką jest w jakiś sposób ograniczona? Co powstrzyma atakującego przed zrobieniem zhakowanego słoja ładowniczego i umieszczeniem go z powrotem na oryginalnym komputerze? – matts

Powiązane problemy