簡體   English   中英

apk到jar轉換后如何訪問資源(R.class)

[英]how to access resources (R.class) after apk to jar conversion

我有一個APK文件。 我使用dex2jar工具將其轉換為jar文件,以獲得jar文件。 我用java decompiler打開了jar文件。 在代碼(mainactivity.java)中,有一段類似

ContentValues localContentValues = new ContentValues();
localContentValues.put("title", "testtesttest");
localContentValues.put("url", getApplicationContext().getString(2131034115));
localContentValues.put("bookmark", Integer.valueOf(1));
getContentResolver().insert(Browser.BOOKMARKS_URI, localContentValues);

這實際上是什么意思,以及如何使用Java反編譯器獲取getApplicationContext()。getString(2131034115)的實際值。 反編譯后,沒有資源文件(如.xml)。 R.java包含類似的信息

public static final class string
  {
    public static final int action_settings = 2131034114;
    public static final int app_name = 2131034112;
    public static final int baseurl = 2131034115;
    public static final int hello_world = 2131034113;
  }

baseurl的實際字符串值是多少?

使用APKTOOL反編譯后

轉到生成反編譯文件的輸出文件夾,

在該文件夾中,打開./res/values/public.xml文件。 在文件內部,您將以字符串格式獲取所有資源十六進制代碼及其ID。

謝謝。

根據您要完成的工作,您可以在此處采取兩種方法:

您已經采取的方法,即將Dalvik字節碼(dex)反編譯為可讀的Java源代碼。 下一步是使用jd-gui 結果源對於閱讀和理解應用程序的功能很有用,但可能不會產生100%的可用代碼。 換句話說,您可以閱讀源代碼,但不能真正對其進行修改和重新打包。 請注意,如果源代碼已被proguard混淆,則生成的源代碼將更難解開。

另一個主要選擇是將字節碼反匯編為smali ,這是專門為此目的設計的一種匯編語言。 我發現最簡單的方法是使用apktool 一旦安裝了apktool,就可以將其指向一個apk文件,然后您將為應用程序中包含的每個類取回一個smali文件。 您可以通過從新的Java源代碼生成smali來讀取和修改smali甚至完全替換類(為此,您可以使用javac將.java源代碼編譯為.class文件,然后使用Android的源代碼將.class文件轉換為.dex文件。 dx編譯器,然后使用baksmali(smali反匯編程序)將.dex轉換為.smali文件,如本問題所述 。此處可能有一個快捷方式)。 完成后,您可以輕松地再次用apktool將apk打包打包。 請注意,apktool不會對生成的apk進行簽名,因此您需要對待其他任何Android應用程序一樣進行處理

簡而言之,您的選擇要么是反編譯為更易讀但很可能不可逆的Java,要么是反匯編為smali(難於閱讀,但更靈活地進行更改和重新打包已修改的應用)。 您選擇哪種方法取決於您要實現的目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM