【app逆向】Frida-rpc 的常用python脚本

2023-11-04

1.1 Frida-rpc常用脚本

在执行frida-rpc时,会涉及到先关参数类型的处理和转换,例如:

  • python程序调用时,传入参数?
  • frida的JavaScript脚本如何获取参数?
  • JavaScript的参数如何转换到 Java中所需的类型?

1.1.1 python传参

在python中给frida的JavaScript脚本传入参数时,一般有如下几种情况:

  • 字符串/整型/浮点型等直接传递。

    import frida
    
    rdev = frida.get_remote_device()
    session = rdev.attach("大姨妈")  # com.yoloho.dayima
    
    scr = """
    rpc.exports = {   
        encrypt:function(v1,v2,v3,v4,v5){
        
            console.log(v1,typeof v1);
            console.log(v2,typeof v2);
            console.log(v3,typeof v3);
            console.log(v4,typeof v4);
            console.log(v5,typeof v5);
            
            var v6 = parseInt(v5);
            console.log(v6,typeof v6);
        }
    }
    """
    script = session.create_script(scr)
    script.load()
    
    # 调用
    script.exports.encrypt(100, "wupeiqi", 19.2, -10, "-1")
    
  • 列表/字典

    import frida
    
    rdev = frida.get_remote_device()
    session = rdev.attach("大姨妈")  # com.yoloho.dayima
    
    scr = """
    rpc.exports = {   
        encrypt:function(v1,v2){
            console.log(v1,typeof v1, v1[0], v1[1]);
            console.log(v2,typeof v2, v2.name, v2.age);
            
            for(let key in v1){
                console.log(key, v1[key] )
            }
            
            for(let key in v2){
                console.log(key, v2[key] )
            }
        }
    }
    """
    script = session.create_script(scr)
    script.load()
    
    script.exports.encrypt([11, 22, 33], {"name": 123, "age": 456})
    
  • 字节,无法直接传递,需转换为列表。

    import frida
    
    rdev = frida.get_remote_device()
    session = rdev.attach("大姨妈")  # com.yoloho.dayima
    
    scr = """
    rpc.exports = {   
        encrypt:function(v1,v2){
            console.log(v1,typeof v1);
            
            // 转换为java的字节数组
            var bs = Java.array('byte',v1);
            console.log(JSON.stringify(bs))
        }
    }
    """
    script = session.create_script(scr)
    script.load()
    
    arg_bytes = "武沛齐".encode('utf-8')
    byte_list = [i for i in arg_bytes]
    script.exports.encrypt(byte_list)
    
  • 某个类的对象,无法直接传递,可以将参数传入,然后再在JavaScript调用frida api构造相关对象。

    import frida
    
    rdev = frida.get_remote_device()
    session = rdev.attach("大姨妈")  # com.yoloho.dayima
    
    scr = """
    rpc.exports = {   
        encrypt:function(v1,v2){
    
            const StringBuilder = Java.use('java.lang.StringBuilder');;
            var obj = StringBuilder.$new();
            obj.append(v1);
            obj.append(v2);
            var result = obj.toString();
            console.log(result);
        }
    }
    """
    script = session.create_script(scr)
    script.load()
    
    script.exports.encrypt("武沛齐", "666")
    

1.1.2 JavaScript

在frida的脚本中其实就用编写JavaScript代码,所以我们对于内部的执行过程完全是使用JavaScript语法来实现。

import frida

rdev = frida.get_remote_device()
session = rdev.attach("大姨妈")  # com.yoloho.dayima

scr = """
rpc.exports = {   
    encrypt:function(v1,v2){
        console.log(v1,typeof v1, v1[0], v1[1]);
        console.log(v2,typeof v2, v2.name, v2.age);
        
        for(let key in v1){
            console.log(key,v1[key])
        }
        
        for(let key in v2){
            console.log(key,v2[key])
        }
    }
}
"""
script = session.create_script(scr)
script.load()

script.exports.encrypt([11, 22, 33], {"name": 123, "age": 456})
import frida

rdev = frida.get_remote_device()
session = rdev.attach("大姨妈")  # com.yoloho.dayima

