Android逆向基礎

來源:互聯網
上載者:User

標籤:檔案格式   push   sys   system   errors   dalvik   png   開發   簽名資訊   

  1. Android APK檔案結構
問題:那麼Android APK的入口函數是什嗎?
Android 系統曆史
2. SDK工具-adb,monitor
adb命令
monitor操作
3. Android逆向工具
①命令列工具
1.AndroidManifest.xml資訊清單檔解密工具
2.Dex檔案反組譯碼、彙編工具
3.apk簽名工具
4.apk反編譯工具-apktool
5.Dex2jar工具(轉換檔格式)
6.Java反編譯工具(將java檔案反編譯為源碼)
②視覺化檢視
1.AndroidKiller工具(整合了反編譯、回編譯、安裝apk、查看源碼)
2.JEB反編譯工具
3.Jadx-GUI
4.GDA 反編譯工具
4. Android逆向分析方法
5. 字串分析法-執行個體-破解一個apk的流程
破解步驟
使用AndroidKiller用字串分析法
6. Smali代碼-HelloWorld
7. 日誌過濾法-執行個體
使用Monitor過濾日誌
使用AndroidKiller過濾日誌
8. 配置環境問題
夜神模擬器adb串連0. Android逆向基本介紹
  1. Android APK檔案結構
  2. SDK工具-adb,monitor
  3. 逆向工具介紹
  4. Android逆向分析方法
  5. 字串分析法-執行個體-破解一個apk的流程
  6. 日誌過濾分析法
  7. 配置環境問題
1. Android APK檔案結構

基本的APK是一個壓縮包,壓縮包中有

META-INF目錄: 簽名資訊,包括公司資訊、檔案的HASH值
Res目錄: 資源資訊,包括圖片、xml(布局檔案、字串、風格樣式等)
AndroidMainfest.xml :資訊清單檔,包括APK包名、四大組件的一些申明定義、許可權、程式的入口
Classes.dex: 可執行檔,包括java的類資訊、方法資訊、欄位資訊、虛擬機器指令。dex檔案的產生流程是從java源碼->class檔案->dex檔案
Resources.arsc: 資源序號檔案,包括資源裡的所有ID、名稱。資源ID對應檔案是R.class

在Android studio 中,開啟apk檔案,在Lib目錄 動態庫,副檔名是.so ,包括C++代碼,有各種平台,比如x86,arm

Assets目錄 自訂資源,比如.txt,mp4,等等

問題:那麼Android APK的入口函數是什嗎?

自己定義的MainActivity中onCreate
而且資訊清單檔中application節點可以添加android:name屬性,指定繼承自application的類,用於初始化整個app的全域資訊。
繼承自application的類有兩個重寫函數會執行,是程式最早執行的函數。
① attachBaseContext
② onCreate


所以一個app最早執行的函數是 application的類中的attachBaseContext函數
一般apk加固之後,都會自訂application類,並重寫其中的attachBaseContext函數或onCreate函數,並且聲明為native類型的函數。
app啟動並執行流程

Android 系統曆史

分為三個階段
① android2.3~4.0 卡頓
② android4.1~4.4 成長,飛躍
android虛擬機器dalvik->art
③ android5.0~現在 整體不錯
逆向分析的環境
系統:android 4.4 (同時有dalvik和art)
手機: google nexus 4/5(500左右)
google nexus 6p(800左右)

2. SDK工具-adb,monitoradb命令

① 列舉裝置
adb devices
② 將apk上傳到裝置
adb push

③ 安裝apk
adb install -r apk檔案名稱 (可以覆蓋安裝)
④ 啟動apk
adb shell am start -n <包名/activity名稱>

adb -s emulator-5556 shell am start -n com.bluelesson.helloworldndk21/.MainActivity

adb shell am start -D -n <包名/activity名稱> (以調試方式啟動)
⑤ shell命令
ls,cd,su,ps,ps | grep com,kill,chmod

monitor操作

① 概況

  • androidstudio中開啟
  • 檔案目錄中開啟
  • 主要視窗

    ② 裝置列表

    ③ 檔案夾操作

    ④ 日誌

    過濾日誌
3. Android逆向工具①命令列工具1.AndroidManifest.xml資訊清單檔解密工具
  • AXMLPrinter2.jar
    java -jar AXMLPrinter2.jar <資訊清單檔>
    java -jar AXMLPrinter2.jar AndroidManifest.xml > out.xml
  • APK15PBParser.jar(整合了AXMLPrinter2.jar,apktool.jar中xml解析部分代碼)
    java -jar APK15PBParser.jar
    java -jar APK15PBParser.jar HelloWorld1.apk
2.Dex檔案反組譯碼、彙編工具

Dex檔案是android java代碼編譯產生的二進位檔案,包含了虛擬機器指令(dalvik虛擬機器)

  • Baksmali.jar(反組譯碼工具,將虛擬機器指令反組譯碼成smali代碼)
    java -jar baksmali.jar -o <輸出目錄>
    java -jar baksmali.jar classes.dex -o out_dir
    反組譯碼產生的目錄中,包括所有dex檔案中的類代碼,每一個類就是一個smali檔案。
    Java中有三種類,外部類、內部類、匿名類
    外部類:MainActivity.java -> MainActivity.smali
    內部類:MainActivity類中MyOnClickListener類 MainActivity$MyOnClickListener.smali
    匿名內部類:MainActivity類中new OnClickListener對象 -> MainActivity$1.smali
  • smali.jar(彙編工具,將smali代碼彙編產生dex檔案)
    java -jar smali.jar <目錄> -o 檔案名稱
    java -jar smali.jar out_dir -o out.dex
    修改smali代碼,#號是注釋代碼
    // # if-eqz v2, :cond_24
