iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 8
0
Security

Android System Security系列 第 8

[Day 8] Android smali compare with java code

你膩

在下忍者哈...根大子

昨天大概描述了smali code的一些format

包括常數或是物件型態等等

還有方法的一些訊息

是不是public拉 有沒有帶參數進去拉

甚至回傳值是啥 型態又是什麼

那今天就來跟java code對照一下

驗證一下看smali的邏輯是不是正確

先上MainActivity的smali code
這裡看起來像是Global variable的initializtion

屬性都是private之外
mLocationListener昨天說的因為有$的關係
所以他是在MainActivity裡面的一個類別

讓我們對照Java

差不多可以適應smali了對吧

那下面是LocationListener必須實做的方法之一
onLocationChanged的smali

依照昨天的format法則
推斷他是public void onLocationChanged(Location location)
裡面也有const-string的字串"Locatoin:\n"
而且他還是透過StringBuilder去append起來的
裡面還有呼叫取得經緯度的方法
invoke-virtual {p1}, Landroid/location/Location;->getLongitude()D
return type: D 表示回傳型態為double 來表示經緯度的精確值

對照一下java code

484很會看smali了呢
之後不需要再轉成java就可以讀懂整個程式邏輯了呢

最後我還在看的時候發現

還覺得奇怪為啥要實做onPause方法
過太久了都忘記了
稍微看一下才知道原來是一些checkPermission的機制
然後後面就是因為瘋狂抓位置其實也挺消耗能源的
所以在生命週期的onPause階段先把updater關掉暫停位置的更新

那今天就比對完兩個差異性之後
相信接下來路程會順利一些QQ

我是來世胸胸的...
我們下次見


上一篇
[Day 7] Android Reverse Application - SMALI
下一篇
[Day 9] Android Debug Bridge
系列文
Android System Security30

尚未有邦友留言

立即登入留言