靜態分析android代碼, 循環與trycatch

一:閱讀dalvik字節碼,可用ida閱讀dex, 或直接文本閱讀smali文件

二:閱讀java源碼,可用dex2jar生成jar文件,再使用jd-gui來閱讀jar文件的源碼。

Android.intent.category.LAUNCHER 在程序列表中可見。

1.            application類用於組件之間傳遞全局變量在主activity啓動之前做一些工作,主activity可以通過AndroidManifest.xml中的android.intent.action.MAIN來定位。

2.            dex文件的數據結構大部分在dalvik\libdex\DexFile.h中,可以整理成ida的idc腳本來導入ida6.1中。

3.            ida分析中,imp表明該方法爲androidSDK中的API,@後爲聲明,類名與方法名用_分開,並且能識別隱參數this,由於this取代p0, 則後面的參數命名都依次-1.

4.            1.            d2j-dex2jar  xxx.apk                       2.   Ja-gui

 

Smali文件格式:

//smali文件的頭三行描述類信息

.class <訪問權限>[修飾關鍵字]<類名>

.super<父類名>

.source<源文件名>

#static fields

.field<訪問權限>static[修飾關鍵字]<字段名>:<字段類型>

#instance fields

.field<訪問權限>[修飾關鍵字]<字段名>:<字段類型>

#direct methods

.method <訪問權限> [修飾關鍵字] <方法原型>

                <.locals>              #局部變量數

                [.parameter]      #dalvik使用.parameters指定參數個數,而這表示一個參數,多個參數者出現多個.parameter.

                [.prologue]         #代碼開始處

                [.line]                    #指定該處指令在源碼中行號

                <代碼體>

.end method

#interfaces

.implements <接口名>

如何類使用註解,則生成.annotation指令

#annotation

.annotation[註解屬性]<註解類名>

[註解字段=值]

.end annotation

循環語句:

Iterator<對象><對象名> = <方法返回一個對象列表>;

For(<對象><對象名>:<對象列表>){

                [處理單個對象代碼]

}

Iterator<對象><迭代器> = <方法返回一個迭代器>;

While(<迭代器>.hasNext()){

<對象><對象名> = <迭代器>.next();

                [處理單個對象的代碼]

}

 

:goto_0

    invoke-interface{v2}, Ljava/util/Iterator;->hasNext()Z

 

    move-result v5

 

if-nez v5, :cond_0

:cond_0

    invoke-interface {v2},Ljava/util/Iterator;->next()Ljava/lang/Object;

 

    move-result-object v1

goto :goto_0

try catch:

try {

            String a = "sdf";

            Toast.makeText(this,a,Toast.LENGTH_SHORT);

            try {

                if( true ){

                    throw newNumberFormatException();

                }

            } catch (NumberFormatException e) {

                Toast.makeText(this,"number format exception", Toast.LENGTH_SHORT);

            }

        } catch (IllegalArgumentException e){

           Toast.makeText(this,"IllegalArgumentException",Toast.LENGTH_SHORT);

        }

Smali:

    .line 19

    :try_start_0

    const-string v0, "sdf"

 

    .line 20

    .local v0, "a":Ljava/lang/String;

    const/4 v2, 0x0

 

    invoke-static {p0, v0, v2},Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

    :try_end_0

    .catch Ljava/lang/IllegalArgumentException;{:try_start_0 .. :try_end_0} :catch_1

 

    .line 23

   :try_start_1

    new-instance v2,Ljava/lang/NumberFormatException;

 

    invoke-direct {v2},Ljava/lang/NumberFormatException;-><init>()V

 

    throw v2

    :try_end_1

    .catch Ljava/lang/NumberFormatException;{:try_start_1 .. :try_end_1} :catch_0

    .catch Ljava/lang/IllegalArgumentException;{:try_start_1 .. :try_end_1} :catch_1

 

    .line 25

    :catch_0

    move-exception v1

 

    .line 26

    .local v1,"e":Ljava/lang/NumberFormatException;

    :try_start_2

    const-string v2, "number format exception"

 

    const/4 v3, 0x0

 

    invoke-static {p0, v2, v3},Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;

    :try_end_2

    .catch Ljava/lang/IllegalArgumentException;{:try_start_2 .. :try_end_2} :catch_1

 

Ida6.1   ctrl+s 選擇String 搜索字符串, 選擇code搜索api

Dex2jar 轉換apk to jar,  jd-gui 查看jar源碼。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章