添加更多上下文: 这是一个最终项目,我正在寻找建议。目标是改变OS X应用程序的行为,添加数据加密和解密功能。
例如,假设目标应用是文本编辑。而不是将“hello world”保存为HD中的.txt文件中的纯文本,它将保存:“ifmmnXxnpme”。打开文件将显示原始文本。
答案 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
NSData
或NSString
的类似方法,并将该项目视为正在进行的演示演示。
已经提出并回答了类似的问题here。