小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

安卓軟件逆向工程基礎概念

 西北望msm66g9f 2018-10-11

code小生,一個專注 Android 領域的技術平臺

公眾號回復 Android 加入我的安卓技術群

作者:Salvatorer
鏈接:https://www.jianshu.com/p/fc60324295f4
聲明:本文已獲
Salvatorer授權發(fā)表,轉發(fā)等請聯(lián)系原作者授權

一、APK編譯打包生成過程

第一步:打包資源文件,生成R.java文件

【輸入】Resource文件(就是工程中res中的文件)、Assets文件(相當于另外一種資源,這種資源Android系統(tǒng)并不像對res中的文件那樣優(yōu)化它)、AndroidManifest.xml文件(包名就是從這里讀取的,因為生成R.java文件需要包名)、Android基礎類庫(Android.jar文件)

【輸出】打包好的資源(一般在Android工程的bin目錄可以看到一個叫resources.ap_的文件就是它了)、R.java文件(在gen目錄中,大家應該很熟悉了)

【工具】aapt工具,它的路徑在${ANDROID_SDK_HOME}/platform-tools/aapt(如果你使用的是Windows系統(tǒng),按慣例路徑應該這樣寫:%ANDROID_SDK_HOME%\platform-tools\aapt.exe,下同)。

第二步:處理AIDL文件,生成對應的.java文件(當然,有很多工程沒有用到AIDL,那這個過程就可以省了)

【輸入】源碼文件、aidl文件、framework.aidl文件

【輸出】對應的.java文件

【工具】aidl工具

第三步:編譯Java文件,生成對應的.class文件

【輸入】源碼文件(包括R.java和AIDL生成的.java文件)、庫文件(.jar文件)

【輸出】.class文件

【工具】javac工具

第四步:把.class文件轉化成Davik VM支持的.dex文件

【輸入】 .class文件(包括Aidl生成.class文件,R生成的.class文件,源文件生成的.class文件),庫文件(.jar文件)

【輸出】.dex文件

【工具】javac工具

第五步:打包生成未簽名的.apk文件

【輸入】打包后的資源文件、打包后類文件(.dex文件)、libs文件(包括.so文件,當然很多工程都沒有這樣的文件,如果你不使用C/C++開發(fā)的話)

【輸出】未簽名的.apk文件

【工具】apkbuilder工具

第六步:對未簽名.apk文件進行簽名

【輸入】未簽名的.apk文件

【輸出】簽名的.apk文件

【工具】jarsigner

第七步:對簽名后的.apk文件進行對齊處理(不進行對齊處理是不能發(fā)布到 Google Market 的)

【輸入】簽名后的.apk文件

【輸出】對齊后的.apk文件

【工具】zipalign工具

二、名詞解釋

雖然 Android 程序由 Java 編寫,但是不是運行在 Java 虛擬機上,而是運行在 Dalvik 虛擬機上。

傳統(tǒng)的 Java 程序經(jīng)過編譯,生成 Java 字節(jié)碼保存在 class 文件中,Java 虛擬機通過解碼 class 文件中的內(nèi)容來運行程序。而 Dalvik 虛擬機運行的是 Dalvik 字節(jié)碼,所有的 Dalvik 字節(jié)碼由 Java 字節(jié)碼轉換而來,并被打包到一個 DEX 可執(zhí)行文件中。Dalvik 虛擬機通過解釋 DEX 文件來執(zhí)行這些字節(jié)碼。

class 文件是 Java 文件編譯后生成的可以執(zhí)行的 Java 字節(jié)碼文件,是 Java 虛擬機的可執(zhí)行文件。

dex 文件是 Android 字節(jié)碼文件(機器語言),是 Dalvik 虛擬機可執(zhí)行文件,對比 class 文件由 Java 虛擬機執(zhí)行。(目標程序)

smali文件(語言) 是將 Android 字節(jié)碼用可閱讀的字符串形式表現(xiàn)出來的一種語言,可以稱之為 Android 字節(jié)碼的反匯編語言。使用 baksmali或 apktool 可以將 Android 應用程序包(apk 或 jar)反匯編為 smali 代碼。文件里面存放的是 smali 匯編代碼。(匯編代碼)

反匯編就是輸入二進制文件或可執(zhí)行文件輸出匯編代碼的過程,反編譯通常是輸出高級語言。

逆向過程

方法一、APK 解壓生成 dex 文件,用 dex2jar 得到 jar 文件,用 jd-gui 查看 jar 文件源代碼。

方法二、用 Apktool 反編譯 APK 得到 smali 文件,修改 smali 代碼,重新打包成 APK。

學好 smali 這門匯編語言是逆向的基礎。

分享技術我是認真的

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多