美文网首页
Frida Javascript api #NativeFunc

Frida Javascript api #NativeFunc

作者: 邓超_码农加点中 | 来源:发表于2020-02-15 18:30 被阅读0次

原文链接: 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 对象.

相关文章

网友评论

      本文标题:Frida Javascript api #NativeFunc

      本文链接:https://www.haomeiwen.com/subject/gtuyfhtx.html