Android逆向之Android逆向工具介紹


Android逆向之Android逆向工具介紹

Android逆向之Android逆向工具介紹

  1. Android逆向第一天介紹

  2. Android APK文件結構 問題:Android APK的入口函數是什么? Android 系統歷史

  3. SDK工具­adb,monitor adb的使用 adb命令 monitor操作

  4. 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 反編譯工具

  5. Android逆向分析方法

  6. 字符串分析法­實例­破解一個apk的流程 破解步驟 使用AndroidKiller用字符串分析法

  7. Smali代碼­HelloWorld

  8. 日志過濾法­實例 使用Monitor過濾日志 使用AndroidKiller過濾日志

  9. 配置環境問題 Android逆向之Android逆向工具介紹 夜神模擬器adb連接

0.Android逆向第一天介紹

  1. Android APK文件結構

  2. SDK工具­adb,monitor

  3. 逆向工具介紹

  4. Android逆向分析方法

  5. 字符串分析法­實例­破解一個apk的流程

  6. 日志過濾分析法

  7. 配置環境問題

1.Android APK文件結構

android studio生成的apk在以下目錄

1569219017387

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

1569219035675

META­INF目錄 簽名信息,包括公司信息、文件的HASH值 Res目錄 資源信息,包括圖片、xml(布局文件、字符串、風格樣式等)

AndroidMainfest.xml 清單文件,包括APK包名、四大組件的一些申明定義、權限、程 序的入口

Classes.dex 可執行文件,包括java的類信息、方法信息、字段信息、虛擬機指令。 dex文件的生成流程是從java源碼­>class文件­>dex文件

Resources.arsc 資源序號文件,包括資源里的所有ID、名稱。資源ID對應文件是

R.class

1569219369759

android studo 3.2,所在的目錄

1569219393120

Lib目錄 動態庫,擴展名是.so ,包括C++代碼,有各種平台,比如x86,arm

1569219432552

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

1569219450701

問題:Android APK的入口函數是什么?

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

1569219525527

所以一個app最早執行的函數是 application的類中的attachBaseContext函數

一般apk加固之后,都會自定義application類,並重寫其中的attachBaseContext函數 或onCreate函數,並且聲明為native類型的函數。 app運行的流程

1569219553293

Android 系統歷史

分為三個階段

① android2.3~4.0 卡頓

② android4.1~4.4 成長,飛躍 android虛擬機dalvik­>art

③ android5.0~現在 整體不錯

逆向分析的環境

系統:android 4.4 (同時有dalvik和art) 手機: google nexus 5(二手 200左右)

2.SDK工具­adb,monitor

adb的使用

需要在SDK文件中找到adb,

方法一:設置目錄到path環境變量中 F:\Android\Sdk\platform-tools

方法二:

1.新建一個環境變量,變量名:ANDROID_HOME,變量值:以你安裝目錄為准(我的為F:\Android\Sdk),確認里面有tools和add-ons等多個文件夾,點擊確認。

2.修改PATH環境變量:后面新增;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools;%ANDROID_HOME%\build-tools\29.0.2(注意最前面的分號,分割)

然后cmd輸入adb測試。不需要重啟。能找到就是成功了。

adb命令

① 列舉設備 adb devices

② 將apk上傳到設備、下載文件到PC

adb push

1569221557317

adb pull

1569221576954

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

1569221596811

以調試方式啟動apk adb shell am start ­D ­n <包名/activity名稱> (以調試方式啟動)

1569221612242

⑤ shell命令

使用 adb shell 進入 安卓命令行,可以在命令行使用Linux命令

ls,cd,su,ps,ps | grep com,kill,chmod

monitor操作

① 概況

androidstudio中打開

1569221653439

文件目錄中打開

1569221673408

主要窗口

1569221691892

② 設備列表

1569221705912

③ 文件夾操作

1569221722885

④ 日志

1569221739910

過濾日志

1569221779896

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匿名內部類:類中對象​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

4.apk反編譯工具­apktool

反編譯apk

java ­jar apktool.jar d java ­jar apktool.jar d HelloWorld.apk ①將清單文件以及其他xml文件解密 ②將資源序號文件(resources.arsc)與資源名稱做了一個對應關系表 生成在了/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文件反編譯為源碼)

1569221932482

②可視化工具

1.AndroidKiller工具(集成了反編譯、回編譯、安裝apk、查看源碼)

第一次打開的時候需要配置一下jdk的路徑

1569221961567

AndroidKiller中集成了好幾個工具:

apktool, dex2jar工具集,adb,jd­gui

apktool 所在目錄:AndroidKiller_v1.3.1\bin\apktool\apktool

1569221989830

在Androidkiller中設置新的apktool

1569222000747

1569222008299

1569222014120

1569222022472

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源碼

1569222060306

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

1569222075098

編碼轉換

1569222086204

1569222095878

2.JEB反編譯工具

1569222110866

3.Jadx­GUI

1569222124563

4.GDA 反編譯工具

1569222141923

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提供了這個功能

1569222228618

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

1569222260186

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

1569222275397

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

1569222289296

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

1569222303365

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

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

1569222365040

7.日志過濾法­實例

使用Monitor過濾日志

①添加過濾項

1569222398073

②搜索過濾

1569222414019

使用AndroidKiller過濾日志

1569222431001

1569222444640

8.配置環境問題

1569222466990

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM