如何防止7-Zip文件管理器提取NSIS安装包内文件
针对NSIS安装包防7-Zip提取的解决方案
对敏感文件单独加密
在NSIS脚本里借助加密插件(比如Crypt插件)对核心文件做加密处理,安装阶段再通过脚本解密释放。示例代码:; 引入Crypt插件 !include "Crypt.nsh" Section ; 编译时加密源文件 Crypt::EncryptFile "source\core.dll" "encrypted\core.dll.enc" "MySecretKey" ; 安装时解密并释放到目标路径 Crypt::DecryptFile "$INSTDIR\core.dll.enc" "$INSTDIR\core.dll" "MySecretKey" ; 删除加密后的临时文件 Delete "$INSTDIR\core.dll.enc" SectionEnd这种方式下,即便7-Zip提取到文件,拿到的也是加密后的乱码内容,无法直接使用。
修改安装包标识头
7-Zip是通过识别NSIS的文件头来解析安装包的,你可以用十六进制编辑器把安装包开头的NSIS标识改成其他内容,让7-Zip无法识别格式,从而阻止提取。注意修改后要测试安装包能否正常运行,避免破坏原有功能。使用第三方加壳工具
给NSIS生成的安装包套上保护壳,比如ASPack、UPX高级模式或者专业软件保护工具,这类工具会对安装包做压缩、加密混淆,破坏7-Zip的识别逻辑,同时也能防反编译。启用带密码的LZMA压缩
在NSIS脚本里开启带密码的LZMA压缩,虽然7-Zip仍能识别格式,但提取时必须输入密码。示例代码:SetCompressor /SOLID lzma SetCompressorDictSize 32 ; 设置压缩密码 SetCompressPassword "YourStrongPassword"这种方法的局限是用户安装时也需要输入密码,更适合内部使用的安装包。
需要说明的是,没有绝对的防护手段,上述方法只能提高提取门槛,无法完全阻止专业人员的逆向操作。
内容的提问来源于stack exchange,提问作者DIMM_V2
相关产品推荐
相关产品推荐