3.apk簽名工具

簽名工具,使用android系統源碼編譯時間用到的一個工具
java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apk
簽名工具:signapk.jar
金鑰組:公開金鑰testkey.x509.pem,私密金鑰 testkey.pk8
簽名:java -jar signapk.jar testkey.x509.pem testkey.pk8 代簽名.apk 已簽名.apk
簽名工具的配置
開啟發送到的檔案夾:shell:sendto
java -jar 全路徑 \signapk.jar 全路徑 \testkey.x509.pem 全路徑\testkey.pk8 %1 %1_signed.apk

4.apk反編譯工具-apktool

反編譯apk
java -jar apktool.jar d
java -jar apktool.jar d HelloWorld.apk
①將資訊清單檔解密
②將資源序號檔案與資源名稱做了一個對應關係表
產生在了/res/values/public.xml
③將dex檔案反編譯成了smali代碼

回編譯 apk目錄
java -jar apktool.jar b <反編譯的apk檔案目錄>
java -jar apktool.jar b HelloWorld
產生的APK在 <反編譯的apk檔案目錄>/dist目錄中

5.Dex2jar工具(轉換檔格式)

dex2jar>d2j-dex2jar.bat
dex2jar>d2j-dex2jar.bat classes.dex
dex2jar classes.dex -> .\classes-dex2jar.jar

6.Java反編譯工具(將java檔案反編譯為源碼)

②視覺化檢視1.AndroidKiller工具(整合了反編譯、回編譯、安裝apk、查看源碼)
  • apktool
    所在目錄:AndroidKiller_v1.3.1\bin\apktool\apktool

    AndroidKiller SDK環境

    在Androidkiller中設定新的apktool



  • adb工具
    常用命令
    開啟shell:adb shell , adb -s 裝置名稱 shell
    安裝apk: adb install 1.apk , adb install -r 1.apk
    列舉裝置: adb devices

  • dex2jar工具集
    將dex檔案轉成jar檔案,方便jd-gui反編譯

  • jd-gui工具
    可以查看smali代碼對應的java源碼

    此外還有一些好工具的協助工具輔助

    編碼轉換

2.JEB反編譯工具

3.Jadx-GUI

4.GDA 反編譯工具

4. Android逆向分析方法

① 字串分析法
② 日誌分析法
③ 動態調試smali, 動態調試so檔案(c++產生的檔案)
④ API下斷(調試so,對linux API下斷),棧回溯分析

5. 字串分析法-執行個體-破解一個apk的流程破解步驟
  1. 拿到apk
  2. 使用反編譯工具進行反編譯
  3. 根據apk運行提示,尋找字串
  4. 尋找字串進行分析,找關鍵代碼修改
  5. 使用重打包工具進行重打包
  6. 使用簽名工具進行簽名
使用AndroidKiller用字串分析法

但是需要注意的是,中文字串在Android是以Unicode編碼方式顯示的,格式類似\u4e0d\u597d\u610f\u601d。我們需要進行轉換,AndroidkKiller提供了這個功能

通過尋找到對應代碼,然後在代碼附近可以發現顯示成功的字串。在成功字串上面有關鍵跳轉,我們只需要將關鍵跳轉nop掉即可。其實在smali使用#號注釋掉即可。

在代碼的上方,應該就是正確密碼比對的地方,查看上下文發現v2寄存器,使用資源ID中擷取的一個字串。

在這個時候,一般在工程中搜尋資源ID,從資源ID找到對應的資源名稱以及類型,然後再根據類型和名稱找到對應資源的定義。

然後再去搜尋對應資源名稱,找到字串定義,因為已經知道類型是sting,直接可以查看檔案res/values/strings.xml。

之後,重新編譯,安裝測試。

6. Smali代碼-HelloWorld
.class public LHelloWorld;#Ye olde hello world application#To assemble and run this on a phone or emulator:##java -jar smali.jar -o classes.dex HelloWorld.smali#zip HelloWorld.zip classes.dex#adb push HelloWorld.zip /data/local#adb shell dalvikvm -cp /data/local/HelloWorld.zip HelloWorld##if you get out of memory type errors when running smali.jar, try#java -Xmx512m -jar smali.jar HelloWorld.smali#instead.super Ljava/lang/Object;.method public static main([Ljava/lang/String;)V    .registers 2    sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;    const-string    v1, "Hello World!"    invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V    return-void.end method

7. 日誌過濾法-執行個體使用Monitor過濾日誌

①添加過濾項

②搜尋過濾

使用AndroidKiller過濾日誌


8. 配置環境問題夜神模擬器adb串連


複製androidkiller中的adb以及dll,到SDK目錄、夜神安裝目錄

 

Android逆向基礎

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.