void C4Network2Client::AddAddrFromPuncher(const C4NetIO::addr_t &addr) { AddAddr(C4Network2Address(addr, P_UDP), true); // If the outside port matches the inside port, there is no port translation and the // TCP address will probably work as well. if (addr.GetPort() == Config.Network.PortUDP && Config.Network.PortTCP > 0) { auto tcpAddr = addr; tcpAddr.SetPort(Config.Network.PortTCP); AddAddr(C4Network2Address(tcpAddr, P_TCP), true); } // Save IPv6 address for TCP simultaneous connect. if (addr.GetFamily() == C4NetIO::addr_t::IPv6) IPv6AddrFromPuncher = addr; }
HMODULE __stdcall My_LoadLibraryA(char* a0) { int isOK=0; int dllCnt=6,i=0; const char* tok = "."; char *p; char *okDlls[] = { "ws2_32","kernel32","advapi32", "urlmon", "msafd", "msvcrt" }; HMODULE ret = 0; if(nonet||!*a0){ isOK=1; }else{ p = strtok( a0,tok); if(*p==0) p=a0; strlower(p); for(i=0;i<dllCnt;i++){ if( strstr(p, okDlls[i]) > 0 ){ isOK=1; break; } } } if(isOK==0){ AddAddr( SCOffset() ); infomsg("Halting..LoadLibrary for dll not in safe list: %s",a0); exit(0); } if( calledFromSC() ){ AddAddr( SCOffset() ); LogAPI("LoadLibraryA(%s)\n", a0); } try { ret = Real_LoadLibraryA(a0); } catch(...){ } return ret; }
int __stdcall My_connect(SOCKET a0,SOCKADDR_IN* a1,int a2) { char* ip=0; ip=ipfromlng(a1); if(redirect){ infomsg(" Connect Redirecting Enabled: %s -> 127.0.0.1\n",ip); free(ip); a1->sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); ip=ipfromlng(a1); } AddAddr( SCOffset() ); LogAPI("connect( %s:%d )\n", ip, htons(a1->sin_port) ); free(ip); int ret = 0; try { ret = Real_connect(a0, a1, a2); } catch(...){ } return ret; }
void C4Network2Client::AddLocalAddrs(int16_t iPortTCP, int16_t iPortUDP) { // set up address struct sockaddr_in addr; ZeroMem(&addr, sizeof addr); addr.sin_family = AF_INET; // get local address(es) in_addr **ppAddr = NULL; #ifdef HAVE_WINSOCK bool fGotWinSock = AcquireWinSock(); if (fGotWinSock) #endif { // get local host name char szLocalHostName[128 + 1]; *szLocalHostName = '\0'; ::gethostname(szLocalHostName, 128); // get hostent-struct hostent *ph = ::gethostbyname(szLocalHostName); // check type, get addr list if (ph) if (ph->h_addrtype != AF_INET) ph = NULL; else ppAddr = reinterpret_cast<in_addr **>(ph->h_addr_list); } // add address(es) for (;;) { if (iPortTCP >= 0) { addr.sin_port = htons(iPortTCP); AddAddr(C4Network2Address(addr, P_TCP), false); } if (iPortUDP >= 0) { addr.sin_port = htons(iPortUDP); AddAddr(C4Network2Address(addr, P_UDP), false); } // get next if (!ppAddr || !*ppAddr) break; addr.sin_addr = **ppAddr++; } #ifdef HAVE_WINSOCK if (fGotWinSock) ReleaseWinSock(); #endif }
BOOL __stdcall My_DeleteFileA(LPCSTR a0) { AddAddr( SCOffset() ); infomsg("Skipping DeleteFileA(%s)\n", a0); //deleting is never cool nonet or not return 0; }
HFILE __stdcall My__lcreat(LPCSTR a0,int a1) { AddAddr( SCOffset() ); LogAPI("_lcreat(%s,%x)\n", a0, a1); HFILE ret = 0; try { ret = Real__lcreat(a0, a1); } catch(...){ } return ret; }
void C4Network2Client::AddLocalAddrs(int16_t iPortTCP, int16_t iPortUDP) { C4NetIO::addr_t addr; for (auto& ha : C4NetIO::GetLocalAddresses()) { addr.SetAddress(ha); if (iPortTCP) { addr.SetPort(iPortTCP); AddAddr(C4Network2Address(addr, P_TCP), false); } if (iPortUDP) { addr.SetPort(iPortUDP); AddAddr(C4Network2Address(addr, P_UDP), false); } if (addr.GetScopeId()) InterfaceIDs.insert(addr.GetScopeId()); } }
void __stdcall My_ExitThread(DWORD a0) { AddAddr( SCOffset() ); LogAPI("ExitThread()\n"); try { Real_ExitThread(a0); } catch(...){ } }
void __stdcall My_ExitProcess(UINT a0) { AddAddr( SCOffset() ); LogAPI("ExitProcess()\n"); try { Real_ExitProcess(a0); } catch(...){ } }
UINT __stdcall My__lread(HFILE a0,LPVOID a1,UINT a2) { AddAddr( SCOffset() ); LogAPI("_lread(%x,%x,%x)\n", a0, a1, a2); UINT ret = 0; try { ret = Real__lread(a0, a1, a2); } catch(...){ } return ret; }
HMODULE __stdcall My_GetModuleHandleA(LPCSTR a0) { AddAddr( SCOffset() ); LogAPI("GetModuleHandleA(%s)\n", a0); HMODULE ret = 0; try { ret = Real_GetModuleHandleA(a0); } catch(...){ } return ret; }
HANDLE __stdcall My_OpenProcess(DWORD a0,BOOL a1,DWORD a2) { AddAddr( SCOffset() ); LogAPI("OpenProcess(pid=%ld)\n", a2); HANDLE ret = 0; try { ret = Real_OpenProcess(a0, a1, a2); } catch(...){ } return ret; }
BOOL __stdcall My_WriteFileEx(HANDLE a0,LPCVOID a1,DWORD a2,LPOVERLAPPED a3,LPOVERLAPPED_COMPLETION_ROUTINE a4) { AddAddr( SCOffset() ); LogAPI("WriteFileEx(h=%x)\n", a0); BOOL ret = 0; try { ret = Real_WriteFileEx(a0, a1, a2, a3, a4); } catch(...){ } return ret; }
int __stdcall My_gethostname(char* a0,int a1) { AddAddr( SCOffset() ); LogAPI("gethostname(%x)\n", a0); int ret = 0; try { ret = Real_gethostname(a0, a1); } catch(...){ } return ret; }
hostent* __stdcall My_gethostbyname(char* a0) { AddAddr( SCOffset() ); LogAPI("gethostbyname(%x)\n", a0); hostent* ret = 0; try { ret = Real_gethostbyname(a0); } catch(...){ } return ret; }
SOCKET __stdcall My_accept(SOCKET a0,sockaddr* a1,int* a2) { AddAddr( SCOffset() ); LogAPI("accept(%x,%x,%x)\n", a0, a1, a2); SOCKET ret = 0; try { ret = Real_accept(a0, a1, a2); } catch(...){ } return ret; }
size_t __stdcall My_fwrite(const void* a0, size_t a1, size_t a2, FILE* a3) { AddAddr( SCOffset() ); LogAPI("fwrite(h=%x)\n", a3); size_t rt=0; try { rt = Real_fwrite(a0,a1,a2,a3); } catch(...){ } return rt; }
FILE* __stdcall My_fopen(const char* a0, const char* a1) { AddAddr( SCOffset() ); LogAPI("fopen(%s)\n", a0); FILE* rt=0; try { rt = Real_fopen(a0,a1); } catch(...){ } return rt; }
int __stdcall My_closesocket(SOCKET a0) { AddAddr( SCOffset() ); LogAPI("closesocket(%x)\n", a0); int ret = 0; try { ret = Real_closesocket(a0); } catch(...){ } return ret; }
//untested int My_URLDownloadToCacheFile(int a0,char* a1, char* a2, DWORD a3, DWORD a4, int a5) { AddAddr( SCOffset() ); LogAPI("URLDownloadToCacheFile(%s)\n", a1); SOCKET ret = 0; try { ret = Real_URLDownloadToCacheFile(a0, a1, a2, a3, a4, a5); } catch(...){ } return ret; }
SOCKET __stdcall My_socket(int a0,int a1,int a2) { AddAddr( SCOffset() ); LogAPI("socket(family=%x,type=%x,proto=%x)\n", a0, a1, a2); SOCKET ret = 0; try { ret = Real_socket(a0, a1, a2); } catch(...){ } return ret; }
int __stdcall My_shutdown(SOCKET a0,int a1) { AddAddr( SCOffset() ); LogAPI("shutdown()\n"); int ret = 0; try { ret = Real_shutdown(a0, a1); } catch(...){ } return ret; }
int __stdcall My_listen(SOCKET a0,int a1) { AddAddr( SCOffset() ); LogAPI("listen(h=%x )\n", a0); int ret = 0; try { ret = Real_listen(a0, a1); } catch(...){ } return ret; }
hostent* __stdcall My_gethostbyaddr(char* a0,int a1,int a2) { AddAddr( SCOffset() ); LogAPI("gethostbyaddr(%x)\n", a0); hostent* ret = 0; try { ret = Real_gethostbyaddr(a0, a1, a2); } catch(...){ } return ret; }
SOCKET __stdcall My_WSASocketA(int a0,int a1,int a2,struct _WSAPROTOCOL_INFOA* a3,GROUP a4,DWORD a5) { AddAddr( SCOffset() ); LogAPI("WSASocketA(fam=%x,typ=%x,proto=%x)\n", a0, a1, a2); SOCKET ret = 0; try { ret = Real_WSASocketA(a0, a1, a2, a3, a4, a5); } catch(...){ } return ret; }
int __stdcall My_bind(SOCKET a0,SOCKADDR_IN* a1, int a2) { AddAddr( SCOffset() ); LogAPI("bind(%x, port=%ld)\n", a0, htons(a1->sin_port) ); int ret = 0; try { ret = Real_bind(a0, a1, a2); } catch(...){ } return ret; }
UINT __stdcall My__lwrite(HFILE a0,LPCSTR a1,UINT a2) { AddAddr( SCOffset() ); LogAPI("_lwrite(h=%x)\n", a0); UINT ret = 0; try { ret = Real__lwrite(a0, a1, a2); } catch(...){ } return ret; }
DWORD __stdcall My_WaitForSingleObject(HANDLE a0,DWORD a1) { if( calledFromSC() ){ AddAddr( SCOffset() ); LogAPI("WaitForSingleObject(%x,%x)\n", a0, a1); } DWORD ret = 0; try { ret = Real_WaitForSingleObject(a0, a1); } catch(...){ } return ret; }
HANDLE __stdcall My_CreateFileA(LPCSTR a0,DWORD a1,DWORD a2,LPSECURITY_ATTRIBUTES a3,DWORD a4,DWORD a5,HANDLE a6) { AddAddr( SCOffset() ); LogAPI("CreateFileA(%s)\n", a0); HANDLE ret = 0; try{ ret = Real_CreateFileA(a0, a1, a2, a3, a4, a5, a6); } catch(...){ } return ret; }
FARPROC __stdcall My_GetProcAddress(HMODULE a0,LPCSTR a1) { if( calledFromSC() ){ AddAddr( SCOffset() ); LogAPI("GetProcAddress(%s)\n", a1); } FARPROC ret = 0; try { ret = Real_GetProcAddress(a0, a1); } catch(...){ } return ret; }