Advertisement
Drizer

wsock pb

Aug 6th, 2012
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.85 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <windows.h>
  3. #include "stdio.h"
  4. #include "detours/detours.h"
  5. #include "Winsock2.h"
  6.  
  7. #pragma comment(lib, "ws2_32.lib")
  8. #pragma comment(lib, "C:\\Program Files\\Microsoft SDKs\\Windows\\v6.0A\\Include\\detours\\detours.lib")
  9.  
  10. SOCKET mSock = 0;
  11. int mDest=0,mLen=0;
  12. char* mPacket;
  13.  
  14. extern void WS2_Callback(char* meth, char*p);
  15. extern int IgnoreRecv();
  16.  
  17. int WINAPI MySend(SOCKET s, const char* buf, int len, int flags);
  18. int WINAPI MyRecv(SOCKET s, char* buf, int len, int flags);
  19.  
  20. HMODULE hLib = LoadLibrary("ws2_32.dll");
  21.  
  22. typedef int (WINAPI *SendPtr)(SOCKET s, const char* buf, int len, int flags);
  23. typedef int (WINAPI *SendtoPtr)(SOCKET s,const char*buf,int len,int flags,const sockaddr*to,int tolen);
  24. typedef int (WINAPI *RecvPtr)(SOCKET s, char* buf, int len, int flags);
  25. typedef int (WINAPI *RecvFromPtr)(SOCKET s, char *buf, int len, int flags, sockaddr *from, int *fromlen);
  26. SendPtr pSend = (SendPtr)GetProcAddress(hLib, "send");
  27. RecvPtr pRecv = (RecvPtr)GetProcAddress(hLib, "recv");
  28. RecvFromPtr pRecvFrom = (RecvFromPtr)GetProcAddress(hLib, "recvfrom");
  29. SendtoPtr pSendto = (SendtoPtr)GetProcAddress(hLib, "sendto");
  30.  
  31. //int ( WINAPI *Real_WSARecvEx )( SOCKET s, char *buf, int len, int *flags ) = WSARecv;
  32.  
  33. int WINAPI MySendTo(SOCKET s,const char*buf,int len,int flags,const sockaddr*to,int tolen)
  34. {
  35.     //if(IgnoreRecv() == 12 && buf[0] == '') return 1;
  36.     if(mDest == 1 && mPacket != "") {
  37.         pSendto(s, mPacket, mLen, flags,to,tolen);
  38.         mDest = 0;
  39.     };
  40.     int retInt = pSendto(s,buf,len,flags,to,tolen);
  41.     WS2_Callback("SENDTO",(char*)buf);
  42.     return retInt;
  43. }
  44. int WINAPI MySend(SOCKET s, const char* buf, int len, int flags)
  45. {
  46.     if(mDest == 2 && mPacket != "") {
  47.         pSend(s, mPacket, mLen, flags);
  48.         mDest = 0;
  49.     };
  50.     int retInt;
  51.     retInt = pSend(s, buf, len, flags);
  52.     WS2_Callback("SEND",(char*)buf);
  53.     return retInt;
  54. }
  55. int WINAPI MyRecv(SOCKET s, char* buf, int len, int flags)
  56. {
  57.     if(mDest == 1 && mPacket != "") {
  58.         pRecv(s, mPacket, mLen, flags);
  59.         mDest = 0;
  60.     };
  61.     int retInt;
  62.     retInt = pRecv(s, buf, len, flags);
  63.     WS2_Callback("RECV",buf);
  64.     return retInt;
  65. }
  66.  
  67. int WINAPI MyRecvFrom(SOCKET s, char *buf, int len, int flags, sockaddr *from, int *fromlen)
  68. {
  69.     int retInt;
  70.     if(IgnoreRecv() == 12 && buf[0] == '') return 1;
  71.     retInt = pRecvFrom(s, buf, len, flags,from,fromlen);
  72.     WS2_Callback("RECVFROM",buf);
  73.     return retInt;
  74. }
  75. void Hookar() {
  76.     DetourTransactionBegin();
  77.     DetourUpdateThread(GetCurrentThread());
  78.     //sendto(SOCKET s,const char*buf,int len, int flags,const sockaddr *to, int tolen);
  79.     DetourAttach(&(PVOID&)pSend, MySend);
  80.     DetourAttach(&(PVOID&)pSendto, MySendTo);
  81.     DetourAttach(&(PVOID&)pRecv, MyRecv);
  82.     DetourAttach(&(PVOID&)pRecvFrom, MyRecvFrom);
  83.     DetourTransactionCommit();
  84. };
  85. void SendPacket(char*p,int mod,int ml) {
  86.     if(mod==0)return;
  87.     mPacket=p;
  88.     mDest=mod;
  89.     mLen = ml;
  90. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement