我正在做一个项目,用 LD_PRELOAD 在程序中注入共享库。
我的注入库在注入程序时会创建一个新线程。所有逻辑都发生在这个线程中(比如分析网络流量等等)。
首先,您需要了解正在预加载的程序。它是一个客户端应用程序,它加密每个数据包,写入静态缓冲区,然后发送到服务器。我在客户端找到了加密和发送数据包的功能,我能够绕道而行。所以现在我可以修改静态缓冲区并让“发送”函数加密缓冲区并将缓冲区发送到服务器。
但是现在我有一个问题:如果我在我的库线程中更改静态缓冲区的内容(以便我可以发送一个假数据包),同时程序的线程也更改了静态缓冲区怎么办?那会导致崩溃。
我需要某种同步。
所以我一直在想一些解决方案:
- 找到程序中更改缓冲区的每个函数,绕过它们并为该调用添加一个互斥锁或类似的东西。虽然需要很长时间......
- 找到一种方法来执行我的一段代码,在一个块中更改缓冲区。所以我的一段代码实际上是立即执行的,没有 POSIX 线程切换到其他线程。这甚至可能吗?
- 让我的应用程序同步并哭泣。
任何人都可以提出更好的解决方案吗?或者您知道如何使解决方案 2 成为可能吗?
在此先感谢,吉利斯