Frida Javascript api #NativeFunction #NativeCallback 与 #SystemFunction (中文版)

原文链接: https://frida.re/docs/javascript-api/#nativefunction
欢迎加入 Frida 交流群: 1049977261

NativeFunction

  • new NativeFunction(address, returnType, argTypes[, abi]):
    创建一个用于调用 NativePointer 类型的 address 处的方法的 NativeFunction 对象, returnType 指明了返回值的类型, argTypes 数组指明了参数类型. 如果不是系统的默认值, 您也可以提供可选的 abi 参数. 对于参数可变的方法, 请在固定参数与可变参数之间加上 '...' 条目.

    Structs & Classes by Value

    至于按值传递的结构或类, 请提供一个包含结构的字段类型的数组, 而不是字符串.
    您可以将它们层层嵌套, 以表示结构内部的结构.
    注意, 返回的对象也是一个 NativePointer, 因此可以将其传递给 Interceptor#attach.

    它必须严格匹配结构或者类, 所以如果您有一个三个整型的结构, 您必须传入 ['int', 'int', 'int'].

    对于有虚拟方法的类, 第一个参数必须是 vtable 的指针.

    对于涉及到返回值比 Process.pointerSize 要大的 C++ 场景, 第一个参数必须是用于预分配空间的 NativePointer. (例如, WebKit 中常见的场景)

    例如:

// LargeObject HandyClass::friendlyFunctionName();
var friendlyFunctionName = new NativeFunction(friendlyFunctionPtr,
    'void', ['pointer', 'pointer']);
var returnValue = Memory.alloc(sizeOfLargeObject);
friendlyFunctionName(returnValue, thisPtr);
### Supported Types

-   void
-   pointer
-   int
-   uint
-   long
-   ulong
-   char
-   uchar
-   float
-   double
-   int8
-   uint8
-   int16
-   uint16
-   int32
-   uint32
-   int64
-   uint64
-   bool

### Supported ABIs

-   default

-   Windows 32-bit:
    -   sysv
    -   stdcall
    -   thiscall
    -   fastcall
    -   mscdecl

- Windows 64-bit:
    -   win64

- UNIX x86:
    -   sysv
    -   unix64

- UNIX ARM:
    -   sysv
    -   vfp
  • new NativeFunction(address, returnType, argTypes[, options]):
    类似于前一个构造器, 但第四个参数 options 是一个包含一个或多个以下键的对象:

    • abi: 和上面一样的枚举.
    • scheduling: 字符串类型的调度行为, 仅限于:
      • cooperative:
        允许其他线程在调用原生函数时执行JavaScript代码.
        即在调用之前放开锁, 然后再重新获取它. 这是默认行为.
      • exclusive:
        禁止其他线程在调用原生函数时执行JavaScript代码.
        即持续占有 JavaScript 锁. 这会更快一些, 但有可能导致死锁.
    • exceptions: 字符串类型的异常行为, 仅限于:
      • steal:
        如果被调用的方法抛出了一个原生异常, 例如对一个无效的指针撤销引用, Frida 将调整栈堆并拦截这个异常, 将其转换成一个可以被处理的 JavaScript 异常. 这有可能导致应用处于未定义的状态, 但在试验时能有效避免进程崩溃. 这是默认行为.
      • propagate:
        让应用处理调用方法期间的任何原生异常.(或者让通过Process.setExceptionHandler() 安装的异常处理器进行处理)
    • traps: 字符串类型的, 待启用的代码陷阱. 仅限于:
      • default:
        Interceptor.attach() 回调将在任意方法触发钩子时被调用.
      • all:
        作为 Interceptor 回调的补充, Stalker 也可以在每个方法调用时临时激活. 在某些情况下这很有用, 比如在引导一个模糊器时测量代码覆盖率, 在调试器中实现 "step into" 功能, 等等.
        注意, 这在使用 JavaObjC api 时也是有可能的, 因为方法包装器同样提供了 clone(options) API 用来配合自定义选项创建新的方法包装器.

NativeCallback

  • new NativeCallback(func, returnType, argTypes[, abi]):
    创建一个新的 NativeCallback 并将 JavaScript 方法 func 作为其实现方式, returnType 指明了返回值的类型, argTypes 数组指明了参数类型.
    如果不是系统的默认值, 您也可以提供可选的 abi 参数.
    关于受支持的类型和 abi 请参考 NativeFunction.
    注意, 返回的对象也是一个 NativePointer, 因此可以将其传递给 Interceptor#replace.
    当与 Interceptor#replace() 一起使用时, func 将伴随有多个实用属性的 this 参数一起被调用, 类似于 Interceptor#attach().

SystemFunction

  • new SystemFunction(address, returnType, argTypes[, abi]):
    类似于 NativeFunction, 但它提供了线程最后一个错误状态的快照.
    返回的值是一个包裹着实际返回值作为 value 的对象, 以及一个平台相关的字段, UNIX 上是 errno, 而 Windows 上则是 lastError.

  • new SystemFunction(address, returnType, argTypes[, options]):
    和上面一样, 但是像 NativeFunction 对应的构造器一样接受一个 options 对象.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,113评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,644评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,340评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,449评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,445评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,166评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,442评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,105评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,601评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,066评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,161评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,792评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,351评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,352评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,584评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,618评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,916评论 2 344