美文网首页
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