自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android程序反編譯的方法

移動(dòng)開發(fā) Android
自我認(rèn)為這篇文章不錯(cuò),給大家推薦一下。

Apk文件的格式 Android application package文件。每個(gè)要安裝到android平臺(tái)的應(yīng)用都要被編譯打包為一個(gè)單獨(dú)的文件,后綴名為.apk,其中包含了應(yīng)用的二進(jìn)制代碼、資源、配置文件等。

apk文件實(shí)際是一個(gè)zip壓縮包,可以通過解壓縮工具解開??梢杂脄ip解開*.apk文件,下面是一個(gè)helloword的apk示例文件

  1. |– AndroidManifest.xml   
  2. |– META-INF   
  3. | |– CERT.RSA   
  4. | |– CERT.SF   
  5. | `– MANIFEST.MF   
  6. |– classes.dex   
  7. |– res   
  8. | |– drawable   
  9. | | `– icon.png   
  10. | `– layout   
  11. | `– main.xml   
  12. `– resources.arsc   

1 Manifest文件:AndroidManifest.xml是每個(gè)應(yīng)用都必須定義和包含的,它描述了應(yīng)用的名字、版本、權(quán)限、引用的庫(kù)文件等等信息[ , ],如要把a(bǔ)pk上傳到Google Market上,也要對(duì)這個(gè)xml做一些配置。注意:在apk中的xml文件是經(jīng)過壓縮的,不可以直接打開。

2 Res文件:res文件夾下為所有的資源文件。

3 resources.arsc文件:為編譯后的二進(jìn)制資源文件,許多做漢化軟件的人都是修改該文件內(nèi)的資源以實(shí)現(xiàn)軟件的漢化的。

4 META-INF目錄:META-INF目錄下存放的是簽名信息,用來(lái)保證apk包的完整性和系統(tǒng)的安全。在eclipse編譯生成一個(gè)api包時(shí),會(huì)對(duì)所有要打包的文件做一個(gè)校驗(yàn)計(jì)算,并把計(jì)算結(jié)果放在META-INF目錄下。而在OPhone平臺(tái)上安裝apk包時(shí),應(yīng)用管理器會(huì)按照同樣的算法對(duì)包里的文件做校驗(yàn),如果校驗(yàn)結(jié)果與META-INF下的內(nèi)容不一致,系統(tǒng)就不會(huì)安裝這個(gè)apk。這就保證了apk包里的文件不能被隨意替換。比如拿到一個(gè)apk包后,如果想要替換里面的一幅圖片,一段代碼, 或一段版權(quán)信息,想直接解壓縮、替換再重新打包,基本是不可能的。如此一來(lái)就給病毒感染和惡意修改增加了難度,有助于保護(hù)系 統(tǒng)的安全。

5 classes.dex是java源碼編譯后生成的java字節(jié)碼文件。但由于Android使用的dalvik虛擬機(jī)與標(biāo)準(zhǔn)的java虛擬機(jī)是不兼容的,dex文件與class文件相比,不論是文件結(jié)構(gòu)還是opcode都不一樣。

XML文件的反編譯

在apk中的xml文件是經(jīng)過壓縮的,可以通過AXMLPrinter2工具解開,具體命令為:

  1. java -jar AXMLPrinter2.jar AndroidManifest.xml   
  2. HelloAndroid程序中Manifest文件的實(shí)例:   
  3. <?xml version="1.0" encoding="utf-8"?>   
  4. <manifest    xmlns:android="http://schemas.android.com/apk/res/android"   
  5.     android:versionCode="1"   
  6.     android:versionName="1.0"   
  7.     package="name.feisky.android.test"   
  8.     >   
  9.     <application   
  10.         android:label="@7F040001"   
  11.         android:icon="@7F020000"   
  12.         >   
  13.         <activity   
  14.             android:label="@7F040001"   
  15.             android:name=".HelloAndroid"   
  16.             >   
  17.             <intent-filter   
  18.                >   
  19.                <action                     android:name="android.intent.action.MAIN"   
  20.                     >   
  21.                 </action>   
  22.                 <category                    android:name="android.intent.category.LAUNCHER"   
  23.  
  24.                     >   
  25.                 </category>   
  26.             </intent-filter>   
  27.         </activity>   
  28.     </application>   
  29.     <uses-sdk   
  30.         android:minSdkVersion="6"   
  31.         >   
  32.     </uses-sdk>   
  33. </manifest>  
  1. 而原文件為:   
  2. <?xml version="1.0" encoding="utf-8"?>   
  3. <manifest xmlns:android="http://schemas.android.com/apk/res/android"   
  4. package="name.feisky.android.test"   
  5. android:versionCode="1"   
  6. android:versionName="1.0">   
  7. <application android:icon="@drawable/icon" android:label="@string/app_name">   
  8. <activity android:name=".HelloAndroid"   
  9. android:label="@string/app_name">   
  10. <intent-filter>   
  11. <action android:name="android.intent.action.MAIN" />   
  12. <category android:name="android.intent.category.LAUNCHER" />   
  13. </intent-filter>   
  14. </activity>   
  15. </application>   
  16. <uses-sdk android:minSdkVersion="6" />   
  17. </manifest>   

#p#

classes.dex文件反編譯

classes.dex是java源碼編譯后生成的java字節(jié)碼文件。但由于Android使用的dalvik虛擬機(jī)與標(biāo)準(zhǔn)的java虛擬機(jī)是不兼容的,dex文件與class文件相比,不論是文件結(jié)構(gòu)還是opcode都不一樣。目前常見的java反編譯工具都不能處理dex文件。

Android模擬器中提供了一個(gè)dex文件的反編譯工具,dexdump。用法為首先啟動(dòng)Android模擬器,把要查看的dex文件用adb push上傳的模擬器中,然后通過adb shell登錄,找到要查看的dex文件,執(zhí)行dexdump xxx.dex。但是這樣得到的結(jié)果,其可讀性是極差的。下面介紹一個(gè)可讀性比較好的工具。

工具準(zhǔn)備:

1、把dex文件反編譯為jar文件的工具。(dex2jar)

2、把jar反編譯為java的工具。(JD-GUI)

反編譯的步驟

1、從APK中提取classes.dex文件,對(duì)APK文件解壓即可得到。 將其放到dex2jar的目錄下,打開cmd,運(yùn)行dex2jar.bat classes.dex,生成classes.dex.dex2jar.jar。

2、運(yùn)行JD-GUI工具,打開上面的jar文件,即可看到源代碼。

  1. HelloAndroid實(shí)例:  
  2. package name.feisky.android.test;   
  3. import android.app.Activity;   
  4. import android.os.Bundle;   
  5. public class HelloAndroid extends Activity   
  6. {   
  7. public void onCreate(Bundle paramBundle)   
  8. {   
  9. super.onCreate(paramBundle);   
  10. setContentView(2130903040);   
  11. }   
  12. }  

其原程序?yàn)椋?/p>

  1. package name.feisky.android.test;   
  2. import android.app.Activity;   
  3. import android.os.Bundle;   
  4. public class HelloAndroid extends Activity {   
  5. /** Called when the activity is first created. */   
  6. @Override   
  7. public void onCreate(Bundle savedInstanceState) {   
  8. super.onCreate(savedInstanceState);   
  9. setContentView(R.layout.main);   
  10. }   

【編輯推薦】

Android布局屬性詳解

Android環(huán)境變量的設(shè)置

Android 多任務(wù)多線程斷點(diǎn)下載

Android開發(fā)之旅:Android架構(gòu)

責(zé)任編輯:zhaolei 來(lái)源: 網(wǎng)絡(luò)轉(zhuǎn)載
相關(guān)推薦

2015-01-15 11:01:43

2011-05-31 14:52:13

Android 反編譯 方法

2011-05-31 14:38:04

Android 反編譯

2011-04-20 10:32:44

java反編譯

2009-06-11 13:49:30

2015-01-15 10:15:16

Android反編譯-smail語(yǔ)法

2017-11-27 15:43:49

Androidjadx反編譯

2015-07-13 15:52:18

反編譯Android APK

2017-02-20 13:54:14

Java代碼編譯

2018-05-11 10:16:41

微信小程序反編譯

2015-08-07 11:11:15

反編譯源代碼Mac

2018-05-11 10:22:05

小程序源碼分析

2021-03-07 16:31:35

Java編譯反編譯

2021-12-10 10:05:27

Java反編譯jar

2017-07-13 13:13:49

AndroidAPK反編譯

2024-05-22 09:36:42

開源NET

2009-06-11 14:11:33

代碼混淆Java反編譯

2012-11-06 10:02:04

JavaJadEclipse

2024-09-09 00:00:07

2014-09-25 10:28:02

反編譯工具Java
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)