Aplikacja Szpiegowska Telefon
Monitoruj połączenia, SMS, GPS, aparat, zdjęcia, filmy, Whatsapp, Facebook itp.
W rzeczywistości oprócz analizy zasad implementacji języków java takich jak klasy wewnętrzne java i enumeracje, jest to również przydatne w niektórych konkretnych scenariuszach.Teraz odbywa się to generalnie poprzez modyfikację smal, ale można to zrobić również na podstawie kodu bajtowego, Ten artykuł jest oparty na poprzedniej analizie kodu bajtowego Java, więc omówiono tylko metodę kodu bajtowego.
Wiele samodzielnych gier, a nawet niektóre gry online, uruchamiają operacje logiczne lokalnie.Serwer otrzymuje tylko wyniki operacji przesłane przez klienta.Są też aplikacje do ładowania, w rzeczywistości wszystkie funkcje są w lokalnym kodzie, tylko Ale to jest ocena, czy jest płatność, a jeśli jest płatność, zostanie wyświetlony wpis funkcji.
Jeśli możemy zmodyfikować jego kod i zmienić wynik przesyłania lub osąd, czy płacić za to, co chcemy, możemy robić, co chcemy.
dekompilować
Aby zmodyfikować logikę kodu aplikacji, musimy najpierw przeanalizować, jaka jest oryginalna logika kodu, jednak ponieważ kod aplikacji jest prywatną własnością każdej firmy, o ile kod nie jest wyciekiem, generalnie nie możemy go uzyskać. tym razem możemy użyć tylko technik dekompilacji.
Aplikacja Szpiegowska Telefon
Monitoruj połączenia, SMS, GPS, aparat, zdjęcia, filmy, Whatsapp, Facebook itp.
Jeśli przejdziesz do Internetu, aby wyszukać technologię dekompilacji apk, prawdopodobnie znajdziesz następujące metody:
- Użyj narzędzia apktool, aby wyodrębnić apk
- Użyj narzędzia dex2jar, aby przekonwertować pliki dex zoptymalizowane pod kątem systemu Android na klasy java
- Użyj narzędzia jd-gui, aby wyświetlić kod Java w klasie
Taka kłopotliwa operacja jest właściwie przestarzała.Wprowadzę dla każdego narzędzie do obsługi jednym kliknięciem.
jadx to narzędzie do dekompilacji Androida o otwartym kodzie źródłowym, jego kod jest hostowany na github, możesz go pobrać i używać.Użycie jest bardzo proste, po pobraniu, rozpakuj go, a następnie wejdź do katalogu bin, aby uruchomić jadx-gui (linux/mac ) lub jadx-gui.bat (windows), możesz uruchomić interfejs wizualny, następnie kliknąć "Plik - Otwórz" i wybrać aplikację, którą chcemy zdekompilować, możesz zobaczyć kod w apk
Aplikacja demonstracyjna jest dekompilowana tutaj, a jej MainActivity.onCreate ocenia zmienną flagi, a następnie wyskakuje Toast.Kiedy zainstalujemy ten apk i uruchomimy go, zobaczymy, że wyskakuje toast: „hello world!"
Inne aplikacje są podobne, możesz wyświetlić ich kod w ten sposób.Jednak oficjalnie wydane aplikacje zazwyczaj wykonują operacje zaciemniania.W tym czasie nazwa klasy, nazwa metody i nazwa zmiennej kodu, który dekompilujemy i przetwarzamy, zmienią się w a, b, c jest znakiem bez znaczenia.
Ale zmieniła się tylko nazwa, logika wykonania jest dokładnie taka sama, więc jeśli jesteś wystarczająco ostrożny, nadal możesz zrozumieć logikę kodu.
Jadx ma potężną funkcję, która może eksportować projekt Gradle, kliknij „Plik/Zapisz jako Projekt Gradle", aby wyeksportować projekt Gradle, a następnie zmienić strukturę katalogów, możesz użyć Android Studio, aby otworzyć projekt i edytować oraz modyfikować kod.
Jeśli kompilacja po modyfikacji się powiedzie, to nasz cel został osiągnięty i możemy robić, co chcemy, ale ten projekt ma duże prawdopodobieństwo, że nie uda się skompilować pomyślnie i jest wiele dziwnych błędów.
Następnie zabiorę Cię do rozszyfrowania tego apka krok po kroku, zmodyfikowania jego logiki, nie grania w „hello world!", ale grania w „hello java".
Zmodyfikuj kod bajtowy aplikacji
Możemy użyć jadx do łatwej analizy logiki kodu, ale jeśli rekompilacja się nie powiedzie, musimy pójść inną drogą.
Oto sposób na bezpośrednią edycję kodu bajtowego. Jeśli pójdziesz w ten sposób, nie będzie żadnych głupich operacji do użycia. Zróbmy to krok po kroku uczciwie
1. Rozpakuj apk
- apk jest w rzeczywistości skompresowanym pakietem zip, możemy zmienić jego sufiks na.zip, a następnie bezpośrednio go zdekompresować
- Zdekompresowane rzeczy umieszczamy w katalogu app-release-unsigned:
2. Konwertuj dex na jar
- Wszyscy wiemy, że maszyna wirtualna z Androidem nie jest zwykłą maszyną wirtualną java, nie może bezpośrednio uruchamiać plików klas java i musi być zoptymalizowana do plików dex.
- Kiedy modyfikujemy kod bajtowy, musimy go ponownie przekonwertować.Tutaj używamy funkcji dex2jar narzędzia dex-tools:
- Tutaj przedstawiam tylko użycie komend pod Linuksem, a nie pod Windowsem, w rzeczywistości jest to podobna wersja używająca.bat, możesz sam przeszukać.
- Konwertuj class.dex na plik jar:
- ~/dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh class.dex
- Wygeneruje plik class-dex2jar.jar:
3. Zmodyfikuj kod bajtowy klasy
- W rzeczywistości plik jar jest również skompresowanym pakietem zip, nadal możemy bezpośrednio zmienić sufiks na zip, a następnie rozpakować, aby znaleźć MainActivity.class
- W tej chwili możemy użyć polecenia javap wspomnianego w poprzednim artykule, aby wyświetlić kod wewnątrz:
- javap -c MainActivity
- I widzimy, że jeśli będziemy kontynuować wykonywanie, wyświetli hello world!, a jeśli przeskoczymy do 32 linii, wyświetli hello java!
- Tutaj możemy bezpośrednio zmienić if_icmpne na if_icmpeq, przejść do wiersza 32, gdy jest równy, w przeciwnym razie kontynuować wykonywanie, więc oryginalny monit "hello world!" stanie się "hello java!"
- Jeśli otworzysz plik klasy bezpośrednio w edytorze, zawiera on kilka wartości binarnych.
- Jak więc to zmodyfikować?
- Tutaj użyjemy innego narzędzia jbe, pełna nazwa to edytor kodu bajtowego java
- Po pobraniu rozpakuj go, wejdź do katalogu bin i użyj następującego polecenia, aby otworzyć interfejs graficzny:
- java ee.ioc.cs.jbe.browser.BrowserAplikacja
- Otwórz MainActivity.class w interfejsie graficznym i znajdź nasz kod MainActivity.onCreate
- Następnie kliknij opcję Code Editor, aby zmodyfikować kod bajtowy, tutaj zmieniamy if_icmpne na if_icmpeq, a następnie klikamy Save method:
- To kończy naszą modyfikację logiki
4. Przepakowanie dex
- Następnie przepakujemy apk, najpierw skompresujemy klasę do pliku zip, zwrócimy uwagę na strukturę katalogów:
- Następnie zmień sufiks na jar i użyj jar2dex do wygenerowania dex:
- ~/dex-tools-2.1-SNAPSHOT/d2j-jar2dex.sh class-dex2jar.jar
- Następnie zastąp oryginalny plik class.dex wygenerowanym plikiem dex, a następnie usuń wszystkie wygenerowane pliki tymczasowe, takie jak katalogi class-dex2jar.zip i class-dex2jar
5. Usuń informacje o podpisie
- Generalnie aplikacje, które otrzymujemy, są aplikacjami podpisanymi. Po podpisaniu aplikacji informacje weryfikacyjne zasobów i kodów zostaną zapisane w apk. Jeśli zmodyfikujemy plik dex, weryfikacja się nie powiedzie, więc apk nie będzie mógł zostać zainstalowany..
- Musimy więc usunąć oryginalny podpis, a konkretną metodą jest usunięcie trzech plików w katalogu META-INF:
- CERT.RSA
- CERT.SF
- MANIFEST.MF
6. Przepakuj apk
- Następnie ten sam skompresowany plik generuje skompresowany pakiet zip, zwróć uwagę na strukturę katalogów:
- Na koniec zmień sufiks zip na apk, a nasz apk jest spakowany
- Ponieważ nasz przepakowany apk usunął informacje o podpisie, jeśli zostanie zainstalowany bezpośrednio, zakończy się niepowodzeniem i musimy go ponownie podpisać.
- Możesz użyć następującego polecenia, aby utworzyć alias jako android.keystore, a nazwa pliku jest również plikiem podpisu android.keystore
- keytool -genkeypair -alias android.keystore -keyalg RSA -ważność 400 -keystore android.keystore
- Po naciśnięciu klawisza enter pozwoli ci wprowadzić hasła, informacje o deweloperze itp., a po zakończeniu otrzymasz plik android.keystore
- Następnie wykorzystujemy uzyskany android.keystore do ponownego podpisania aplikacji:
- jarsigner -keystore android.keystore -signedjar release.apk app-release-unsigned.apk android.keystore
- Pobierz podpisany plik release.apk, zainstalujmy go i uruchom, aby zobaczyć, że toast stał się „hello java!".