You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何隐藏DLL生成的JUMP指令对应的void描述

隐藏void类型相关描述的实现方案

编译期清除符号信息

  • 移除编译调试选项:MSVC编译时删除 /Zi、/ZI 编译参数与 /DEBUG 链接参数,GCC/Clang编译后执行strip命令清除所有符号表,同时开启/O2(MSVC)或-O3(GCC/Clang)最高等级优化,从根源消除void类型相关的调试标识、符号描述。
  • 关闭冗余类型输出:编译时添加/GR-(MSVC)或-fno-rtti(GCC/Clang)参数关闭RTTI,同时添加/EHs-c-(MSVC)或-fno-exceptions参数关闭C++异常,避免类型信息残留在二进制文件中。

混淆void函数的识别特征

逆向工具通常通过函数是否有返回值赋值、栈平衡逻辑判断是否为void类型函数,可通过以下方式破坏识别逻辑:

  • 改造函数定义:将void类型函数修改为返回任意数值类型的函数,末尾添加无意义的返回语句,比如将void test()改为uint64_t test(),最后追加return rand();,优化编译后几乎不会增加冗余代码,同时可干扰逆向工具的自动类型判定。
  • 强制内联小型void函数:对体积较小的void函数添加__forceinline(MSVC)或__attribute__((always_inline))(GCC/Clang)强制内联修饰,编译后函数会直接展开到调用位置,不会留下独立的void函数结构。
  • 篡改返回逻辑:在void函数末尾原本直接ret的位置,新增无意义的jmp跳转逻辑,跳转到通用ret stub或者绕一圈再返回,破坏IDA等反汇编工具的自动函数分析规则。

额外加固方案

  • 如果你开发的DLL不需要对外导出函数,将所有函数声明为静态类型,或者通过def文件指定不导出任何符号,避免导出表残留函数特征。
  • 编译完成后可使用UPX加壳,或者对关键函数使用VMProtect等工具做虚拟化处理,处理后反汇编工具无法正常解析函数结构,自然无法识别出void类型相关描述。

你提供的参考截图如下:
C++中的Void
汇编中的Jmp

内容的提问来源于stack exchange,提问作者Jor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 15:06:11