如何用C语言实现程序运行时自修改以规避Windows安全检测?
解决关机程序被杀毒软件误报的方案
你得先明白一个关键问题:编译好的exe里根本不存在源代码的注释内容,所以你想通过修改源代码注释来绕检测的思路行不通——杀毒软件查的是exe的机器码特征,不是源代码。下面给你两个实用的解决办法:
方案一:拆分拼接命令字符串
把关机命令拆成几段,运行时再拼起来,避免静态特征被匹配到:
#include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char cmd_part1[] = "C:\\WINDOWS\\System32\\shutdown "; char cmd_part2[] = "/s"; char full_cmd[100] = {0}; strcat(full_cmd, cmd_part1); strcat(full_cmd, cmd_part2); system(full_cmd); return 0; }
方案二:直接调用Windows系统API(更推荐)
不用system函数,直接调用系统原生的关机API,能大幅降低误报概率:
#include <windows.h> int main() { // EWX_SHUTDOWN 表示关机,EWX_FORCE 强制关闭所有未响应程序 ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0); return 0; }
关于“程序自修改”的补充
如果你坚持想做程序自修改(修改自身exe文件),这需要操作PE文件结构,复杂度很高,而且更容易被杀毒软件盯上。大致步骤是获取自身路径、打开exe文件、找到对应代码段修改机器码、保存后重新执行,但这种方法没必要,普通场景完全用不上。
内容的提问来源于stack exchange,提问作者killer queen
相关产品推荐
相关产品推荐

