作者 星均,高德开发工程师
本文目的是作为工具类文章,收集整理了一些 FRIDA 的使用技巧和用例,方便同学们在开发使用过程中开袋即食。
frida 的基础教程可以直接参看官网说明。
https://www.frida.re/docs/examples/android/?spm=a2c4e.11153940.blogcont690210.16.662657859DHOCA
Python 部分
JS 中文支持
使用 codecs.open(scriptpath, "r", "utf-8") 打开文件读取 js 即可。
获取指定 UID 设备
device = frida.get_device_manager().get_device("094fdb0a0b0df7f8")
获取远程设备
mgr = frida.get_device_manager()
device = mgr.add_remote_device("30.137.25.128:13355")
启动调试进程
pid = device.spawn([packename])
process = device.attach(pid)
script = process.create_script(jscode)
script.on('message', on_message)
script.load()
device.resume(pid)
python 与 js 交互的官方示例
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/9ea59b14eaf72a01fef513ce71e51f0e.jpeg)
从 bytecode 加载脚本
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/e04209fe52a1aac34e46d5c9551df770.jpeg)
JS 部分
hook Android 短信发送 SendDataMessage
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/9455413cb4cac54f8fe3a4717c800dea.jpeg)
定时执行函数
1.setTimeout 延迟执行一次
setTimeout(funcA, 15000);
2.setInterval 间隔循环执行
var id_ = setInterval(funcB, 15000);
clearInterval(id_); // 终止
bin array 转字符串
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/12baec6deac6328b13279ab8c1db4785.jpeg)
自己封装输出函数加入线程ID 和时间
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/7406ef604f3f3e29b0af523a766b06e5.jpeg)
打印 Android Java 层堆栈
var showStacks = function () {
Java.perform(function () {
dmLogout(Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new())); // 打印堆栈
});
}
TracerPid fgets 反调试
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/bf7b60e01ca8bc09aeacf5085fbcf732.jpeg)
反调试时读取 LR 寄存器溯源
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/39842ca9bc2a66e1e2d37a3e8b97ab61.jpeg)
hook JNI API NewStringUTF
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/c188d606cf287df44dde276afa3761b4.jpeg)
hook JNI API GetStringUTFChars
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/cadf62062f9a75a9130f6d1228bdace2.jpeg)
循环输出参数的值
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/ccf1917c53b7aee5c08adc4933ec860f.jpeg)
hook Android URI 打印堆栈
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/d1c90449dbe66dd00d1a5cef20102aea.jpeg)
hook KXmlSerializer 拼装内容
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/d397bd2de150b14145379604e001bb9e.jpeg)
hook Android Log 输出
![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/7b47d9bd82109785cd8d0524b7e58e4f.jpeg)
native 主动调用
如果觉得本文还不错,点击好看一下!