scr = """
rpc.exports = {   
    encrypt:function(bytesList){
        // [11,22,33,11,22,42,13,4]
        
        // 先处理拼接好的数据(字节数组)
        var bArr = [];
        for(var i=0;i<bytesList.length;i+=2){
            var item = (parseInt(bytesList[i],16) << 4) + parseInt(bytesList[i+1],16);
            bArr.push(item);
        }
        
        console.log(bArr);
                
        // 转换为java的字节数组
        var bs = Java.array('byte',bArr);
        

    }
}
"""
script = session.create_script(scr)
script.load()
arg_bytes = "wupeiqi".encode('utf-8')
byte_list = [i for i in arg_bytes]
script.exports.encrypt(byte_list)

1.1.3 frida相关

在编写frida的JavaScript脚本时,我们经常会:

  • 调用Java中已编写的好的类、方法等功能
  • 执行目标方法时,传入相关参数。

这种情况下,就需要使用frida相关API来完成JavaScript和Java中的调用。

import frida

rdev = frida.get_remote_device()
session = rdev.attach("大姨妈")  # com.yoloho.dayima

scr = """
rpc.exports = {   
    encrypt:function(v1,v2,v3,v4){

        // 1.整型和字符串直接用
        console.log(v1,v2);
        
        // 2.字节数组
        var v3_obj = Java.array('byte',v3);
        console.log(v3_obj, JSON.stringify(v3_obj));
        
        // 3.TreeMap对象   obj.get("xx")
        var TreeMap = Java.use("java.util.TreeMap");
        var v4_obj = TreeMap.$new();   
        for(let key in v4){
            //console.log(key,v4[key]);
            v4_obj.put(key,v4[key])
        }
        
        console.log(v4_obj)
        console.log( v4_obj.get("name") )
        console.log( v4_obj.get("age") )
        
        var keyset = v4_obj.keySet();
        var it = keyset.iterator();
        while(it.hasNext()){
            var keystr = it.next().toString();
            var valuestr = v4_obj.get(keystr).toString();
            console.log(keystr, valuestr);
        }
        
        
    }
}
"""
script = session.create_script(scr)
script.load()

v3 = [i for i in "wupeiqi".encode('utf-8')]

script.exports.encrypt(10, "wupeiqi", v3, {"name": "root", "age": "18"})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【app逆向】Frida-rpc 的常用python脚本 的相关文章

  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14
  • 使用 Python Oauthlib 通过服务帐户验证 Google API

    我不想使用适用于 Python 的 Google API 客户端库 但仍想使用 Python 访问 Google APIOauthlib https github com idan oauthlib 创建服务帐户后谷歌开发者控制台 http
  • 通过 CDN 使用 Dojo 时如何加载自定义 AMD 模块?

    我正在使用 google 的 CDN 并尝试使用他们的加载程序加载我自己的 AMD 模块 我知道我做错了什么 但我被困住了 有任何想法吗
  • 如何在react-native中获取Text组件的onPress值

    我是一名新的 React Native 开发人员 我想使用 onPress 获取 Text 组件的值并将其传递给函数
  • 嵌套作用域和 Lambda

    def funct x 4 action lambda n x n return action x funct print x 2 prints 16 我不太明白为什么2会自动分配给n n是返回的匿名函数的参数funct 完全等价的定义fu
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • 提交表单并重定向页面

    我在 SO 上看到了很多与此相关的其他问题 但没有一个对我有用 我正在尝试提交POST表单 然后将用户重定向到另一个页面 但我无法同时实现这两种情况 我可以获取重定向或帖子 但不能同时获取两者 这是我现在所拥有的
  • Angular 2+ 安全性;保护服务器上的延迟加载模块

    我有一个 Angular 2 应用程序 用户可以在其中输入个人数据 该数据在应用程序的另一部分进行分析 该部分仅适用于具有特定权限的人员 问题是我们不想让未经授权的人知道how我们正在分析这些数据 因此 如果他们能够在应用程序中查看模板 那
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • 为什么 csv.DictReader 给我一个无属性错误?

    我的 CSV 文件是 200 Service 我放入解释器的代码是 snav csv DictReader open screennavigation csv delimiter print snav fieldnames 200 for
  • 条件在反应本机生产中失败,但在开发中有效

    我创建了一个反应本机应用程序 我需要通过它进行比较 如果属实 就会执行死刑 问题是 该条件适用于 React Native 开发模式 而不适用于 React Native 生产版本 我使用 firebase 作为数据库 也使用 redux
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 如何将 Django 中的权限添加到模型并使用 shell 进行测试

    我在模型中添加了 Meta 类并同步了数据库 然后在 shell 中创建了一个对象 它返回 false 所以我真的无法理解错误在哪里或者缺少什么是否在其他文件中可能存在某种配置 class Employer User Employer in
  • pandas.read_csv 将列名移动一倍

    我正在使用位于的 ALL zip 文件here http www fec gov disclosurep PDownload do 我的目标是用它创建一个 pandas DataFrame 但是 如果我跑 data pd read csv
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中
  • pytest找不到模块[重复]

    这个问题在这里已经有答案了 我正在关注pytest 良好实践 https docs pytest org en latest explanation goodpractices html test discovery或者至少我认为我是 但是
  • JSON:TypeError:Decimal('34.3')不是JSON可序列化的[重复]

    这个问题在这里已经有答案了 我正在运行一个 SQL 查询 它返回一个小数列表 当我尝试将其转换为 JSON 时 出现类型错误 查询 res db execute SELECT CAST SUM r SalesVolume 1000 0 AS
  • fullCalendar 未显示正确的结束日期

    我正在看调试页面 http jsbin com wukofacaxu edit js outputFullCalendar 官方网站的 我想安排一个活动时间为 22 09 2015 至 30 09 2015 dd mm yyyy 但它只显示

