【Frida】【Android】03_RPC

🛫 系列文章导航

▒ 目录 ▒

    • [🛫 系列文章导航](#🛫 系列文章导航)
    • [🛫 导读](#🛫 导读)
    • [1️⃣ Android App解释](#1️⃣ Android App解释)
    • [2️⃣ 注入的js代码](#2️⃣ 注入的js代码)
    • [3️⃣ python控制端](#3️⃣ python控制端)
    • [4️⃣ 效果](#4️⃣ 效果)
    • [🛬 文章小结](#🛬 文章小结)
    • [📖 参考资料](#📖 参考资料)

🛫 导读

开发环境

版本号 描述
文章日期 2024-03-24
操作系统 Win11 - 22H2 22621.2715
node -v v20.10.0
npm -v 10.2.3
夜神模拟器 7.0.5.8
Android 9
python 3.9.9
frida 16.2.1
frida-tools 12.3.0
objection 1.11.0

1️⃣ Android App解释

过Frida存在两种操作模式,其中第一种命令行模式在之前的章节中一直使用,在这一节中,将介绍一些关于RPC模式以及使用RPC完成自动化的相关知识。

在Frida中,可以使用Python完成JavaScript脚本对进程的注入以及相应的Hook。

Java示例代码

参考《【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446》,我们需要通过python代码完成下面两个任务:

  • 每次调用secret()函数对字符串进行扩展。
  • 获取total这个实例变量的值。

2️⃣ 注入的js代码

注意事项:

  • 整体逻辑,不用通过Java.perform(rpc测试)执行,该函数是通过对rpc.exports赋值,实现rpc的功能导出。
  • 由于目标不是静态变量,我们需要对实例进行操作,所以,需要使用Java.choose动态获取。
  • 导出的对象中,必须使用全小写作为key,否则python访问不到。
js 复制代码
function rpc测试() {
  function CallSecretFunc(){
    Java.perform(function(){
      // 动态函数主动调用
      Java.choose('com.yemao.demo.MainActivity',{
        onMatch: function(instance){
          instance.secret()
        },
        onComplete: function(){
        }
      })
    })
  }
  function getTotalValue(){
    Java.perform(function(){
      // var MainAcitivity = Java.use('com.yemao.demo.MainActivity')
      // 动态函数主动调用
      Java.choose('com.yemao.demo.MainActivity',{
        onMatch: function(instance){
          //  console.log('instance found',instance)
          // instance.secret()
          console.log('total value = ',instance.total.value)
          // console.log('secret func exec success')
        },
        onComplete: function(){
          console.log('search Complete')
        }
      })
    })
  }
  rpc.exports = {
    gettotalvalue: getTotalValue,
    callfunc: CallSecretFunc,
    CallSecretFunc: CallSecretFunc
  }
}

rpc测试()

3️⃣ python控制端

  • 由于我们使用的是模拟器,需要使用frida.get_remote_device()获取设备对象device。对于真机,使用frida.get_usb_device()。
  • 附加目标进程,使用的是device.attach,传参需要注意,一开始使用的是com.yemao.demo,没有效果。
    通过执行device.enumerate_processes(),打印所有进程,看到名称为demo,传递给device.attach才正常运行。
  • 读取js时,需要指定编码encoding='utf-8',否则会报错的。
python 复制代码
import frida

def on_message(message, data):
    if message['type'] == 'send':
        print("[*] {0}".format(message['payload']))
    else:
        print(message)


def main():
  # device = frida.get_usb_device()
  # device = frida.get_device_manager().add_remote_device('127.0.0.1:62025')
  device = frida.get_remote_device()
  print(device, device.enumerate_processes())
  # return

  # process = device.attach('com.yemao.demo')
  process = device.attach('demo')
  # process = device.attach('com.android.settings.intelligence')

  with open('./build/02.js', encoding='utf-8') as f:
      jscode = f.read()
  script = process.create_script(jscode)

  script.on('message', on_message)
  script.load()

  while True:
    command = input ("\nEnter command:\nl: Exit\n2: Call secret function\n3: Get Total Value\nchoice:")
    if command == "1":
      print('script.exports_sync = ', dir(script.exports_sync))
      break
    elif command== "2":#在这里调用
      script.exports_sync.callfunc()
    elif command == "3":
      script.exports_sync.gettotalvalue()
    elif command == "4":
      script.exports_sync.CallSecretFunc()

main()

4️⃣ 效果

测试流程:

  • 执行一次3: Get Total Value,获取修改前的total
  • 执行一次Call secret function,修改total
  • 再执行一次3: Get Total Value,获取修改后的total

    从图中可以看到,满足我们的预期,测试通过!!!

🛬 文章小结

  • 通过dir(script.exports_sync)可以打印所有的exports_sync内容['CallSecretFunc', 'callfunc', 'gettotalvalue'],这里面就是我们导出的三个函数。
    我们可以看到,其中是有区分大小写的方法CallSecretFunc的,但是如果通过rpc进行调用,又会报如下错误:

    所以,命名上,我们只可以写小写的rpc函数。

📖 参考资料

相关推荐
拥小抱2 小时前
Compose 知识点
android
文章永久免费只为良心2 小时前
Web应用安全与防护_第三章_日志文件包含_从一道 CTFshow 题目讲透「日志投毒型 LFI → RCE」:原理、时序陷阱与全变种攻防手册
android·网络安全·渗透测试·漏洞危害·漏洞描述·日志投毒·红队指南
AIsoft_86893 小时前
学术讲座录音如何整理?录音APP可行吗
android·iphone
Patrick在香港5 小时前
一个斜杠,把毫秒变成十几秒
android·数据库·python·性能优化·正则表达式·回溯·redos
海雅达手持终端PDA6 小时前
工业手持终端的“去手机化”演进:看海雅达如何以“同轴扫摄”终结工程妥协,重塑工业PDA新范式
android·物联网·智能手机·硬件工程·能源·制造·iot
booboosui7 小时前
删掉一个住在本机的 agent:8 处要清,顺序不能反
android
hcgeng8 小时前
Android获取崩溃日志
android
aqi008 小时前
AI编程让鸿蒙开发电子书APP更加快捷
android·华为·harmonyos·鸿蒙·harmony
GY-938 小时前
【Android】Android Studio 中的协程
android