iT邦幫忙

2025 iThome 鐵人賽

DAY 20
0

Smail Code 是 APKTool 把.dex byte code 轉換人類可讀的產物 主要是透過 baksmali 這個反組譯產生

基本編譯包成APK流程
https://ithelp.ithome.com.tw/upload/images/20250930/20149459IbFEytuA7b.png

java 會被javac 編譯成java Byte Code 並轉換成 DalVik ByteCode 並boundle 成 .dex 檔案並透過 AAPT tools (Android Assest Packaging Tools ) 將.dex file 與 那些Resource 檔 library 包成 APK 形式 讓Android OS 安裝

Smali 可以被 Dalvik Machine 或 ART 使用 對於攻擊者來說 是可以去修改smali code 來改變APP 的行為
像是修改條件式 來繞過驗證 或是刪除 Root 偵測的程式 等等

Smali Code & y 資料型態

先重一個簡單的calculator classes 與定義簡單 add() function 開始

Source Code

package com.example.simpleapp;
public class calculate {
    public static int add(int a, int b) {
        return a + b;
    }
}

Smali Code

.class public Lcom/example/simpleapp/MainActivity$calculator;
.super Ljava/lang/Object;
.source "MainActivity.java"

# direct methods
.method public constructor <init>()V
    .locals 0

    .line 3
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    return-void
.end method

.method public static add(II)I
    .locals 0

    add-int/2addr p0, p1

    return p0
.end method

可以先看到 第1行 .class public Lcom/example/simpleapp/MainActivity$calculator;
這裡表示 有一個 calculator Classes 在com/example/simpleapp/MainActivity 下
.local 會告訴你這裡有幾個register

invoke-direct {p0}, Ljava/lang/Object;->()V 這裡很明顯就是 calculator 繼承 Object
也就是 calculator extends Object 而進行的初始化 (隱式繼承)

看到 add(II)I 這裡表示宣告2個interger 參數並回傳 1個Interger 參數 並且 add-int/2addr p0, p1 就是把p1 的值加到P0 上去 return p0 回傳 p0 的值 到這裡 Class 與 Method 就宣告完畢

資料型態

接下來我們需要知道 Data type 在Smali 中的表示
V 就是method 沒有回傳值 (Void)
Z 表示 Boolean
C 表示 Chr 2 bytes Unicode 字元 (Chr)
B 標示 1 byte 整數 (Byte)
S 表示 2 bytes 整數 (Short)
I 表示 4 bytes 整數 (Interger)
J 表示 8 bytes 整數 (Long)
F 表示 4 bytes 浮點數 (Float)
D 表示 8 bytes 浮點數 (Double)

基本andorid 上register 是32 bit 4 個byte
如果要放 dobule 或是 long 的data 會需要2個Register

除了 Data Type 之外 還有Reference Type 來分辨Object 與 Array
L -> 表示這個是個物件
[ -> 表示著個是陣列

下半部會介紹 方法的調用與寄存器的運作


上一篇
DAY 19 Disassemble APK - Manifest
系列文
我是不可能一直學Android 絕對不會20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言