Czy można zdekompilować plik .apk systemu Android?


86

Czy użytkownicy mogą przekonwertować plik apk mojej aplikacji z powrotem na rzeczywisty kod? Jeśli tak - czy jest jakiś sposób, aby temu zapobiec?


1
Istnieje kilka metod dekompilacji APK . Po prostu częściej APKTool, jest najlepszy i najpotężniejszy. Bardzo łatwo jest modyfikować pliki apk za jego pomocą.
Taranfx

Napisałem tutaj wpis na blogu: codexplo.wordpress.com/2012/03/15/… ale znowu, byłoby trudno o zaciemniony kod ...
rokonoid


Odpowiedzi:


80

Po pierwsze, plik apk to po prostu zmodyfikowany plik jar. Więc prawdziwe pytanie brzmi: czy mogą zdekompilować pliki dex w środku. Odpowiedź jest w pewnym sensie. Istnieją już deasembler, takie jak dedexer i maĹ,ych . Możesz oczekiwać, że będą one tylko lepsze i teoretycznie ostatecznie powinna być możliwa dekompilacja do rzeczywistego źródła Java (przynajmniej czasami). Zobacz poprzednie pytanie dotyczące dekompilacji DEX do kodu źródłowego Java .

Należy pamiętać, że zaciemnianie nigdy nie działa. Wybierz dobrą licencję i postaraj się wyegzekwować ją zgodnie z prawem. Nie trać czasu na zawodne środki techniczne.


45
Nigdy nie mów nigdy. Maskowanie nie powstrzyma zdeterminowanego złodzieja, ale spowolni lub odstraszy wielu innych. Przetwarzanie za pomocą Proguard jest łatwym i NIEZAWODNYM sposobem zaciemnienia kodu, a jako bonus zoptymalizuje go. Jest zawarte w pakiecie Android SDK, więc jest polecane przez Google.
Barry Fruitman

3
Niewątpliwie zaciemnianie działa, ale musisz jaśniej zdefiniować swój cel. Oczywiście jedynym sposobem na zapewnienie prawdziwego bezpieczeństwa kodu źródłowego jest nieudzielanie nikomu dostępu do niego, serwera lub klienta. Zauważ, że Proguard nie działa dobrze na klasach, które mają odwołania w plikach XML. Aby to obejść, musisz użyć ręcznego zaciemniania.
MattC,

35

Możliwa jest dekompilacja pliku APK. Ale zrozumienie kodu może być trudne, jeśli jest zaciemniony.

ApkTool do przeglądania zasobów w pliku APK

  • Wyodrębnia plik AndroidManifest.xml i wszystko w folderze res (pliki układu xml, obrazy, pliki HTML używane w przeglądarce internetowej itp.)
  • Komenda : apktool.bat d sampleApp.apk
  • UWAGA: Możesz to osiągnąć za pomocą narzędzia zip, takiego jak 7-zip. Ale wyodrębnia również plik .smali ze wszystkich plików .class.

Korzystanie z dex2jar

  • Generuje plik .jar z pliku .apk, potrzebujemy JD-GUI, aby wyświetlić kod źródłowy z tego pliku .jar.
  • Komenda : dex2jar sampleApp.apk

Dekompilacja .jar przy użyciu JD-GUI

  • dekompiluje pliki .class (zaciemnione - w przypadku aplikacji na Androida, ale czytelny oryginalny kod jest uzyskiwany w przypadku innego pliku .jar). tzn. otrzymujemy z powrotem .java z aplikacji.

apktool nie wypluwa plików źródłowych Java! Tylko
smali

1
jak już powiedziałem w odpowiedzi, apktool tworzy .jar z .apk i musimy użyć narzędzia podobnego do JD-GUI do dekompilacji .jar, aby uzyskać pliki źródłowe .java.
gtiwari333

1
uratowałeś mi życie! co za wspaniały post! Straciłem kod przez ostatnie dwa dni z powodu awarii dysku SSD (niestety nie zobowiązałem się do gita). Jednak miałem apk, a teraz mam swoje źródło, pamiętaj, trochę inne, ale źródło!
Farcrats

3

Dodam też, że w dzisiejszych czasach można zdekompilować aplikację na Androida online, bez żadnego oprogramowania!

Oto 2 opcje dla Ciebie:


decompileandroid.com jest offline (po przesłaniu apka będziesz mieć problemy z jego ponownym pobraniem), a javadecompilers.com/apk ustawił mój apk w kolejce przez długi czas. Przeszedłem do trybu offline, a potem online, wciąż był w kolejce. Wyczyściłem całą historię przeglądania i teraz plik APK, który przesłałem po raz drugi, znajduje się w kolejce.
iOSAndroidWindowsMobileAppsDev


0

Czasami otrzymujesz uszkodzony kod, gdy używasz dex2jar/ apktool, przede wszystkim w pętlach. Aby tego uniknąć, użyj jadx , który dekompiluje kod bajtowy dalvik do kodu źródłowego java, bez tworzenia najpierw pliku .jar/ .class, jak to dex2jarma miejsce (apktool używa chyba dex2jar). Jest również open source i jest w trakcie aktywnego rozwoju. Ma nawet GUI dla fanatyków GUI. Spróbuj!


0

Czy użytkownicy mogą przekonwertować plik apk mojej aplikacji z powrotem na rzeczywisty kod?

tak.

Ludzie mogą używać różnych narzędzi, aby:

  • analiza: twój apk
  • dekodować / zhakować swój apk
    • za pomocą FDex2zrzutu dexpliku
      • następnie używając dex2jardo konwersji najar
        • następnie używając jadxdo konwertowania do javakodu źródłowego

Jeśli tak - czy jest jakiś sposób, aby temu zapobiec?

tak. Kilka (można połączyć) sposobów, aby temu zapobiec (w pewnym stopniu):

  • niski poziom: zaciemnianie kodu
    • za pomocą Androida ProGuard
  • Wysoki poziom: użyj scenariusza harden dla Androida

Więcej szczegółów można znaleźć w moim chińskim tutorialu:安卓 应用 的 安全 和 破解


0

Tak, dostępnych jest mnóstwo oprogramowania do dekompilacji pliku .apk.

Niedawno skompilowałem ostateczną listę 47 najlepszych dekompilatorów APK na mojej stronie. Ułożyłem je w 4 różne sekcje.

  1. Dekompilatory plików APK typu open source
  2. Dekompilatory APK online
  3. APK Decompiler dla Windows, Mac lub Linux
  4. Aplikacje do dekompilacji plików APK

Mam nadzieję, że ta kolekcja będzie dla Ciebie pomocna.

Link: https://www.edopedia.com/blog/best-apk-decompilers/

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.