Android逆向入門&解密逆向思路

一、APK安裝包結(jié)構(gòu)概述

APK(Android Package Kit)是Android操作系統(tǒng)中應(yīng)用程序的打包格式瑰煎。一個APK文件本質(zhì)上是一個ZIP壓縮包铺然,它包含了應(yīng)用程序所需的所有資源和代碼。以下是APK安裝包的基本結(jié)構(gòu)和各個組件的簡要說明:

  1. META-INF

    • 這個目錄包含證書和簽名信息酒甸。它用于確保應(yīng)用程序的來源和完整性魄健。
  2. res

    • 資源文件夾,包含應(yīng)用程序的所有資源插勤,如圖像沽瘦、布局、動畫饮六、顏色定義其垄、字符串資源等。這些資源是應(yīng)用程序運行時使用的各種元素卤橄。
  3. assets

    • 這是一個可選的文件夾绿满,用于存儲應(yīng)用程序的額外資源,如音頻文件窟扑、視頻文件或自定義字體喇颁。這些資源不會被Android資源系統(tǒng)自動處理漏健。
  4. lib

    • 庫文件夾溺职,包含應(yīng)用程序所需的所有本地庫(.so文件)匀钧。這些庫是編譯后的C/C++代碼,可以提高應(yīng)用程序的性能软啼。
  5. AndroidManifest.xml

    • 這是一個非常重要的文件姐叁,它描述了應(yīng)用程序的所有必要信息瓦盛,如應(yīng)用程序的包名、所需權(quán)限外潜、定義的組件(如Activity原环、Service、BroadcastReceiver处窥、ContentProvider等)以及其他配置嘱吗。
  6. resources.arsc

    • 這是一個二進制文件,包含了編譯后的資源滔驾。它是由Android資源編譯器(aapt)生成的谒麦,用于提高資源訪問的速度。
  7. classes.dex

    • 這是應(yīng)用程序的Java字節(jié)碼文件哆致,它包含了應(yīng)用程序的代碼绕德。在安裝過程中,Android系統(tǒng)會將DEX文件轉(zhuǎn)換為Dalvik字節(jié)碼沽瞭,然后由Dalvik虛擬機執(zhí)行迁匠。
  8. raw

    • 這是一個可選的文件夾,用于存儲原始文件驹溃。這些文件在應(yīng)用程序中以原始形式使用城丧,不經(jīng)過Android資源系統(tǒng)處理。
  9. smali

    • Smali是一個匯編語言豌鹤,用于表示Dalvik字節(jié)碼亡哄。在某些情況下,APK文件可能包含Smali代碼布疙,這可以通過反編譯工具查看蚊惯。
  10. 原文件(原始代碼)

    • 如果APK文件被反編譯,你可能會看到原始的Java或Kotlin源代碼灵临。這些文件可以幫助你理解應(yīng)用程序的工作原理截型。
  11. 其他文件

    • APK文件可能還包含其他文件,如ProGuard混淆后的代碼儒溉、調(diào)試信息等宦焦。

二、Android逆向工具概述

要分析APK文件,你可以使用以下工具:

AndroidKiller

工具描述:AndroidKiller是一個可視化的Android反編譯工具波闹,集合了我們所熟知的多款安卓反編譯軟件酝豪。

微信截圖_20240723155119.png

下載地址:Charlott2/android-killer: 經(jīng)典的安卓反編譯工具(下載后請自行更新apktool、dex2jar精堕、jd-gui孵淘,簽名需要JDK1.8版本)

主要功能:

  1. 查看 APK 文件的詳細信息

    • 作用:顯示 APK 文件的詳細信息,如包名歹篓、版本號瘫证、權(quán)限等。
  2. 反編譯 APK 文件

    • 作用:將 APK 文件中的資源(如布局滋捶、圖片痛悯、字符串等)提取出來。
  3. 重新編譯 APK 文件

    • 作用:將修改后的資源重新打包成 APK 文件重窟。
  4. 生成 APK 文件的簽名

    • 作用:為重新編譯后的 APK 文件生成簽名。
  5. 安裝 APK 文件

    • 作用:將重新編譯后的 APK 文件安裝到設(shè)備上惧财。
  6. 卸載 APK 文件

    • 作用:卸載指定的應(yīng)用程序巡扇。

JADX-GUI

工具介紹:用于分析和修改 APK 文件中的 Java 字節(jié)碼。Jadx 支持多種功能垮衷,包括反編譯厅翔、調(diào)試、代碼查看等搀突。

工具下載:Releases · skylot/jadx (github.com)
主要功能:

  1. 反編譯 APK 文件

    • 命令:jadx <apk_file>
    • 作用:將 APK 文件中的 Java 字節(jié)碼反編譯為可讀的 Java 源代碼刀闷。
  2. 生成項目文件

    • 命令:jadx --project <apk_file>
    • 作用:將反編譯后的 Java 源代碼生成一個項目文件,可以使用 IDE 打開和編輯仰迁。
  3. 輸出到指定目錄

    • 命令:jadx -d <output_directory> <apk_file>
    • 作用:將反編譯后的 Java 源代碼輸出到指定的目錄甸昏。
      使用 Jadx 可以幫助開發(fā)者更好地理解 Android 應(yīng)用程序的工作原理,進行性能優(yōu)化徐许、安全性分析等施蜜。然而,需要注意的是雌隅,使用 Jadx 進行反向工程可能會違反應(yīng)用程序的版權(quán)和使用條款翻默,因此在使用時需要謹慎。同時恰起,Jadx 不能保證 100% 的兼容性和成功率修械,因此在進行修改和重新編譯時,需要仔細測試以確保應(yīng)用程序的穩(wěn)定性和安全性检盼。

