最近研究了一份远程控制的源码,远程控制的软件通常会造杀毒软件的追杀,但是通过改写源代码可以躲避杀毒软件的查杀。
一般的杀毒软件会通过定位文件的特征码来确定是不是病毒,这些特征码很容修改,而一些高启发式的杀毒软件会查杀远程控制软件的导出表,这就需要程序动态调用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条回复
百度全面切换凤巢后关键词价格暴涨八倍 Win2003服务器下的完全手工克隆帐号
看起来很不错
不错。。。。