天天看點

Android kotlin和java反編譯後的smali 有什麼差別?

轉載請标明出處: <a href="http://blog.csdn.net/DJY1992/article/details/72488456">http://blog.csdn.net/DJY1992/article/details/72488456</a> 本文出自:【奧特曼超人的部落格】

kotlin反編譯後的smali 有什麼差別?

以前有使用過Kotlin,後來覺得不習慣就放棄了,編譯速度也讓我有點蛋蛋的憂傷,直到今天谷歌承認之後,才對它有了點希望。

逆向的同學比較關心一個問題,“Kotlin編譯出來的smail和java編譯出來的一樣嗎?”,我忽然也很好奇,以前知道是不一樣的,但是具體有哪些改變,也不是很清楚,也沒深究速度效率和底層方面會有什麼不相同,今天就帶大家一起來了解下,具體有 哪些不同和它的運作方式 是怎樣的。

直接進入主題,首先放入Convert之後的代碼:

很常見,定義的Button,Textview,Edittext,還有給它們指派和定義方法,來看看生成的apk界面,點選效果和原生其實是一樣的。

Android kotlin和java反編譯後的smali 有什麼差別?
Android kotlin和java反編譯後的smali 有什麼差別?

ok,我們先來編譯這個包,看下底層的運作是如何操作的。

(1). 編譯後的目錄結構不同 :smail 會編譯出兩個smail_classes2 ,可以看到 kotlin 編譯到 unknown裡 ,細心的同學會發現裡面有個 install-run.zip ,最主要的是裡面包含了slice_0-classes.dex ~ slice_9-classes.dex ,這裡沒太多關注裡面的東西,接着往下走

1.1

Android kotlin和java反編譯後的smali 有什麼差別?

1.2

Android kotlin和java反編譯後的smali 有什麼差別?

(2). MainActivity 包名路徑改變了

Android kotlin和java反編譯後的smali 有什麼差別?

(3). MainActivity 類名也改變了

Android kotlin和java反編譯後的smali 有什麼差別?

(4). 發現編譯後執行位元組都是不同的,裡面到Lcom/android/tools/fd/runtime/AppInfo;-&gt;usingApkSplits

Android kotlin和java反編譯後的smali 有什麼差別?

(5). 我們來看下 smail_classes2 中,有個關鍵的類,是Server.smail,顧名思義,服務

android/tools/fd/runtime/Server$SocketServerThread 下 執行了socketServerThread,可以從圖中看到,它執行了 InstantRun ,可以大膽猜測,它是去執行了 unknown 裡的 install-run 。

Android kotlin和java反編譯後的smali 有什麼差別?

(6). 最後來看下install-run.zip 壓縮包裡面有些什麼,似乎也沒什麼東西,supportV4和V7包,還有kotlin-stdlib,annotations注解,剩下的估計是封裝切割 0~9 的classes.dex了。

Android kotlin和java反編譯後的smali 有什麼差別?

我們可以看到,用了Kotlin編譯後,裡面的類和對象,都是給了dex,這樣如果項目很大,那我們檢視起來也有一定的困難度,是以從某些方面來說,以我們熟悉的方式去破解它,不是那麼友善,但是……。

|| 版權聲明:本文為部落客杜錦陽原創文章,轉載請注明出處。

繼續閱讀