静态分析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源碼。
?
總結
以上是生活随笔為你收集整理的静态分析android代码, 循环与trycatch的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dex文件格式
- 下一篇: android arm