2. Android逆向-Frida示例

本文介绍如何使用Frida工具在Android平台上进行Hook操作,通过实例演示了如何注入JS代码实现对应用中特定事件的拦截。首先通过简单的HelloWorld示例验证了基本流程,然后进一步展示了对按钮点击事件的Hook。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Frida例子

使用Frida尝试hook,做第一个示例代码。代码来源:r0ysue/AndroidFridaBeginnersBook

由于设备要解锁bootloader需要一台专门android设备,暂且使用genymotion模拟器进行测试(保证frida-server具有root权限)。

HelloWorld

hello_world.js 代码注入到本地android项目上的 onCreate() 方法。

$ frida -U -l hello_world.js [process_name]

js文件内容如下。

setTimeout(function(){
    Java.perform(function(){
        console.log("hello world!");
      });
  });

执行结果:

     ____
    / _  |   Frida 15.1.24 - A world-class dynamic instrumentation toolkit
   | (_| |
    > _  |   Commands:
   /_/ |_|       help      -> Displays the help system
   . . . .       object?   -> Display information about 'object'
   . . . .       exit/quit -> Exit
   . . . .
   . . . .   More info at https://frida.re/docs/home/
   . . . .
   . . . .   Connected to Google Nexus 5X (id=192.168.56.101:5555)
Attaching...                                                            
hello world!
[Google Nexus 5X::android.process.media ]->

成功打印出 hello world! 结果。

创建的demo

  1. 创建一个Demo程序,运行到虚拟机上。
  2. 针对MainActivity上两个按钮的click事件,进行hook。
  3. 使用上述同样的命令将js文件注入到进程上。
$ frida -U -l '1_mt.js' com.ruixi.android

但遇到错误提示。

     ____
    / _  |   Frida 15.1.24 - A world-class dynamic instrumentation toolkit
   | (_| |
    > _  |   Commands:
   /_/ |_|       help      -> Displays the help system
   . . . .       object?   -> Display information about 'object'
   . . . .       exit/quit -> Exit
   . . . .
   . . . .   More info at https://frida.re/docs/home/
   . . . .
   . . . .   Connected to Google Nexus 5X (id=192.168.56.101:5555)
Failed to spawn: unable to find process with name 'com.ruixi.android'

遇到这样的我问题,可以考虑使用另一个命令。

$ frida -U -f com.ruixi.android -l '1_mt.js' --no-pause
     ____
    / _  |   Frida 15.1.24 - A world-class dynamic instrumentation toolkit
   | (_| |
    > _  |   Commands:
   /_/ |_|       help      -> Displays the help system
   . . . .       object?   -> Display information about 'object'
   . . . .       exit/quit -> Exit
   . . . .
   . . . .   More info at https://frida.re/docs/home/
   . . . .
   . . . .   Connected to Google Nexus 5X (id=192.168.56.101:5555)
Spawning `com.ruixi.android`...                                         
Script loaded successfully 
Spawned `com.ruixi.android`. Resuming main thread!                      
[Google Nexus 5X::com.ruixi.android ]-> Inside java perform function
Java.Use.Successfully!
<think>好的,我现在要解决用户遇到的Frida-server启动问题,提示地址已被占用。首先,我需要确认用户的情况。用户在Android设备的/data/local/tmp目录下运行了./frida-server &,然后返回进程ID 3350,但接着显示无法绑定到127.0.0.1:27042,因为地址已被占用。这意味着该端口已经被另一个进程占用,或者之前的Frida-server没有正确关闭。 首先,我应该考虑可能的解决方法。步骤一通常是检查是否有其他Frida-server实例在运行。用户可能之前启动过但没有正确终止,或者有其他程序占用了该端口。用户可以使用ps命令查看进程,比如ps -e | grep frida-server,找到进程ID后用kill命令终止。如果kill无效,可能需要用kill -9强制终止。 如果步骤一无效,可能需要检查端口占用情况。使用netstat -tulpn | grep 27042来查找哪个进程在使用该端口。如果是其他进程,可能需要停止它或者更改Frida-server的端口。 更改端口也是一个解决办法,用户可以在启动时添加--listen参数,比如./frida-server --listen 0.0.0.0:27043,然后在客户端连接时指定新端口。不过用户需要确保客户端配置一致。 另外,检查是否有其他应用占用端口,比如其他安全软件或调试工具。关闭这些应用可能解决问题。重启设备也是一个可能的解决方案,但可能不够方便。 需要确保用户有足够的权限运行Frida-server,比如使用root权限,但根据用户的命令,可能已经是在root下运行的,所以这可能不是问题所在。 在解释这些步骤时,要确保用户明白每个命令的作用,避免误操作。比如强制终止进程可能导致数据丢失,但Frida-server通常是无状态的,所以风险较低。同时,提醒用户在更改端口后,连接工具如frida-ps也需要对应调整。 最后,总结可能的解决方案,按推荐顺序排列,先尝试终止现有进程,再检查端口,最后考虑改端口或重启。确保回答结构清晰,步骤明确,帮助用户逐步排查问题。</think>您遇到的错误信息表明Frida-server无法绑定到27042端口,因为该端口已被其他进程占用。以下是分步解决方案: 1. **确认现有frida-server进程** ```bash ps -e | grep frida-server ``` 如果看到类似`3350`的进程ID,使用: ```bash kill -9 3350 # 替换为实际PID ``` 2. **检查端口占用情况** ```bash netstat -tulpn | grep 27042 ``` 输出示例: `tcp 0 0 127.0.0.1:27042 0.0.0.0:* LISTEN 1234/frida-server` 3. **强制终止占用进程** ```bash kill -9 1234 # 替换实际进程号 ``` 4. **更换端口启动(备选方案)** ```bash ./frida-server --listen 0.0.0.0:27043 & ``` 使用时需指定端口: ```bash frida-ps -H 127.0.0.1:27043 ``` 5. **重启设备(终极方案)** 如果上述方法无效,尝试: ```bash reboot ``` **原因分析:** - 常见于非正常退出的frida-server进程残留 - 其他安全/逆向工具占用默认端口 - ADB调试端口冲突(罕见) **验证操作:** 成功启动时会显示: ```bash [1] 3350 # 仅进程号,无错误信息 ``` **注意事项:** 1. 确保使用与server版本匹配的frida-client 2. Android 10+需要关闭SELinux: ```bash setenforce 0 ``` 3. 建议使用root权限运行: ```bash su cd /data/local/tmp ./frida-server & ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚妄皆空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值