win32实现lnk文件创建
前言:win32实现lnk文件创建
参考文章:https://x.threatbook.com/v5/article?threatInfoID=42622
手动右键创建相关的启动路径和图标的时候,如果对应的启动路径和图标不存在那么就无法创建成功,用win32的话是可以的
#include <iostream> #include <Windows.h> #include <shlobj.h> #include <locale> using namespace std; DWORD initCom() { if (S_OK != CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)) //初始化COM库失败 return -1; return 0; } DWORD createLink(const wchar_t* targetPath, const wchar_t* arguments, const wchar_t* iconPath, const wchar_t* lnkPath) { IShellLinkW* pShellLink = NULL; IPersistFile* ppf = NULL; if (SUCCEEDED(initCom())) { HRESULT hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pShellLink)); if (SUCCEEDED(hr)) { arguments = arguments == L"" ? L"" : arguments; iconPath = iconPath == L"" ? L"" : iconPath; pShellLink->SetPath(targetPath); pShellLink->SetArguments(arguments); pShellLink->SetIconLocation(iconPath, 0); hr = pShellLink->QueryInterface(&ppf); if (SUCCEEDED(hr)) { hr = ppf->Save(lnkPath, TRUE); if (!SUCCEEDED(hr)) { ppf->Release(); pShellLink->Release(); CoUninitialize(); return -1; } } else { pShellLink->Release(); CoUninitialize(); return -1; } } else { return -1; } } if (ppf != NULL) { ppf->Release(); } if (pShellLink != NULL) { pShellLink->Release(); } return 0; } DWORD createLink(const wchar_t* targetPath, const wchar_t* iconPath, const wchar_t* lnkPath) { return createLink(targetPath, NULL, iconPath, lnkPath); // 无参数 } DWORD createLink(const wchar_t* targetPath, const wchar_t* lnkPath) { return createLink(targetPath, NULL, NULL, lnkPath); } int wmain(int argc, wchar_t* argv[]) { setlocale(LC_ALL, ""); if (argc == 5) { if (!createLink(argv[1], argv[2], argv[3], argv[4])) { wprintf(L"save file: %s\n", argv[4]); } } else if (argc == 4) { if (!createLink(argv[1], argv[2], argv[3])) { wprintf(L"save file: %s\n", argv[3]); } } else { wprintf(L"for eaxample:\n\t%s 快捷程序路径 参数路径 图标路径 生成路径\n", argv[0], argv[0]); wprintf(L"\t%s C:\\Windows\\system32\\calc.exe --connect D:\\WinDDK\\7600.16385.1\\Debuggers\\windbg.exe C:\\ProgramData\\test.lnk\n", argv[0], argv[0]); wprintf(L"for eaxample:\n\t%s 快捷程序路径 图标路径 生成路径\n", argv[0], argv[0]); wprintf(L"\t%s C:\\Windows\\system32\\calc.exe D:\\WinDDK\\7600.16385.1\\Debuggers\\windbg.exe C:\\ProgramData\\test.lnk\n", argv[0], argv[0]); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
2020-02-27 CSRF的安全问题
2020-02-27 preg_replace
2020-02-27 内网渗透(三)
2020-02-27 PE 信息打印