應用安全裏面有壹個概念叫完整性,指的是程序或數據不能被攻擊者惡意篡改。根據篡改時刻的不同,我們有兩類方式來破壞應用的完整性:靜態和動態。
在安卓上,靜態的篡改方式是反編譯apk,修改或添加代碼後重打包,用戶只要安裝了這個修改過的apk,運行時攻擊者的代碼就會被加載到進程空間。
動態的篡改方法就是hook。如果我要篡改代碼,那麽我要實現的就是在程序將要執行某段邏輯的時候控制它去執行我的代碼,這個行為就叫hook。
壹個運行時的程序表現形式是進程,代碼跟數據都放在自己的進程裏面。那麽問題來了,操作系統隔離了進程,我的代碼在我的進程裏,別人的代碼在別人的進程裏,別人的進程是不能跳到我的進程來執行我的代碼的,這怎麽辦呢,所以要先想辦法把代碼註入到別人的進程裏。之前提到的重打包也算是壹種靜態的註入方法,動態的註入方法在安卓上與Linux的***享庫註入是類似的,這種方法網上用的最多的應該是看雪的古河發布的libinject。另外還有Xposed,它采取了壹種特殊的註入方法,是動靜結合的。