美文网首页
Frida Javascript api # Module 与

Frida Javascript api # Module 与

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

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

    Module

    Module.load(), Process.enumerateModules() 等方法返回的对象.

    • name: 规范的模块名称

    • base: NativePointer 类型的基础地址

    • size: 以 byte 为单位的尺寸

    • path: 完整的文件系统路径字符串

    • enumerateImports():
      列举导入的模块, 返回一个包含以下属性的数组:

      • type: 要么是 function , 要么是 variable.
      • name: 导入名称.
      • module: 模块名称.
      • address: NativePointer 类型的绝对地址.
      • slot: 导入的模块的 NativePointer 类型的内存地址.

      对于所有导入的模块, 只有 name 属性保证会存在. 特定平台的后端将会尽力解析出其他字段, 甚至超出原始源数据提供的内容, 但不保证会成功.

    • enumerateExports():
      列举导出的模块, 返回一个包含以下属性的数组:

      • type: 要么是 function , 要么是 variable.
      • name: 导出的名称.
      • address: NativePointer 类型的绝对地址.
    • enumerateSymbols():
      列举模块的符号, 返回一个包含以下属性的数组:

      • isGlobal: 一个标志着符号是否全局可见的布尔值.
      • type: 下列字符串中的一种:
        • unknown
        • section
        • undefined (Mach-O)
        • absolute (Mach-O)
        • prebound-undefined (Mach-O)
        • indirect (Mach-O)
        • object (ELF)
        • function (ELF)
        • file (ELF)
        • common (ELF)
        • tls (ELF)
      • section: 如果有的话, 包含以下属性:
        • id: 包含分区序号(section index), 断片名称(segment name) (如果的适用的话) 以及分区名称 (与 [r2][] 的分区 ID 格式一致) 的字符串.
        • protection: 读写权限, 同 Process.enumerateRanges().
      • name: 符号名称.
      • address: NativePointer 类型的绝对地址.
      • size: 以 byte 为单位的符号尺寸, 如果有的话.
    enumerateSymbols() 仅可用于 i/macOS 以及基于 Linux 的操作系统

    我们当然也很想支持其他的平台, 所以如果您发现这个方法很实用并且想要帮我们一把, 请保持联系. You may also find the DebugSymbol API adequate, depending on your use-case.

    • enumerateRanges(protection): 类似于 Process.enumerateRanges, 但它仅限模块内.

    • findExportByName(exportName), getExportByName(exportName): 返回导出模块. 当找不到相应的模块时, find 前缀的方法返回 nullget 前缀的方法抛出异常.

    • Module.load(name): 加载指定的模块, 并返回一个 Module 对象. 如果指定的模块无法加载, 则抛出异常.

    • Module.ensureInitialized(name): 确保指定模块被初始化.
      This is important during early instrumentation, i.e. code run early in the process lifetime, to be able to safely interact with APIs. One such use-case is interacting with ObjC classes provided by a given module.

    • Module.findBaseAddress(name), Module.getBaseAddress(name):
      返回指定模块的基础地址. 当找不到相应的模块时, find 前缀的方法返回 nullget 前缀的方法抛出异常.

    • Module.findExportByName(moduleName|null, exportName),
      Module.getExportByName(moduleName|null, exportName):
      返回指定模块的导出模块的绝对地址.
      如果您不确定指定模块的名称, 您可以传入 null, 但这可能会消耗大量资源, 应当尽量避免.
      当找不到相应的模块时, find 前缀的方法返回 nullget 前缀的方法抛出异常.

    ModuleMap

    • new ModuleMap([filter]):
      创建一个针对指定地址属于哪个模块优化过的模块地图.
      创建时会对已加载的模块进行一次快照, 您可以调用 update() 来刷新这个快照.
      filter 参数是可选的, 它允许您传入一个方法用于过滤模块列表.
      这在您只关心应用本身的模块时很实用, 并且它允许您快速的检查一个地址是否属于这个应用的某一个模块. filter 方法接受一个 Module 参数并且必须对每一个应当保留在地图内的模块返回 true. 这个方法将在每一次地图更新时对已加载的各个模块执行一次.
    • has(address): 检查 address 是否属于已包含地图内的模块, 返回一个布尔值.

    • find(address), get(address):
      返回一个 address 归属的 Module 的详情.
      当找不到相应的模块时, find() 方法返回 nullget() 方法抛出异常.

    • findName(address), getName(address),
      findPath(address), getPath(address):
      类似于 find()get(), 但进返回 name 或者 path 字段.
      这意味着当您不需要其他的信息时将消耗更少的资源.

    • update(): 更新地图.
      您应当在模块被加载或者卸载时调用这个方法, 以免在过期的数据上进行操作.

    • values():
      返回一个当前地图中包含的 Module 的数组.
      返回的数组是深度复制过的并且在 update() 被调用前都不会改变.

    相关文章

      网友评论

          本文标题:Frida Javascript api # Module 与

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