随机推荐

  • Android RxJava:功能性操作符 全面讲解

    前言 Rxjava 由于其基于事件流的链式调用 逻辑简洁 使用简单的特点 深受各大 Android开发者的欢迎 Github截图 如果还不了解 RxJava 请看文章 Android 这是一篇 清晰 易懂的Rxjava 入门教程 RxJav
  • Python特点及优势

    Python介绍 Python由荷兰数学和计算机科学研究学会的吉多 范罗苏姆 于1990 年代初设计 作为一门叫做ABC语言的替代品 Python提供了高效的高级数据结构 还能简单有效地面向对象编程 Python语法和动态类型 以及解释型语
  • [远程办公] 通过阿里云反向代理实现内网穿透

    准备工作 购买一台阿里云服务器 新用户第一个月免费 由于仅作数据转发用 配置要求不高 除了传输带宽外 其余配置选最低的就行 内网主机 生成ssh密匙 ssh keygen 与远程主机建立免密登录ssh copy id root ip 安装依
  • docker安装tomcat,以及常用操作

    1 安装tomcat镜像 访问docker hub仓库找出你想安装的版本 docker hub 网址 https registry hub docker com 直接在搜索框里搜tomcat就可以 如果想把自己镜像放到上边就自己注册一个账号
  • Docker 搭建sonarqube,并集成阿里P3C规则

    简介 本文安装的sonarqube是7 6 community版本 未安装最新版是因为7 9之后不再支持mysql 如果你安装的是其他版本的sonarqube 那么不要使用插件包中的插件 会有版本兼容性问题 插件 插件包 插件包中包含jav
  • Android:Action 与 Data 属性

    前言 Intent 的中文翻译就是 意图 的意思 它是 Android 程序中传输数据的核心对象 在 Android 官方文档中 对 Intent 的定义是执行某操作的一个抽象描述 一个 Intent 对象实质上是一组被捆绑的信息 它可以是
  • JAVA maven 编写UDF适用于hive和impala

    hive 内置函数很少 我们可以通过自定义的方式添加新的UDF上去 来增强hive的处理能力 比如hive没有字符串包含的UDF 我们通过Java maven的方式来编写一个字符串包含的UDF 1 新建maven工程 2 修改pom xml
  • android studio升级指定版本,Android studio升级到3.3遇到的问题

    问题一 android native 的方法无法与cpp中方法关联 问题二 External Native Build Issues Error configuring 最近由于用opencv 做物体识别的demo 然后新建一个工程 含有C
  • 日志记录的几个重要地方

    在和经理聊天之前自己对日志的打印是比较随意的 没有太多的在意细节 在聊天之后发现这几个地方的日志是必须的 1 参数配置 一般项目启动时就会加载参数 日志级别为fatal 这是一定会打印的 让我们清楚的知晓参数加载的情况 2 数据进来的时候
  • springboot接口接收数组及多个参数的解决方案

    本例为个人经历 必然存在认知局限与不足 欢迎指正以及提供更好方法 若接口中需要接受数组 那么接口应该如何写呢 一般而言我们会想到 PostMapping xxxx public String test List list do sth 假设
  • 2013年计算机试题(四),2013年计算机一级考试试题(精简版):第四套

    无忧考网为大家收集整理了 2013年计算机一级考试试题 精简版 第四套 供大家参考 希望对大家有所帮助 第一部分 单选题 每小题1分 共30分 注意 打开你的考试文件夹中的EXCEL工作簿文件 单选题答题卡D XLS 将下列选择题的答案填入
  • pytorch:本地可视化服务器的tensorboard

    摘要 由于服务器上的系统是无界面系统 无法使用tensorboard进行可视化 但是可以在本地可视化服务器上的tensorboard tensorboard的安装以及命令行的使用已经在上一篇博客介绍过 这里不再阐述 不清楚的可以访问pyto
  • 基于SSM的疫苗接种平台

    末尾获取源码 开发语言 Java Java开发工具 JDK1 8 后端框架 SSM 前端 Vue 数据库 MySQL5 7和Navicat管理工具结合 服务器 Tomcat8 5 开发软件 IDEA Eclipse 是否Maven项目 是
  • 计算方法--函数插值

    文章目录 插值多项式的存在唯一性定理 1 拉格朗日插值 Lagrange 线性插值 公式 分段线性插值函数的余项 抛物插值 公式 拉格朗日插值 插值余项定理 条件 公式 误差估计 2 Newton插值公式 差商 性质 Newton插值多项式
  • 华为OD机试 - 区间交集(Java)

    题目描述 给定一组闭区间 其中部分区间存在交集 任意两个给定区间的交集 称为公共区间 如 1 2 2 3 的公共区间为 2 2 3 5 3 6 的公共区间为 3 5 公共区间之间若存在交集 则需要合并 如 1 3 3 5 区间存在交集 3
  • 实验七-通过JDBC转移异构数据库中数据

    通过ODBC JDBC转移异构数据库中数据 实验环境 Windows 10操作系统 MySQL 8 0 SQL Server 2019 eclipse2021 09 实验内容与完成情况 实验目的 学会配置ODBC JDBC数据源 熟悉使用O
  • etcd配置参数

    成员相关配置项 name data dir wal dir snapshot count heartbeat interval election timeout listen peer urls listen client urls max
  • CSS——表格和表单

    第六章 CSS的表格和表单 文章目录 第六章 CSS的表格和表单 一 表格 二 表单 总结 一 表格 表格标签 标签 描述 lt table gt 表格标签 lt tr gt 表格行标签 lt td gt 普通单元格标签 lt th gt
  • win7计算机窗口左边被改了,win7电脑开始菜单变成经典模式?三种方法教你改回来...

    今天小编一开电脑 觉得怪怪的 怎么感觉电脑桌面不太一样了 仔细一看 原来是系统开始菜单变成经典模式了 很不习惯 那怎么恢复呢 今天小编就以win7系统为例 教大家怎么改回来 方法一 1 在桌面空白处单击鼠标右键 选择个性化 2 鼠标左键单击
  • 【app逆向】Frida-rpc 的常用python脚本

    1 1 Frida rpc常用脚本 在执行frida rpc时 会涉及到先关参数类型的处理和转换 例如 python程序调用时 传入参数 frida的JavaScript脚本如何获取参数 JavaScript的参数如何转换到 Java中所需