C++ 带有反调试代码的第三方库

C++ 带有反调试代码的第三方库,c++,debugging,visual-c++,visual-studio-debugging,C++,Debugging,Visual C++,Visual Studio Debugging,我们正在为我们的程序使用第三方库(用c++编写的桌面应用程序),库受到反调试代码、加密/解密层、垃圾代码、触发异常和其他反调试技术的保护,这使得它无法在调试模式下工作(在Visual Studio 2010上) 我在库中只使用了两个函数,其余的代码越来越大,但是因为我不能在调试模式下运行它,所以开发起来越来越困难,越来越慢。所以我的问题是,什么样的实用方法可以将此库与我的应用程序分离,并使用调试支持,但仍然能够使用这两个函数,因为我们的应用程序需要它们。如果您只使用受保护库中的几个函数,您可以使

我们正在为我们的程序使用第三方库(用c++编写的桌面应用程序),库受到反调试代码、加密/解密层、垃圾代码、触发异常和其他反调试技术的保护,这使得它无法在调试模式下工作(在Visual Studio 2010上)


我在库中只使用了两个函数,其余的代码越来越大,但是因为我不能在调试模式下运行它,所以开发起来越来越困难,越来越慢。所以我的问题是,什么样的实用方法可以将此库与我的应用程序分离,并使用调试支持,但仍然能够使用这两个函数,因为我们的应用程序需要它们。

如果您只使用受保护库中的几个函数,您可以使用与受保护库中相同的接口创建自己的库,使用一些存根数据实现这些函数。

如果您需要调试库的真实行为(即,您无法模拟它),我建议您将库封装在一个小的可执行文件中,通过某种进程间通信(ZeroMQ…)发布这两个函数

在软件中,实现一个包装器,该包装器发布一个看起来像原始库的接口,并通过进程间通信调用可执行文件


由于库位于不同的可执行文件中,因此不会阻止您调试程序。

您可以尝试创建两个函数,返回一组数据的已知结果。然后可以使用数据测试应用程序,而不使用库和调试模式。我们使用这个第三方库是为了安全,数据本身不会重复,因此不可能创建一些测试数据并暂时使用它。我真的需要将它与应用程序分开。存根数据是什么意思?我没有尝试用相同的接口创建一个新的库,但我认为它会产生与反调试代码相同的结果。事实上,这听起来是一个很好的解决方案,您对性能有什么看法?对于使用boost进行进程间通信,您有什么看法?您能将其与ZeroMQ进行比较吗?速度是一个相对的概念,它取决于您的项目。如果您关心绝对性能,那么您应该仅为调试目的实现此解决方案。ZeroMQ的速度非常快,它可以使用IPC代替套接字。然而,尽管速度很快,它仍然比直拨电话慢。我从未使用过boost进程间通信,因此无法进行比较。