VC 动态调用DLL导出函数例子

最近研究了一份远程控制的源码,远程控制的软件通常会造杀毒软件的追杀,但是通过改写源代码可以躲避杀毒软件的查杀。

一般的杀毒软件会通过定位文件的特征码来确定是不是病毒,这些特征码很容修改,而一些高启发式的杀毒软件会查杀远程控制软件的导出表,这就需要程序动态调用DLL导出函数。

下面是两种动态调用DLL导出函数的方法,可以直接照猫画虎来动态调用各种DLL导出函数。

动态调用DLL函数对程序的运行没有任何影响,除了会增大程序的体积。通过Winhex等软件可以看到动态调用DLL导出函数的程序中的API函数都显示在字符串中。

typedef UINT (WINAPI *GetSystemDirectoryAT)

 (
	OUT LPSTR lpBuffer,
	IN UINT uSize
    );
GetSystemDirectoryAT pGetSystemDirectoryA= (GetSystemDirectoryAT)GetProcAddress(LoadLibrary("kernel32.dll"),"GetSystemDirectoryA");



#ifdef UNICODE
#define API_GetSystemDirectory  GetSystemDirectoryW
#else
#define API_GetSystemDirectory  GetSystemDirectoryA
#endif // !UNICODE

UINT API_GetSystemDirectoryA(LPSTR lpBuffer,UINT uSize)
{
UINT result;
typedef UINT (WINAPI *lpAddFun)(LPSTR,UINT);
HINSTANCE hDll=LoadLibrary("kernel32.dll");
lpAddFun addFun=(lpAddFun)GetProcAddress(hDll,"GetSystemDirectoryA");
if (addFun != NULL)
	{
	addFun(lpBuffer,uSize);	
	FreeLibrary(hDll);	
	}
return result;
}

UINT API_GetSystemDirectoryW(LPSTR lpBuffer,UINT uSize)
{
UINT result;
typedef UINT (WINAPI *lpAddFun)(LPSTR,UINT);
HINSTANCE hDll=LoadLibrary("kernel32.dll");
lpAddFun addFun=(lpAddFun)GetProcAddress(hDll,"GetSystemDirectoryW");
if (addFun != NULL)
	{
	addFun(lpBuffer,uSize);
	FreeLibrary(hDll);
	}
return result;
}

《VC 动态调用DLL导出函数例子》有3个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注