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