哪些方法/调用执行磁盘I / O操作以及如何查找它们?

时间:2015-07-23 07:23:58

标签: macos assembly reverse-engineering system-calls ptrace

  1. 我应该挂钩哪些方法和系统调用,所以我可以替换OS X应用程序(目标)读取和写入HD的“方式”?
  2. 我如何确定功能列表或系统调用?
  3. 添加更多上下文: 这是一个最终项目,我正在寻找建议。目标是改变OS X应用程序的行为,添加数据加密和解密功能。

    1. 我可以使用哪些工具来实现目标,为什么?
    2. 例如,假设目标应用是文本编辑。而不是将“hello world”保存为HD中的.txt文件中的纯文本,它将保存:“ifmmnXxnpme”。打开文件将显示原始文本。

1 个答案:

答案 0 :(得分:0)

我认为更好地了解或者至少意识到自己想做什么。

软件中的最低级别是存储模块之上的内核模块,即加密"数据。
在Windows中,您可以堆叠驱动程序,因此从概念上讲,您只需截取读/写调用,编辑它并将其传递给驱动程序堆栈。
在BSD下肯定有一个等效的机制,但我不确切地知道它是什么。

我认为你不想深入研究内核编程。

从用户空间应用程序的角度来看,最低级别是系统调用 用于写入和读取的系统调用分别是数字3和4(参见here),在BSD派生的操作系统中,如OS X,它们变为 2000003h 2000004h (见here) 这个IA32e是特定的,因为您使用的是Apple计算机。

文件可以通过内存映射来读取/写入,因此您也需要劫持系统调用 sys_mmap 。 这更复杂,因为您需要检测页面错误或用于实现文件映射的任何机制。

要劫持系统调用,您需要再次使用内核模块。

抽象的下一个上层是运行时,可能是Obj C运行时(直到数据,Swift仍然使用Obj C运行时AFAIK)。

Obj C应用程序使用Cocoa Framework,可以通过[NSData dataWithContentOfFile: myFileName][myData writeToFile: myFileName atomically:myAtomicalBehavior]等调用来读/写文件。
有很多Cocoa方法可以写入或从文件中读取,但在内部,框架将使用Obj C运行时中的少数方法。 我不是Cocoa内部的专家,因此您需要使用调试器并查看调用链是什么。

一旦找到"低水平"读取或写入可以使用method swizzling的文件的方法。

如果目标应用程序将代码作为库的一部分加载,这非常简单,否则您需要更聪明的技术(如直接感染或操纵其他进程的内存)。您可以谷歌搜索更多信息。

老实说,尽管可以管理,但这仍然是很多工作 您可以考虑简单地劫持一组有限的Cocoa方法,例如writeToFile NSDataNSString的类似方法,并将该项目视为正在进行的演示演示。

已经提出并回答了类似的问题here