Frida學習01-腳本入門
書籍:安卓Frida逆向與抓包實戰-陳佳林
作者:狐狸大劍眼鏡
Feb-22.2022
Frida腳本入門
這里做個記錄,kali上固定使用的版本是14.2.13,因為kali 的python我用pyenv死活切換不了,
掀桌o( ̄▽ ̄)ブ
在Android逆向過程中,Frida存在兩種操作模式:一種是通過命
令行直接將JavaScript腳本注入進程中,對進程進行操作,稱為
CLI(命令行)模式;另一種是使用Python進行JavaScript腳本的注
入工作,實際對進程進行操作的還是JavaScript腳本,這種操作模式稱
為RPC模式。兩種模式本質上是一樣的,最終執行Hook工作的都是
JavaScript腳本,而且核心執行注入工作的還是Frida本身,只是RPC
模式在對復雜數據的處理上可以通過RPC傳輸給Python腳本來進行,
這樣有利於減少被注入進程的性能損耗,在大規模調用中更加普遍。
IDE配置
vscode
安裝nodejs
可以使用阿里的國內鏡像進行加速。
npm config set registry https://registry.npm.taobao.org
使用定制的 cnpm (gzip 壓縮支持) 命令行工具代替默認的 npm:
npm install -g cnpm --registry=https://registry.npmmirror.com
安裝模塊
$ cnpm install [name]
使用git下載frida-agent-example倉庫並配置
git clone https://github.com/oleavr/frida-agent-example.git
cd到目錄運行
cnpm install
然后使用vscode打開此工程,在其子目錄編寫程序就有代碼提示了
// 這是我第一個frida hook腳本
setTimeout(
function () { //匿名函數
Java.perform(function () {
console.log("Hello world!")
})
})
從外層向里看,首先我們把一個匿名函數作為
參數傳給了setTimeout()函數,在這個匿名函數體中調用了Frida的
API函數Java.perform(),這個API函數本身又接受了一個匿名函數作
為參數,該匿名函數最終調用console.log()函數來打印一個"Hello
world!"字符串。這里需要調用setTimeout()方法是因為該方法將函數
注冊到JavaScript運行庫中,然后在JavaScript運行庫中調用
Java.perform()方法將函數注冊到App的Java運行庫中並在其中執行
該函數(本范例打印輸出了一條log)。
運行第一個程序
現在手機上運行frider-server
可是使用frida-ps -U 查看手機進程
android.process.media代表的是Android系統手機系統的媒體存儲
我們在這個進程上注入以attach方式注入我們的程序
frida -U -l helloworld.js android.process.media
打印出hello world!了,好了frida學習完畢嘿嘿,
開個玩笑( •̀ ω •́ )✧