当前位置: 首页 > news >正文

DLL Injection for Notepad

先做个注入器

// Injector.cpp
#include <windows.h>
#include <tlhelp32.h>
#include <tchar.h>
#include <iostream>BOOL InjectDLL(DWORD dwPID, const wchar_t* dllPath)
{HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID);if (!hProcess) {std::wcout << L"打开进程失败" << std::endl;return FALSE;}LPVOID pRemoteBuf = VirtualAllocEx(hProcess, NULL, (wcslen(dllPath) + 1) * sizeof(wchar_t),MEM_COMMIT, PAGE_READWRITE);if (!pRemoteBuf) {CloseHandle(hProcess);return FALSE;}WriteProcessMemory(hProcess, pRemoteBuf, dllPath,(wcslen(dllPath) + 1) * sizeof(wchar_t), NULL);HMODULE hKernel32 = GetModuleHandle(L"kernel32.dll");LPTHREAD_START_ROUTINE pLoadLibraryW =(LPTHREAD_START_ROUTINE)GetProcAddress(hKernel32, "LoadLibraryW");HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0,pLoadLibraryW, pRemoteBuf, 0, NULL);WaitForSingleObject(hThread, INFINITE);VirtualFreeEx(hProcess, pRemoteBuf, 0, MEM_RELEASE);CloseHandle(hThread);CloseHandle(hProcess);return TRUE;
}int wmain(int argc, wchar_t* argv[])
{if (argc < 3) {std::wcout << L"用法: Injector.exe <PID> <DLL路径>" << std::endl;return -1;}DWORD pid = _wtoi(argv[1]);const wchar_t* dllPath = argv[2];if (InjectDLL(pid, dllPath)) {std::wcout << L"注入成功!" << std::endl;}else {std::wcout << L"注入失败。" << std::endl;}return 0;
}

再来个测试的DLL

#include <windows.h>
#include <tchar.h>DWORD WINAPI InjectThread(LPVOID)
{Sleep(1000); // 等待窗口初始化DWORD myPID = GetCurrentProcessId();HWND hwnd = GetTopWindow(NULL);while (hwnd){DWORD pid = 0;GetWindowThreadProcessId(hwnd, &pid);if (pid == myPID){// 找子窗口:Edit 控件HWND hEdit = FindWindowEx(hwnd, NULL, L"Edit", NULL);if (hEdit){const wchar_t* text = L"Hello from Injected DLL!\r\n";SendMessage(hEdit, WM_SETTEXT, 0, (LPARAM)text);return 0;}}hwnd = GetNextWindow(hwnd, GW_HWNDNEXT);}MessageBox(NULL, L"❌ 找不到 Notepad 编辑框", L"DLL 注入失败", MB_OK);return 0;
}BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{if (ul_reason_for_call == DLL_PROCESS_ATTACH){DisableThreadLibraryCalls(hModule); // 避免额外 DLL_THREAD_ATTACH 回调CreateThread(NULL, 0, InjectThread, NULL, 0, NULL); // ✅ 在新线程中执行逻辑}return TRUE;
}

找子窗口 查看控件类 用Visual Studio 2022的Tool => spy++ show window 拖动 狙击镜 到notepad window
image

http://www.sczhlp.com/news/10298/

相关文章:

  • 在K8S中,有一家公司想要修改其部署方法,并希望构建一个可扩展性和响应性更高的平台,该公司要如何实现这一目标以满足他们的客户?
  • 记一次 .NET 某汽车控制焊接软件 卡死分析
  • 在K8S中,我们都知道从单服务到微服务的转变从开发方面解决了问题,但在部署方面却增加了问题,公司该如何解决部署方面的问题?
  • 扣子 Coze 产品体验功能
  • 为什么现在的音乐+图片的多媒体形式的感染力这么强
  • 如何排查CPU占用过高
  • 关于网络性能的命令
  • 在K8S中,有一个公司要向具有各种环境的客户提供所有必需的分发产品的方案,如何看待他们动态地实现这一关键目标?
  • 在K8S中,有一家公司希望在从裸机到公共云的不同云基础架构上运行各种工作负载。在存在不同接口的情况下,该公司将如何实现这一目标?
  • Playwright基础入门篇 (1) | 环境搭建与首个自动化脚本
  • 在K8S中,集群服务暴露失败 如何解决?
  • noip2022
  • noip2023
  • csp2023
  • 酷睿Ultra和i系列有啥区别?怎么选看这几点
  • 在K8S中,pod 状态为 ErrlmagePull 如何解决?
  • 在K8S中,外网无法访问集群提供的服务 如何解决?
  • 2.3 GTK 中的动作(action)概述
  • docker 封装php项目
  • OpenCV入门(17):图像形态学操作
  • M序列 CEVA DSP 实现
  • 各类损失loss
  • 数论 学习笔记
  • [笔记]GGML 或GGUF的14种不同量化模式说明
  • Visual studio 2017安装教程 VS2017(附安装包)
  • Python装饰器底层原理
  • 用 Amazon Q AI 写了个 PHP 缓存库,解决” 若无则获取并回填” 这个老问题
  • 安装mkcert的ip证书
  • 告别外发文件管理乱象:Ftrans B2B为企业筑牢数据安全防线!
  • 转:UML一一 类图关系 (泛化、实现、依赖、关联、聚合、组合)_uml类图关系