Frida肯污、Objection

工具介紹:

  • Frida 是一個強大的、跨平臺的動態(tài)二進制插樁(Dynamic Binary Instrumentation, DBI)工具,它允許開發(fā)者在運行時對代碼進行注入仇箱、掛鉤和修改县恕。Frida 特別適用于移動應(yīng)用安全測試、逆向工程和惡意軟件分析剂桥。
  • Objection是一個基于 Frida 的 Python 庫忠烛,它提供了一個更高級別的抽象,使得使用 Frida 進行二進制插樁和逆向工程變得更加簡單和直觀权逗。Objection 允許開發(fā)者快速地對運行中的進程進行掛鉤美尸、修改內(nèi)存、調(diào)用函數(shù)等操作斟薇。

工具下載:
python端:python install frida frida-tools objection
android端:

  • 根據(jù)python安裝的版本师坎,在Github下載對應(yīng)的frida-server
  • 推送frida-server到android的/data/local/tmp目錄中
adb push frida-server /data/local/tmp
  • 啟動frida-server
# 進入命令
adb shell

# 切換root權(quán)限
su

# 進入frida-server 目錄
cd /data/local/tmp

# 授權(quán)
chmod 755 frida-server

#啟動frida-server
./frida-server

# 轉(zhuǎn)發(fā)端口
adb forward tcp:27034 tcp:27034
  • 連接frida-server服務(wù),附加需要調(diào)試的app, 進入交互界面
    objection -g [PackageName] explore

  • hook類或方法堪滨,監(jiān)聽并打印傳入?yún)?shù)胯陋、返回參數(shù)、調(diào)用棧
    objection hooking watch [class_name or class_method_name] --dump-args --dump-return --dump-backtrace

更多參見:objection-基于frida的命令行hook工具食用手冊

解密算法逆向思路

一袱箱、生撕解密代碼

使用Jadx-gui反編譯代碼遏乔,分析解密流程,將相關(guān)解密代碼復制出來发笔,并直接用java實現(xiàn)解密盟萨。

二、監(jiān)聽解密返回

利用Frida Objection Hook代碼的傳入?yún)?shù)了讨、返回值捻激,監(jiān)聽解密結(jié)果
objection hooking watch [class_name or class_method_name] --dump-args --dump-return --dump-backtrace

三、smali移花接木

  1. 反編譯目標apk程序(target.apk)前计。
  2. 確定解密相關(guān)的smali文件(target.smali)及依賴文件胞谭。
  3. 分析smali文件的類結(jié)構(gòu), 編寫對應(yīng)的java類文件(proxy.java)残炮。
  4. 編寫proxy-project韭赘, 生成新的apk程序文件(proxy.apk)。
  5. 反編譯proxy-apk文件势就, 利用target.smali替換相應(yīng)的smali文件(proxy.java)泉瞻。
  6. 利用apktool 重新生成apk程序(new-proxy.apk), 安裝到手機運行實現(xiàn)解密苞冯。

思路參見:如何運行smali文件袖牙?_smali是什么文件-CSDN博客

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市舅锄,隨后出現(xiàn)的幾起案子鞭达,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件畴蹭,死亡現(xiàn)場離奇詭異坦仍,居然都是意外死亡,警方通過查閱死者的電腦和手機叨襟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門繁扎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人糊闽,你說我怎么就攤上這事梳玫。” “怎么了右犹?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵提澎,是天一觀的道長。 經(jīng)常有香客問我念链,道長盼忌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任钓账,我火速辦了婚禮碴犬,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘梆暮。我一直安慰自己,他們只是感情好绍昂,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布啦粹。 她就那樣靜靜地躺著,像睡著了一般窘游。 火紅的嫁衣襯著肌膚如雪唠椭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天忍饰,我揣著相機與錄音贪嫂,去河邊找鬼。 笑死艾蓝,一個胖子當著我的面吹牛力崇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赢织,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼亮靴,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了于置?” 一聲冷哼從身側(cè)響起茧吊,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后搓侄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瞄桨,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年讶踪,在試婚紗的時候發(fā)現(xiàn)自己被綠了芯侥。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡俊柔,死狀恐怖筹麸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雏婶,我是刑警寧澤物赶,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站留晚,受9級特大地震影響酵紫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜错维,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一奖地、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赋焕,春花似錦参歹、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至侨嘀,卻和暖如春臭挽,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背咬腕。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工欢峰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涨共。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓纽帖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親煞赢。 傳聞我的和親對象是個殘疾皇子抛计,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內(nèi)容