FRIDA 实用手册

640?wx_fmt=jpeg

作者 星均,高德开发工程师


本文目的是作为工具类文章,收集整理了一些 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


从 bytecode 加载脚本


640?wx_fmt=jpeg


JS 部分



hook Android 短信发送 SendDataMessage


640?wx_fmt=jpeg


定时执行函数


1.setTimeout 延迟执行一次


setTimeout(funcA, 15000);


2.setInterval 间隔循环执行


var id_ = setInterval(funcB, 15000);
clearInterval(id_);    // 终止


bin array 转字符串


640?wx_fmt=jpeg


自己封装输出函数加入线程ID 和时间


640?wx_fmt=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


反调试时读取 LR 寄存器溯源


640?wx_fmt=png


hook JNI API NewStringUTF


640?wx_fmt=png


hook JNI API GetStringUTFChars


640?wx_fmt=jpeg


循环输出参数的值


640?wx_fmt=jpeg


hook Android URI 打印堆栈


640?wx_fmt=jpeg


hook KXmlSerializer 拼装内容


640?wx_fmt=jpeg


hook Android Log 输出


640?wx_fmt=jpeg


native 主动调用


640?wx_fmt=jpeg


640?wx_fmt=png

如果觉得本文还不错,点击好看一下!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值