Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <ctime>
- #include <fstream>
- #include <iomanip>
- #include <string>
- #include <windows.h>
- #include <detours.h>
- #include <mscoree.h>
- #pragma comment(lib,"detours.lib")
- #pragma comment(lib,"mscoree.lib")
- //#pragma comment(lib,"ws2_32.lib")
- #pragma region hook initialization
- HMODULE hLib = LoadLibrary("wsock32.dll");
- typedef int (WINAPI *SendPtr)(SOCKET s, const char* buf, int len, int flags);
- SendPtr pSend = (SendPtr)GetProcAddress(hLib, "send");
- int WINAPI MySend(SOCKET s, const char* buf, int len, int flags);
- typedef int (WINAPI *RecvPtr)(SOCKET s, const char* buf, int len, int flags);
- RecvPtr pRecv = (RecvPtr)GetProcAddress(hLib, "recv");
- int WINAPI MyRecv(SOCKET s, char* buf, int len, int flags);
- #pragma endregion
- #pragma region Logger
- std::ofstream Logger;
- std::string NowToString() {
- time_t rawtime;
- tm *timeinfo = new tm();
- char buffer[32];
- time( &rawtime );
- localtime_s( timeinfo, &rawtime );
- strftime( buffer, 32, "%m/%d/%Y %I:%M:%S %p", timeinfo );
- delete timeinfo;
- return std::string( buffer );
- }
- std::string TimeToString() {
- time_t rawtime;
- tm *timeinfo = new tm();
- char buffer[32];
- time( &rawtime );
- localtime_s( timeinfo, &rawtime );
- strftime( buffer, 32, "%I:%M:%S %p", timeinfo );
- delete timeinfo;
- return std::string( buffer );
- }
- void LogPacket( const char *buf, int len ) {
- Logger << " 0 1 2 3 4 5 6 7 8 9 A B C D E F\n";
- Logger << " -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --\n";
- Logger << "0000 ";
- for ( int i = 0; i < len; ++i ) {
- if ( i != 0 && i % 16 == 0 ) {
- Logger << " ";
- int line = ( i / 16 ) - 1;
- for ( int j = 0; j < 16; ++j ) {
- char c = buf[line * 16 + j];
- if ( c >= 32 && c <= 126 ) {
- Logger << c;
- } else {
- Logger << '.';
- }
- }
- Logger << "\n" << std::hex << std::setw( 4 ) << std::setfill( '0' ) << i << std::dec << std::setw( 0 ) << " ";
- } else if ( i % 16 == 8 ) {
- Logger << ' ';
- }
- Logger << std::hex << std::setw( 2 ) << std::setfill( '0' ) << ( int( buf[i] ) & 0xFF ) << ' ';
- Logger << std::dec << std::setw( 0 );
- if ( i == len - 1 ) {
- int remaining = 16 - ( len % 16 );
- int fill = ( remaining * 3 ) + 2;
- if ( remaining >= 8 ) {
- ++fill;
- }
- for ( int j = 0; j < fill; ++j ) {
- Logger << ' ';
- }
- int line = ( i - ( ( len % 16 ) - 1 ) ) / 16 ;
- for ( int k = 0; k < ( len % 16 ); ++k ) {
- char c = buf[line * 16 + k];
- if ( c >= 32 && c <= 126 ) {
- Logger << c;
- } else {
- Logger << '.';
- }
- }
- }
- }
- Logger << "\n\n";
- }
- #pragma endregion
- int WINAPI MySend(SOCKET s, const char* buf, int len, int flags)
- {
- if (len < 2048)
- {
- Logger << TimeToString() << ": Client -> Server (Length: " << len << " bytes)*\n\n";
- LogPacket( buf, len );
- Logger << std::endl;
- }
- return pSend(s, buf, len, flags);
- }
- int WINAPI MyRecv(SOCKET s, char* buf, int len, int flags)
- {
- if (len < 2048)
- {
- Logger << TimeToString() << ": Server -> Client (Length: " << len << " bytes)*\n\n";
- LogPacket( buf, len );
- Logger << std::endl;
- }
- return pRecv(s, buf, len, flags);
- }
- extern "C" __declspec(dllexport) void dummy(void){
- return;
- }
- BOOL WINAPI DllMain(HINSTANCE hinst, DWORD dwReason, LPVOID reserved)
- {
- if (DetourIsHelperProcess()) {
- return TRUE;
- }
- if (dwReason == DLL_PROCESS_ATTACH) {
- MessageBoxA(0,"Attach",0,0);
- Logger.open( "C:\\Users\\Felipe\\Desktop\\mydll\\log\\Packets.txt", std::ios::out | std::ios::app | std::ios::ate );
- if ( Logger.tellp() > 0 ) {
- Logger << "\n\n\n";
- }
- Logger << "##\n## Logging Started (" << NowToString() << ")\n##\n\n\n";
- DetourRestoreAfterWith();
- DetourTransactionBegin();
- DetourUpdateThread(GetCurrentThread());
- DetourAttach(&(PVOID&)pSend, MySend);
- if(DetourTransactionCommit() == NO_ERROR)
- {
- MessageBox(0,"send() detoured successfully","asd",MB_OK);
- }
- DetourTransactionBegin();
- DetourUpdateThread(GetCurrentThread());
- DetourAttach(&(PVOID&)pRecv, MyRecv);
- if(DetourTransactionCommit() == NO_ERROR)
- {
- MessageBox(0,"recv() detoured successfully","asd",MB_OK);
- }
- }
- else if (dwReason == DLL_PROCESS_DETACH) {
- MessageBoxA(0,"Deattach",0,0);
- Logger << "##\n## Logging Stopped (" << NowToString() << ")\n##";
- Logger.close();
- DetourTransactionBegin();
- DetourUpdateThread(GetCurrentThread());
- DetourDetach(&(PVOID&)pSend, MySend);
- DetourTransactionCommit();
- DetourTransactionBegin();
- DetourUpdateThread(GetCurrentThread());
- DetourDetach(&(PVOID&)pRecv, MyRecv);
- DetourTransactionCommit();
- }
- return TRUE;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement