求一段C语言写的程序自毁代码,要求该程序在任务结束后删除自身及相关文件.

求一段C语言写的程序自毁代码,要求该程序在任务结束后删除自身及相关文件.,第1张

BOOL SelfDel()

{

SHELLEXECUTEINFO sei

TCHAR szModule [MAX_PATH],szComspec[MAX_PATH],szParams [MAX_PATH]

// 获得自身文件名. 获取cmd的全路径文件名

if((GetModuleFileName(0,szModule,MAX_PATH)!=0) &&

(GetShortPathName(szModule,szModule,MAX_PATH)!=0) &&

(GetEnvironmentVariable("COMSPEC",szComspec,MAX_PATH)!=0))

{

    // 设置命令参数.

    lstrcpy(szParams,"/c del ")

    lstrcat(szParams, szModule)

    lstrcat(szParams, " > nul")

    // 设置结构成员.

    sei.cbSize = sizeof(sei)

    sei.hwnd = 0

    sei.lpVerb = "Open"

    sei.lpFile = szComspec

    sei.lpParameters = szParams

    如肢sei.lpDirectory = 0 sei.nShow = SW_HIDE

    sei.fMask = SEE_MASK_NOCLOSEPROCESS

    // 创建cmd进程.

    if(ShellExecuteEx(&sei))

    {

        // 设置cmd进程的执行级别为空闲执行,使本程序有足够的时间从内存中退出.

        SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS)

        // 将自身进程的优先级置高

        SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS)

        SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL)

        // 通知Windows资源浏览器,本程序文件已经被删除.

        SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0)

        return TRUE

    }

}

return FALSE

}

其他相关程序直接调用remove函数删除就好. 只有程序本身 需要新建进程渣磨世删除 也就是上面这个代码. 游耐

程序自删除的方式有很多,不过最终的思想不过是关闭本身进程,开启新进程用于删除自身。下面这个方法是用windows自带命令行程序实现删除。

命令行为 cmd.exe /c del filename

--------------------------------------------------------------------------------

代码示例:C语言形式

#include

#include

#include

BOOL SelfDel()

{

SHELLEXECUTEINFO sei

TCHAR szModule [MAX_PATH],szComspec[MAX_PATH],szParams [MAX_PATH]

// 获得自身文件名. 获取cmd的全路径文件名

if((GetModuleFileName(0,szModule,MAX_PATH)!=0) &&

(GetShortPathName(szModule,szModule,MAX_PATH)!=0) &&

(GetEnvironmentVariable("COMSPEC",szComspec,MAX_PATH)!=0))

{

// 设置命令参数.

lstrcpy(szParams,"念并/c del ")

lstrcat(szParams, szModule)

lstrcat(szParams, " >nul")

// 设置结构成员.

sei.cbSize = sizeof(sei)

sei.hwnd = 0

sei.lpVerb = "Open"

sei.lpFile = szComspec

sei.lpParameters = szParams

sei.lpDirectory = 0sei.nShow = SW_HIDE

sei.fMask = SEE_MASK_NOCLOSEPROCESS

// 创建cmd进程.

if(ShellExecuteEx(&sei))

{

// 设置cmd进程的执行级别为空闲执行,使本程序有足够的洞高察时间从内存中退出.

SetPriorityClass(sei.hProcess,IDLE_PRIORITY_CLASS)

// 将自身进程的优先级置高

SetPriorityClass(GetCurrentProcess(),REALTIME_PRIORITY_CLASS)

SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL)

// 通知Windows资源浏览器,本程序文件已经被删除.

SHChangeNotify(SHCNE_DELETE,SHCNF_PATH,szModule,0)

纳茄return TRUE

}

}

return FALSE

}

---------------------------------------------------------------------------------


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12391845.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-23
下一篇2023-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存