FASM编译Windows可执行文件AV高误报率无签名解决方法问询
无数字签名前提下规避AV误报的可行方案
PE结构对齐调整
FASM默认生成的PE对齐参数与MSVC、MinGW等主流编译器存在差异,是高频误报触发点:
- 调整PE头基址与对齐参数,将
format PE GUI 4.0修改为format PE GUI 4.0 at 0x00400000,显式指定节对齐为0x1000、文件对齐为0x200,匹配主流编译器默认参数。 - 删除无用导入项,你当前代码导入了未使用的
ntdll.dll,无合理理由导入ntdll属于AV重点标记的可疑特征,直接移除该导入项即可。 - 修改导入表节属性,你当前
.idata节配置为可读可写,常规编译器生成的导入表为只读属性,将属性修改为readable即可,避免触发可疑PE属性规则。
节与静态数据优化
- 移除无意义的占位数据,你当前
.data节的占位变量maybe_there_should_be_a_rw_section_too无实际用途,空内容/极小内容的节会触发部分AV规则,无需求时直接删除即可。 - 静态数据避免使用固定值填充,你测试中添加1KB固定内容的节会触发误报,属于恶意程序常用的填充特征,若需添加填充数据使用随机无意义字节即可,不要使用全0、连续
0x90、连续重复操作码等特征明显的填充内容。 - 若需添加代码填充,不要使用连续重复的单字节指令(如连续
mov eax,0、连续nop),改用多字节无意义指令(如nop dword ptr [eax+eax+0x0])或随机组合的无害指令。
编译流程调整
- 可改用FASM编译目标文件+MSVC链接器的组合生成最终PE,MSVC链接器生成的PE结构完全符合主流软件特征,可规避绝大多数针对小众编译器特征的检测规则。
运行时行为优化
- 程序启动后先执行常规初始化逻辑,调用
GetModuleHandleW、GetCommandLineA等绝大多数正常软件启动都会调用的基础API,再执行业务逻辑,避免程序入口点直接调用业务API的异常执行流特征。 - 后续添加业务功能时,敏感操作相关的字符串不要直接明文存储在静态段,改用运行时动态拼接、临时解密的方式生成,避免静态特征匹配。
内容的提问来源于stack exchange,提问作者bytecode77
相关产品推荐
相关产品推荐

