Доброго времени суток всем использую Microsoft Research Detours Package, Version 2.1. пытаюсь перехватить сабж вот код
| Код | int (WINAPI *WSASendToProc)( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, const struct sockaddr *lpTo, int iToLen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)=WSASendTo; int (WINAPI *SendToProc)( SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen) = sendto; int (WINAPI *WSARecvFromProc)( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, struct sockaddr *lpFrom, LPINT lpFromlen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)=WSARecvFrom; int (WINAPI *RecvFromProc)( SOCKET s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen)=recvfrom; int (WINAPI *SendProc)( SOCKET s, const char *buf, int len, int flags)=send; int (WINAPI *RecvProc)( SOCKET s, char *buf, int len, int flags)=recv;
int MyWSASendTo( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesSent, DWORD dwFlags, const struct sockaddr *lpTo, int iToLen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); int MySendTo( SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen);
int MyWSARecvFrom( SOCKET s, LPWSABUF lpBuffers, DWORD dwBufferCount, LPDWORD lpNumberOfBytesRecvd, LPDWORD lpFlags, struct sockaddr *lpFrom, LPINT lpFromlen, LPWSAOVERLAPPED lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine); int MyRecvFrom( SOCKET s, char *buf, int len, int flags, struct sockaddr *from, int *fromlen); int MySend( SOCKET s, const char *buf, int len, int flags); int MyRecv( SOCKET s, char *buf, int len, int flags); BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { s_hDll=hModule; DetourTransactionBegin(); DetourUpdateThread( GetCurrentThread() ); char buf[5]; int res=DetourAttach( &(PVOID &)WSASendToProc, MyWSASendTo ); MessageBox(NULL,itoa(res,buf,10),"DetourAttach WSASendToProc",MB_OK); DetourUpdateThread( GetCurrentThread() ); res=DetourAttach( &(PVOID &)SendToProc, MySendTo ); MessageBox(NULL,itoa(res,buf,10),"DetourAttach SendToProc",MB_OK); DetourUpdateThread( GetCurrentThread() ); res=DetourAttach( &(PVOID &)WSARecvFromProc, MyWSARecvFrom ); MessageBox(NULL,itoa(res,buf,10),"DetourAttach WSARecvFromProc",MB_OK); DetourUpdateThread( GetCurrentThread() ); res=DetourAttach( &(PVOID &)RecvFromProc, MyRecvFrom ); MessageBox(NULL,itoa(res,buf,10),"DetourAttach RecvFromProc",MB_OK); DetourUpdateThread( GetCurrentThread() ); res=DetourAttach( &(PVOID &)SendProc, MySend ); MessageBox(NULL,itoa(res,buf,10),"DetourAttach SendProc",MB_OK); DetourUpdateThread( GetCurrentThread() ); res=DetourAttach( &(PVOID &)RecvProc, MyRecv ); MessageBox(NULL,itoa(res,buf,10),"DetourAttach RecvProc",MB_OK); DetourUpdateThread( GetCurrentThread() ); DetourTransactionCommit(); return TRUE; DetourTransactionBegin(); DetourUpdateThread( GetCurrentThread() ); DetourDetach( &(PVOID &)WSASendToProc, MyWSASendTo ); DetourDetach( &(PVOID &)SendToProc, MySendTo ); DetourDetach( &(PVOID &)WSARecvFromProc, MyWSARecvFrom ); DetourDetach( &(PVOID &)RecvFromProc, MyRecvFrom ); DetourDetach( &(PVOID &)SendProc, MySend ); DetourDetach( &(PVOID &)RecvProc, MyRecv ); DetourTransactionCommit(); } case DLL_PROCESS_DETACH: break; } return TRUE; }
int MySendTo( SOCKET s, const char *buf, int len, int flags, const struct sockaddr *to, int tolen) { return SendToProc( s, buf, len, flags,to,tolen); }
|
Приложение куда внедряется Dll не мое После вызова функций Send SendTo гдето в коде приложения возникает ошибка : A buffer overrun has occurred in progarm.exe which has corrupted the program's internal state. Press Break to debug the program or Continue to terminate the program.
For more details please see Help topic 'How to debug Buffer Overrun Issues'. в отладчике обнаружил что все падет на функции _crt_debugger_hook Подскажите в чем может быть проблема и каково ее решение? |