www.pudn.com > API Hook 工具相关代码 apihooktest.rar > SockHookFun.cpp
// SockHookFun.cpp : Defines the entry point for the DLL application.
//
#include "stdafx.h"
#include "SockHookFun.h"
#include "winsock.h"
#include "mswsock.h"
#include "HookApiInterFace.h"
#include "stdio.h"
IHookHelper* g_pHelper = GetHookHelper();
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
SOCKET PASCAL my_accept (SOCKET s, struct sockaddr FAR *addr, int FAR *addrlen)
{
CFunHelper helper(&my_accept);
g_pHelper->Log("accept()");
return accept(s, addr, addrlen);
}
int PASCAL FAR my_bind (SOCKET s, const struct sockaddr FAR *addr, int namelen)
{
CFunHelper helper(&my_bind);
int nR = bind(s, addr, namelen);
char szBuf[255];
sprintf(szBuf, "%d bind()", nR);
g_pHelper->Log(szBuf);
return nR;
}
int PASCAL FAR my_closesocket (SOCKET s)
{
CFunHelper helper(&my_closesocket);
g_pHelper->Log("closesocket()");
return closesocket(s);
}
int PASCAL FAR my_connect (SOCKET s, const struct sockaddr FAR *name, int namelen)
{
CFunHelper helper(&my_connect);
CFunHelper helper1(&my_WSAGetLastError);
CFunHelper helper2(&my_WSASetLastError);
CFunHelper helper3(&my_ntohs);
int nR = connect(s, name, namelen);
int nError = WSAGetLastError();
const sockaddr_in* pAddr = (const sockaddr_in*)name;
char szBuf[255];
sprintf(szBuf, "%d connect(%d, %p, %d) [%d.%d.%d.%d %d] LastError = %d", nR, s, name, namelen,
pAddr->sin_addr.S_un.S_un_b.s_b1,
pAddr->sin_addr.S_un.S_un_b.s_b2,
pAddr->sin_addr.S_un.S_un_b.s_b3,
pAddr->sin_addr.S_un.S_un_b.s_b4,
ntohs(pAddr->sin_port),
nError);
g_pHelper->Log(szBuf);
WSASetLastError(nError);
return nR;
}
int PASCAL FAR my_ioctlsocket (SOCKET s, long cmd, u_long FAR *argp)
{
CFunHelper helper(&my_ioctlsocket);
g_pHelper->Log("ioctlsocket()");
return ioctlsocket(s, cmd, argp);
}
int PASCAL FAR my_getpeername (SOCKET s, struct sockaddr FAR *name,
int FAR * namelen)
{
CFunHelper helper(&my_getpeername);
g_pHelper->Log("getpeername()");
return getpeername(s, name, namelen);
}
int PASCAL FAR my_getsockname (SOCKET s, struct sockaddr FAR *name,
int FAR * namelen)
{
CFunHelper helper(&my_getsockname);
g_pHelper->Log("getsockname()");
return getsockname(s, name, namelen);
}
int PASCAL FAR my_getsockopt (SOCKET s, int level, int optname,
char FAR * optval, int FAR *optlen)
{
CFunHelper helper(&my_getsockopt);
g_pHelper->Log("getsockopt()");
return getsockopt(s, level, optname, optval, optlen);
}
u_long PASCAL FAR my_htonl (u_long hostlong)
{
CFunHelper helper(&my_htonl);
g_pHelper->Log("htonl()");
return htonl(hostlong);
}
u_short PASCAL FAR my_htons (u_short hostshort)
{
CFunHelper helper(&my_htons);
g_pHelper->Log("htons()");
return htons(hostshort);
}
unsigned long PASCAL FAR my_inet_addr (const char FAR * cp)
{
CFunHelper helper(&my_inet_addr);
unsigned long u = inet_addr(cp);
char szBuf[255];
sprintf(szBuf, "%d inet_addr(%s)", u, cp);
g_pHelper->Log(szBuf);
return u;
}
/////////////////////////////////
char* PASCAL FAR my_inet_ntoa (struct in_addr in)
{
CFunHelper helper(&my_inet_ntoa);
g_pHelper->Log("inet_ntoa()");
return inet_ntoa(in);
}
int PASCAL FAR my_listen (SOCKET s, int backlog)
{
CFunHelper helper(&my_listen);
g_pHelper->Log("listen()");
return listen(s, backlog);
}
u_long PASCAL FAR my_ntohl (u_long netlong)
{
CFunHelper helper(&my_ntohl);
g_pHelper->Log("ntohl()");
return ntohl(netlong);
}
u_short PASCAL FAR my_ntohs (u_short netshort)
{
CFunHelper helper(&my_ntohs);
g_pHelper->Log("ntohs()");
return ntohs(netshort);
}
int PASCAL FAR my_recv (SOCKET s, char FAR * buf, int len, int flags)
{
CFunHelper helper(&my_recv);
g_pHelper->Log("recv()");
return recv(s, buf, len, flags);
}
int PASCAL FAR my_recvfrom (SOCKET s, char FAR * buf, int len, int flags,
struct sockaddr FAR *from, int FAR * fromlen)
{
CFunHelper helper(&my_recvfrom);
CFunHelper helper1(&my_WSAGetLastError);
CFunHelper helper2(&my_WSASetLastError);
CFunHelper helper3(&my_ntohs);
int nR = recvfrom(s, buf, len, flags, from, fromlen);
int nError = WSAGetLastError();
const sockaddr_in* pAddr = (const sockaddr_in*)from;
char szBuf[255];
if(pAddr)
{
sprintf(szBuf, "%d recvfrom() [%d.%d.%d.%d %d] LastError = %d",
nR,
pAddr->sin_addr.S_un.S_un_b.s_b1,
pAddr->sin_addr.S_un.S_un_b.s_b2,
pAddr->sin_addr.S_un.S_un_b.s_b3,
pAddr->sin_addr.S_un.S_un_b.s_b4,
ntohs(pAddr->sin_port),
nError);
}
else
{
sprintf(szBuf, "%d recvfrom()", nR);
}
g_pHelper->Log(szBuf);
WSASetLastError(nError);
return nR;
}
int PASCAL FAR my_select (int nfds, fd_set FAR *readfds, fd_set FAR *writefds,
fd_set FAR *exceptfds, const struct timeval FAR *timeout)
{
CFunHelper helper(&my_select);
g_pHelper->Log("select()");
return select(nfds, readfds, writefds, exceptfds, timeout);
}
int PASCAL FAR my_send (SOCKET s, const char FAR * buf, int len, int flags)
{
CFunHelper helper(&my_send);
CFunHelper helper1(&my_WSAGetLastError);
CFunHelper helper2(&my_WSASetLastError);
CFunHelper helper3(&my_ntohs);
int nR = send(s, buf , len, flags);
int nError = WSAGetLastError();
char szBuf[255];
sprintf(szBuf, "%d send(%d, %p, %d, %d)", nR, s, buf, len, flags);
g_pHelper->Log(szBuf);
WSASetLastError(nError);
return nR;
}
int PASCAL FAR my_sendto (SOCKET s, const char FAR * buf, int len, int flags,
const struct sockaddr FAR *to, int tolen)
{
CFunHelper helper(&my_sendto);
CFunHelper helper1(&my_WSAGetLastError);
CFunHelper helper2(&my_WSASetLastError);
CFunHelper helper3(&my_ntohs);
int nR = sendto(s, buf, len, flags, to, tolen);
int nError = WSAGetLastError();
const sockaddr_in* pAddr = (const sockaddr_in*)to;
char szBuf[255];
sprintf(szBuf, "%d sendto(%d, %p, %d, %d, %p, %d) [%d.%d.%d.%d %d] LastError = %d",
nR, s, buf, len, flags, to, tolen,
pAddr->sin_addr.S_un.S_un_b.s_b1,
pAddr->sin_addr.S_un.S_un_b.s_b2,
pAddr->sin_addr.S_un.S_un_b.s_b3,
pAddr->sin_addr.S_un.S_un_b.s_b4,
ntohs(pAddr->sin_port),
nError);
g_pHelper->Log(szBuf);
WSASetLastError(nError);
return nR;
}
int PASCAL FAR my_setsockopt (SOCKET s, int level, int optname,
const char FAR * optval, int optlen)
{
CFunHelper helper(&my_setsockopt);
g_pHelper->Log("setsockopt()");
return setsockopt(s, level, optname, optval, optlen);
}
int PASCAL FAR my_shutdown (SOCKET s, int how)
{
CFunHelper helper(&my_shutdown);
g_pHelper->Log("shutdown()");
return shutdown(s, how);
}
SOCKET PASCAL FAR my_socket (int af, int type, int protocol)
{
CFunHelper helper(&my_socket);
SOCKET s = socket(af, type, protocol);
char szBuf[255];
sprintf(szBuf, "%d socket(%d, %d, %d)", s, af, type, protocol);
g_pHelper->Log(szBuf);
return s;
}
struct hostent* PASCAL FAR my_gethostbyaddr(const char FAR * addr,
int len, int type)
{
CFunHelper helper(&my_gethostbyaddr);
g_pHelper->Log("gethostbyaddr()");
return gethostbyaddr(addr, len, type);
}
struct hostent* PASCAL FAR my_gethostbyname(const char FAR * name)
{
CFunHelper helper(&my_gethostbyname);
g_pHelper->Log("gethostbyname()");
return gethostbyname(name);
}
int PASCAL FAR my_gethostname (char FAR * name, int namelen)
{
CFunHelper helper(&my_gethostname);
g_pHelper->Log("gethostname()");
return gethostname(name, namelen);
}
struct servent* PASCAL FAR my_getservbyport(int port, const char FAR * proto)
{
CFunHelper helper(&my_getservbyport);
g_pHelper->Log("getservbyport()");
return getservbyport(port, proto);
}
struct servent* PASCAL FAR my_getservbyname(const char FAR * name,
const char FAR * proto)
{
CFunHelper helper(&my_getservbyname);
g_pHelper->Log("getservbyname()");
return getservbyname(name, proto);
}
struct protoent* PASCAL FAR my_getprotobynumber(int proto)
{
CFunHelper helper(&my_getprotobynumber);
g_pHelper->Log("getprotobynumber()");
return getprotobynumber(proto);
}
struct protoent* PASCAL FAR my_getprotobyname(const char FAR * name)
{
CFunHelper helper(&my_getprotobyname);
g_pHelper->Log("getprotobyname()");
return getprotobyname(name);
}
/* Microsoft Windows Extension function prototypes */
int PASCAL FAR my_WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData)
{
CFunHelper helper(&my_WSAStartup);
int nR = WSAStartup(wVersionRequired, lpWSAData);
char szBuf[255];
sprintf(szBuf, "%d WSAStartup()", nR);
g_pHelper->Log(szBuf);
return nR;
}
int PASCAL FAR my_WSACleanup(void)
{
CFunHelper helper(&my_WSACleanup);
g_pHelper->Log("WSACleanup()");
return WSACleanup();
}
void PASCAL FAR my_WSASetLastError(int iError)
{
CFunHelper helper(&my_WSASetLastError);
g_pHelper->Log("WSASetLastError()");
WSASetLastError(iError);
}
int PASCAL FAR my_WSAGetLastError(void)
{
CFunHelper helper(&my_WSAGetLastError);
int nR = WSAGetLastError();
char szBuf[255];
sprintf(szBuf, "%d WSAGetLastError()", nR);
g_pHelper->Log(szBuf);
return nR;
}
BOOL PASCAL FAR my_WSAIsBlocking(void)
{
CFunHelper helper(&my_WSAIsBlocking);
g_pHelper->Log("my_WSAIsBlocking()");
return WSAIsBlocking();
}
int PASCAL FAR my_WSAUnhookBlockingHook(void)
{
CFunHelper helper(&my_WSAUnhookBlockingHook);
g_pHelper->Log("WSAUnhookBlockingHook()");
return WSAUnhookBlockingHook();
}
FARPROC PASCAL FAR my_WSASetBlockingHook(FARPROC lpBlockFunc)
{
CFunHelper helper(&my_WSASetBlockingHook);
g_pHelper->Log("WSASetBlockingHook()");
return WSASetBlockingHook(lpBlockFunc);
}
int PASCAL FAR my_WSACancelBlockingCall(void)
{
CFunHelper helper(&my_WSACancelBlockingCall);
g_pHelper->Log("WSACancelBlockingCall()");
return WSACancelBlockingCall();
}
HANDLE PASCAL FAR my_WSAAsyncGetServByName(HWND hWnd, u_int wMsg,
const char FAR * name,
const char FAR * proto,
char FAR * buf, int buflen)
{
CFunHelper helper(&my_WSAAsyncGetServByName);
g_pHelper->Log("WSAAsyncGetServByName()");
return WSAAsyncGetServByName(hWnd, wMsg, name, proto, buf, buflen);
}
HANDLE PASCAL FAR my_WSAAsyncGetServByPort(HWND hWnd, u_int wMsg, int port,
const char FAR * proto, char FAR * buf,
int buflen)
{
CFunHelper helper(&my_WSAAsyncGetServByPort);
g_pHelper->Log("WSAAsyncGetServByPort()");
return WSAAsyncGetServByPort(hWnd, wMsg, port, proto, buf, buflen);
}
HANDLE PASCAL FAR my_WSAAsyncGetProtoByName(HWND hWnd, u_int wMsg,
const char FAR * name, char FAR * buf,
int buflen)
{
CFunHelper helper(&my_WSAAsyncGetProtoByName);
g_pHelper->Log("WSAAsyncGetProtoByName()");
return WSAAsyncGetProtoByName(hWnd, wMsg, name, buf, buflen);
}
HANDLE PASCAL FAR my_WSAAsyncGetProtoByNumber(HWND hWnd, u_int wMsg,
int number, char FAR * buf,
int buflen)
{
CFunHelper helper(&my_WSAAsyncGetProtoByNumber);
g_pHelper->Log("WSAAsyncGetProtoByNumber()");
return WSAAsyncGetProtoByNumber(hWnd, wMsg, number, buf, buflen);
}
HANDLE PASCAL FAR my_WSAAsyncGetHostByName(HWND hWnd, u_int wMsg,
const char FAR * name, char FAR * buf,
int buflen)
{
CFunHelper helper(&my_WSAAsyncGetHostByName);
g_pHelper->Log("WSAAsyncGetHostByName()");
return WSAAsyncGetHostByName(hWnd, wMsg, name, buf, buflen);
}
HANDLE PASCAL FAR my_WSAAsyncGetHostByAddr(HWND hWnd, u_int wMsg,
const char FAR * addr, int len, int type,
char FAR * buf, int buflen)
{
CFunHelper helper(&my_WSAAsyncGetHostByAddr);
g_pHelper->Log("WSAAsyncGetHostByAddr()");
return WSAAsyncGetHostByAddr(hWnd, wMsg, addr, len, type, buf, buflen);
}
int PASCAL FAR my_WSACancelAsyncRequest(HANDLE hAsyncTaskHandle)
{
CFunHelper helper(&my_WSACancelAsyncRequest);
g_pHelper->Log("WSACancelAsyncRequest()");
return WSACancelAsyncRequest(hAsyncTaskHandle);
}
int PASCAL FAR my_WSAAsyncSelect(SOCKET s, HWND hWnd, u_int wMsg,
long lEvent)
{
CFunHelper helper(&my_WSAAsyncSelect);
g_pHelper->Log("WSAAsyncSelect()");
return WSAAsyncSelect(s, hWnd, wMsg, lEvent);
}
int PASCAL FAR my_WSARecvEx (SOCKET s, char FAR * buf, int len, int FAR *flags)
{
CFunHelper helper(&my_WSARecvEx);
g_pHelper->Log("WSARecvEx()");
return WSARecvEx(s, buf, len, flags);
}
INT PASCAL my_EnumProtocolsA (LPINT lpiProtocols,
LPVOID lpProtocolBuffer,
LPDWORD lpdwBufferLength)
{
CFunHelper helper(&my_EnumProtocolsA);
g_pHelper->Log("EnumProtocolsA()");
return EnumProtocolsA(lpiProtocols, lpProtocolBuffer, lpdwBufferLength);
}
INT PASCAL my_EnumProtocolsW (
IN LPINT lpiProtocols,
IN OUT LPVOID lpProtocolBuffer,
IN OUT LPDWORD lpdwBufferLength)
{
CFunHelper helper(&my_EnumProtocolsW);
g_pHelper->Log("EnumProtocolsW()");
return EnumProtocolsW(lpiProtocols, lpProtocolBuffer, lpdwBufferLength);
}
INT PASCAL my_GetAddressByNameA (
IN DWORD dwNameSpace,
IN LPGUID lpServiceType,
IN LPSTR lpServiceName OPTIONAL,
IN LPINT lpiProtocols OPTIONAL,
IN DWORD dwResolution,
IN LPSERVICE_ASYNC_INFO lpServiceAsyncInfo OPTIONAL,
IN OUT LPVOID lpCsaddrBuffer,
IN OUT LPDWORD lpdwBufferLength,
IN OUT LPSTR lpAliasBuffer OPTIONAL,
IN OUT LPDWORD lpdwAliasBufferLength OPTIONAL)
{
CFunHelper helper(&my_GetAddressByNameA);
g_pHelper->Log("GetAddressByNameA()");
return GetAddressByNameA(dwNameSpace, lpServiceType, lpServiceName,
lpiProtocols, dwResolution, lpServiceAsyncInfo,
lpCsaddrBuffer, lpdwBufferLength, lpAliasBuffer,lpdwAliasBufferLength);
}
INT PASCAL my_GetAddressByNameW (
IN DWORD dwNameSpace,
IN LPGUID lpServiceType,
IN LPWSTR lpServiceName OPTIONAL,
IN LPINT lpiProtocols OPTIONAL,
IN DWORD dwResolution,
IN LPSERVICE_ASYNC_INFO lpServiceAsyncInfo OPTIONAL,
IN OUT LPVOID lpCsaddrBuffer,
IN OUT LPDWORD lpdwBufferLength,
IN OUT LPWSTR lpAliasBuffer OPTIONAL,
IN OUT LPDWORD lpdwAliasBufferLength OPTIONAL)
{
CFunHelper helper(&my_GetAddressByNameW);
g_pHelper->Log("GetAddressByNameW()");
return GetAddressByNameW(dwNameSpace, lpServiceType, lpServiceName, lpiProtocols,
dwResolution, lpServiceAsyncInfo, lpCsaddrBuffer, lpdwBufferLength,
lpAliasBuffer, lpdwAliasBufferLength);
}
INT PASCAL my_GetTypeByNameA (
IN LPSTR lpServiceName,
IN OUT LPGUID lpServiceType)
{
CFunHelper helper(&my_GetTypeByNameA);
g_pHelper->Log("GetTypeByNameA()");
return GetTypeByNameA(lpServiceName, lpServiceType);
}
INT PASCAL my_GetTypeByNameW (
IN LPWSTR lpServiceName,
IN OUT LPGUID lpServiceType)
{
CFunHelper helper(&my_GetTypeByNameW);
g_pHelper->Log("GetTypeByNameW()");
return GetTypeByNameW(lpServiceName, lpServiceType);
}
INT PASCAL my_GetNameByTypeA (
IN LPGUID lpServiceType,
IN OUT LPSTR lpServiceName,
IN DWORD dwNameLength)
{
CFunHelper helper(&my_GetNameByTypeA);
g_pHelper->Log("GetNameByTypeA()");
return GetNameByTypeA(lpServiceType, lpServiceName, dwNameLength);
}
INT PASCAL my_GetNameByTypeW (
IN LPGUID lpServiceType,
IN OUT LPWSTR lpServiceName,
IN DWORD dwNameLength)
{
CFunHelper helper(&my_GetNameByTypeW);
g_pHelper->Log("GetNameByTypeW()");
return GetNameByTypeW(lpServiceType, lpServiceName, dwNameLength);
}
INT PASCAL my_SetServiceA (
IN DWORD dwNameSpace,
IN DWORD dwOperation,
IN DWORD dwFlags,
IN LPSERVICE_INFOA lpServiceInfo,
IN LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,
IN OUT LPDWORD lpdwStatusFlags)
{
CFunHelper helper(&my_SetServiceA);
g_pHelper->Log("SetServiceA()");
return SetServiceA(dwNameSpace, dwOperation,
dwFlags, lpServiceInfo, lpServiceAsyncInfo,
lpdwStatusFlags);
}
INT PASCAL my_SetServiceW (
IN DWORD dwNameSpace,
IN DWORD dwOperation,
IN DWORD dwFlags,
IN LPSERVICE_INFOW lpServiceInfo,
IN LPSERVICE_ASYNC_INFO lpServiceAsyncInfo,
IN OUT LPDWORD lpdwStatusFlags)
{
CFunHelper helper(&my_SetServiceW);
g_pHelper->Log("SetServiceW()");
return SetServiceW(dwNameSpace, dwOperation, dwFlags, lpServiceInfo,
lpServiceAsyncInfo, lpdwStatusFlags);
}
INT PASCAL my_GetServiceA (
IN DWORD dwNameSpace,
IN LPGUID lpGuid,
IN LPSTR lpServiceName,
IN DWORD dwProperties,
IN OUT LPVOID lpBuffer,
IN OUT LPDWORD lpdwBufferSize,
IN LPSERVICE_ASYNC_INFO lpServiceAsyncInfo)
{
CFunHelper helper(&my_GetServiceA);
g_pHelper->Log("GetServiceA()");
return GetServiceA(dwNameSpace, lpGuid, lpServiceName, dwProperties,
lpBuffer, lpdwBufferSize, lpServiceAsyncInfo);
}
INT PASCAL my_GetServiceW (
IN DWORD dwNameSpace,
IN LPGUID lpGuid,
IN LPWSTR lpServiceName,
IN DWORD dwProperties,
IN OUT LPVOID lpBuffer,
IN OUT LPDWORD lpdwBufferSize,
IN LPSERVICE_ASYNC_INFO lpServiceAsyncInfo)
{
CFunHelper helper(&my_GetServiceW);
g_pHelper->Log("GetServiceW()");
return GetServiceW(dwNameSpace, lpGuid, lpServiceName, dwProperties, lpBuffer,
lpdwBufferSize, lpServiceAsyncInfo);
}
void PASCAL ShowMe(HWND hParant)
{
MessageBox(hParant, "Hello World!", "*_*", MB_OK);
}
void PASCAL GetDllInfo (DLL_INFO& info)
{
strcpy(info.szIntroduce, "this is a simple test\r\nthanks for help of my friend Neville\r\nJYan 2004.5.25");
strcpy(info.szHomePage, "NULL");
strcpy(info.szEmail, "yj_3000@163.com");
strcpy(info.szAuthor, "JYan");
info.pCallBack = &ShowMe;
info.hBpSign = ::LoadBitmap(GetModuleHandle("SockHookFun.dll"), MAKEINTRESOURCE(IDB_SIGN));
}