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学习完毕嘿嘿,
开个玩笑( •̀ ω •́ )✧