【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脚本 的相关文章

  • 如何修复错误嵌套/未闭合的 HTML 标签?

    我需要通过使用正确的嵌套顺序关闭任何打开的标签来清理用户提交的 HTML 我一直在寻找一种算法或Python代码来做到这一点 但除了PHP等中的一些半生不熟的实现之外 还没有找到任何东西 例如 类似的东西 p p ul li Foo bec
  • 如何在 d3.scale.ordinal() 中指定域?

    var W 100 var H 200 var data v 4 v 8 v 15 v 16 v 23 v 42 var x d3 scale linear domain 0 max x range 0 W var y d3 scale o
  • 是否可以使用 Ruby 或 Python 发出禁用锚点/引用的有效 YAML?

    是否可以禁用创建锚点和引用 并有效地显式列出冗余数据 PyYAML或者红宝石的Psych引擎 也许我在网上搜索时错过了一些东西 但似乎可用的选项并不多Psych我无法确定是否PyYAML也允许这样做 理由是我必须序列化一些数据并以可读的形式
  • 从 XML 文档生成嵌套列表

    在 python 中工作 我的目标是解析我制作的 XML 文档并创建一个嵌套的列表列表 以便稍后访问它们并解析提要 XML 文档类似于以下代码片段
  • 我从 clojure 和 python 中得到的 hmac 签名略有不同

    我从 python 实现和 clojure 实现中获得的 HMAC SHA1 签名略有不同 我很困惑什么会导致这种情况 Python实现 import hashlib import hmac print hmac new my key my
  • 使用 NumPy 查找元组列表第二个元素的中位数

    假设我有一个元组列表 如下所示 list a 1 b 3 c 5 我的目标是使用元组的第二个元素来获取元组列表中位数的第一个元素 在上面的情况下 我想要 b 的输出 因为中位数是 3 我尝试使用 NumPy 和以下代码 但无济于事 impo
  • 维基百科与 Python

    我有这个非常简单的 python 代码来读取 wikipedia api 的 xml import urllib from xml dom import minidom usock urllib urlopen http en wikipe
  • 导入 python 模块时如何解决 KeyError?

    我试图从不同的目录级别导入模块 所以我使用了 import os import sys sys path insert 0 os path abspath os path join os path dirname file 但现在我收到这个
  • 脚本内的角度范围

    我们可以使用脚本标记内范围中定义的角度变量 如下所示 HTML 代码 div div JS CODE function AngularCtrl scope scope user name John 我只是得到 scope 未定义 有人可以帮
  • Node Express 和 csurf - 403(禁止)无效的 csrf 令牌

    浏览并尝试了我在这里和其他地方通过谷歌搜索能找到的所有东西 但我就是无法克服这一点 我正在使用 Node Express EJS 并尝试在使用 jQuery ajax 发布的表单上使用 csurf 无论我如何配置 csurf 我都会收到 4
  • 应用函数创建以多列作为参数的字符串

    我有一个像这样的数据框 name size type av size type 0 John 23 Qapra 22 1 Dan 21 nuk neH 12 2 Monica 12 kahless 15 我想用一个句子创建一个新列 如下所示
  • 如何在节标题和段落之间添加额外的空格

    我希望标题和段落之间以及段落之间有更多的空间 我不希望这是一个全局设置 但我想在需要的地方和时间使用它 感谢任何建议 您可以在行首使用竖线在输出中生成空行 像这样 Heading Paragraph with text
  • 安装轮子后安装后脚本

    Using from setuptools command install import install 如果我运行 我可以轻松运行自定义安装后脚本python setup py install 这是相当微不足道 https stackov
  • 在多个 html 文件上运行 javascript

    我有一个包含 1000 个 html 文件的文件夹 我必须使用 xpath 从每个 html 中删除某些节点 所以我已经制作了javascript 我无法打开每个文件并通过 Firefox 控制台运行 javascript 我用的是linu
  • 在ubuntu 18.04上安装python 2.7

    有没有办法在 Ubuntu 18 04 上安装 Python 2 7 我尝试了这个命令 但它不起作用 sudo apt install python minimal 有没有办法手动安装 我尝试使用 python 2 7 作为不支持 pyth
  • 0x800a138f - JavaScript 运行时错误:无法获取未定义或 null 引用的属性“值”

    我编写了一段 JavaScript 代码来比较 2 个文本框中的 2 个日期 function CompareDates var fdate document getElementById txtFromDate var edate doc
  • 如何使用ajax从服务器接收返回的数据?

    基本上我有一个带有用户名文本框和提交按钮的表单 现在我想要的是 当用户在文本框中输入文本时 它应该获取文本框值并将用户名发送到服务器 以便服务器可以检查该用户名是否被任何其他用户占用 我可以将文本值发送到服务器 但我不知道如何接收回一些数据
  • 与 IPython 内核分离而不终止它

    有人可以告诉我如何在不终止 IPython 内核的情况下分离它吗 我在文档中看到quit 有一个参数keep kernel 但不幸的是quit keep kernel True 行不通的 如果您通过 IPython 控制台客户端连接到内核并
  • 未捕获的类型错误:未定义不是 indexOf 上的函数

    我目前有此代码来检查特定 ID 的网站 URL GET 选项 但每当运行此代码时 我都会收到一个奇怪的错误 Uncaught TypeError Undefined is not a function 这是我的代码 如果我能得到关于这个问题
  • JavaScript Intellisense 在 Visual Studio 2015 中不起作用

    我知道这个问题在网上以及整个网络上都有很多重复的问题 不幸的是 所提出的建议都不起作用 除了重新安装 VS 15 之外 我已经完成了所有操作 如果我可以帮助的话 我宁愿不这样做 我去过的一个网站 references js 背后的故事 ht

随机推荐

  • 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中所需