DLL监控

有没有一个应用程序,让我看到什么是从一个进程发送到DLL

我有一个进程,我有一个DLL,我想监视正在发送到函数的参数,以便我可以自己使用DLL。

DLL的EXPORT是。

?? 0CCPCompressor @@ AAE @ XZ
?? 0CCPExpandor @@ AAE @ XZ
?? 1CCPCompressor @@ AAE @ XZ
?? 1CCPExpandor @@ AAE @ XZ
?清除@ CCPCompressor @@ QAEHXZ
?清除@ CCPExpandor @@ QAEHXZ
..Compress @ CCPCompressor ..
..Delete @ CCPCompressor ..
..Delete @ CCPExpandor ..
..Expand @ CCPExpandor ..
..Free @ CCPCompressor ..
..Free @ CCPExpandor ..
..Init @ CCPCompressor ..
..Init @ CCPExpandor ..
..New @ CCPCompressor ..
..New @ CCPExpandor ..

一般来说,这是一个坏主意。 即使你有一些被捕获的参数,没有对DLL代码进行深入的分析,你也不知道如何处理这些参数以及某些方法接受的参数范围。 例如:如果我调用一个方法DoMathOperation(Add,1,2),可以模仿这个调用,但是你不能做DoMathOperation(Multiply,2,2),因为你不知道这是可能的。

最简单的方法是简单地重新定位原来的dll,并创建一个新的dll,你自己做的,出口相同。 这个DLL会LoadLibrary从另一个位置的旧DLL。

这在这里不太适用 – DLL导出c ++类成员有两个结果:c ++类必须静态加载,因为没有c ++机制将c ++函数指针(通过GetProcAddress获取)粘贴到类实例中。

这意味着你的shim dll将处于不得不导入和导出相同符号集的不幸的地方。

唯一的解决办法就是把你的dll文件分成两部分:

Shim1:

一部分会得到原始DLL的名称,并将导出相同的类定义原始的DLL导出:

class __decldpec(dllexport) CCPCompressor { ... 

取决于可以破解的名字装饰,或者Undname.exe与Visual Studio分发。

这部分将LoadLibrary()使用显式路径shimdll2.dll位于其他文件夹,以及原始的dll。 GetProcAddress()将需要导入由shimdll2.dll导出的函数

Shim2:

另一个垫片DLL将位于您要截取的DLL文件夹中。 这个DLL将不得不从原来的压缩机DLL导入类:

 class __declspec(dllimport) CCPCompressor { ... 

您可以使用由第一个dll所做的dll导入库来实际链接这些符号。 然后是一个从shim2.dll导出函数的例子,shim1.dll会在调用CCPCompressor方法时调用。

NB。 其他的东西:你的CCPCompressor类的版本至少需要一个大的虚拟数组,因为你不能从dll导出中知道应用程序期望类有多大(除非你碰巧有一个实际的头文件描述类)。


分解导出的名称以构建类定义:从“开始”>“程序”> Visual Studio 20XX – >“工具”菜单打开Visual Studio 20XX命令提示符。

 c:\...\VC>undname ?Clear@CCPCompressor@@QAEHXZ Microsoft (R) C++ Name Undecorator Undecoration of :- "?Clear@CCPCompressor@@QAEHXZ" is :- "public: int __thiscall CCPCompressor:Clear(void)" c:\...\VC>_ 

为了找出如何声明一个匹配的类def,对于从原始dll(undname接受某种文本文件来加速这个过程)的每个函数都这样做。

正在使用与您的要求相符的弯路 ?

来自网站:

概观

创新的系统研究取决于能够轻松地测试和扩展现有的操作系​​统和应用程序功能。 通过访问适当的源代码,通过重新构建操作系统或应用程序来插入新的工具或扩展通常是微不足道的。 但是,在当今世界,系统研究人员很少能够访问所有相关的源代码。

Detours是一个用于在x86,x64和IA64机器上检测任意Win32函数的库。 Detours通过重写目标函数的内存代码来拦截Win32函数。 Detours软件包还包含用于将任意DLL和数据段(称为有效载荷)附加到任何Win32二进制文件的实用程序。

Detours保留未测试的目标函数(可通过蹦床调用)作为仪器使用的子程序。 我们的蹦床设计为现有的二进制软件提供了一大类创新的扩展。

我们使用Detours创建了一个自动分布式分区系统,来测试和分析DCOM协议栈,并为基于COM的OS API创建一个thunking层。 Detours在微软和业界广泛使用。

唯一可靠的方法是调试你的程序(使用任何调试器,如OllyDBG),并设置所需的导出功能的断点。 然后你可以简单地跟踪发送给调用函数的堆栈参数。 这只是开始,您需要在调试器或反汇编器中全面分析函数指令,以查看每个参数在做什么和它的类型。