English 中文(简体)
DLL监视
原标题:DLL monitoring

有没有一个应用程序可以让我看到从进程发送到DLL的内容?

我有一个进程和一个DLL,我想监控发送到函数的参数,这样我就可以自己使用DLL了。

DLL的EXPORT为。

??0CCPCompressor@@AAE@XZ
??0CCPExpandor@@AAE@XZ
??1CCPCompressor@@AAE@XZ
??1CCPExpandor@@AAE@XZ
?Clear@CCPCompressor@@QAEHXZ
?Clear@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,因为你不知道这是可能的。

最简单的方法是简单地重新定位原始dll,并使用相同的导出创建自己制作的新dll。此dll将从备用位置加载旧dll的LoadLibrary。

这在这里并不完全适用-dll正在导出c++类成员,这有两个后果:c++类必须静态加载,因为没有c++机制将c++函数指针(通过GetProcAddress获得)粘合到类实例中。

这意味着您的填充程序dll将处于不幸的位置,必须同时导入和导出相同的符号集。

解决这一问题的唯一方法是将您的填充程序dll分为两部分:

垫片1:

其中一部分将获得原始dll的名称,并将导出与导出的原始dll相同的类定义:

 class __decldpec(dllexport) CCPCompressor {
  ...

依赖可以破解名称装饰,或者Undname.exe随Visual Studio一起分发。

这部分将使用位于其他文件夹中的shimdll2.dll的显式路径以及原始dll来加载库()。需要GetProcAddress()才能导入shimdll2.dll导出的函数

垫片2:

另一个填充程序dll将位于您试图拦截的dll所在的文件夹中。此dll必须从原始压缩器dll导入类:

class __declspec(dllimport) CCPCompressor {
  ...

You can use the dll import library made by the first dll to actually link the symbols. Then its a case of exporting functions from shim2.dll that shim1.dll will call whenever a CCPCompressor method is called.

注:。其他事项:CCPCompressor类的版本至少需要一个大的伪数组,因为你无法从dll导出中知道应用程序期望该类有多大(除非你碰巧有一个描述该类的实际头文件)。


To decompose the exported names to build a class definition: Open up the Visual Studio 20XX Command Prompt from the Start > Programs > Visual Studio 20XX -> Tools menu.

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>_

对从原始dll导出的每个函数执行此操作(undname接受某种文本文件以加快此过程),以了解如何声明匹配的类def。

正在使用绕行是否符合您的要求?

从现场:

概述

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

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

Detours保留未插入指令的目标函数(可通过蹦床调用)作为子程序供插入指令使用。我们的蹦床设计实现了对现有二进制软件的大量创新扩展。

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

唯一可靠的方法是调试程序(使用任何像OllyDBG这样的调试器),并在所需的导出函数上设置断点。然后,您可以简单地跟踪发送到调用函数的堆栈参数。这只是一个开始,您需要在调试器或反汇编程序中全面分析函数指令,以了解每个参数的作用及其类型。





相关问题
Undefined reference

I m getting this linker error. I know a way around it, but it s bugging me because another part of the project s linking fine and it s designed almost identically. First, I have namespace LCD. Then I ...

C++ Equivalent of Tidy

Is there an equivalent to tidy for HTML code for C++? I have searched on the internet, but I find nothing but C++ wrappers for tidy, etc... I think the keyword tidy is what has me hung up. I am ...

Template Classes in C++ ... a required skill set?

I m new to C++ and am wondering how much time I should invest in learning how to implement template classes. Are they widely used in industry, or is this something I should move through quickly?

Print possible strings created from a Number

Given a 10 digit Telephone Number, we have to print all possible strings created from that. The mapping of the numbers is the one as exactly on a phone s keypad. i.e. for 1,0-> No Letter for 2->...

typedef ing STL wstring

Why is it when i do the following i get errors when relating to with wchar_t? namespace Foo { typedef std::wstring String; } Now i declare all my strings as Foo::String through out the program, ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

Window iconification status via Xlib

Is it possible to check with the means of pure X11/Xlib only whether the given window is iconified/minimized, and, if it is, how?

热门标签