rpm遇到的坑-与VMP冲突

rpm遇到的坑-与VMP冲突

问题描述

项目生成应用程序使用vmp(VMProtectSDK)保护提升安全性。 
在CentOS 6.5下使用rpm打包应用程序,但释放后文件没法正常运行,根据程序运行日志可知程序运行时异常。php

思考及解决过程

验证1:检查安装先后的应用程序是否一致。经过查看文件属性,发现RPM释放后文件比打包前文件略小100多个字节。 
验证2:怀疑是tar.gz打包过程致使程序发生改变。单独对应用程序进行打包验证,发现压缩先后文件相同,排除 tar.gz 压缩选项与解压选项形成文件变化的状况。 
验证3:使用没有VMP处理的应用程序进行测试,rpm安装后的文件大小改变(变小若干字节),但并不影响程序运行。 
经过二进制查看工具检查rpm打包先后的应用程序文件,发现应用程序elf结构中的符号节与字符串节内容丢失。 
由此能够判定rpm在打包的过程当中对应用程序的文件进行修改,但不会影响正常程序运行,但会影响VMP保护后的程序运行。 
在网上搜索关键字,stackoverflow 上找到相似问题。默认状况下rpm会修改 .symtab/.strtab 节的内容,删除调试信息(符号节和字符串节内容)。安全

缘由分析

VMP保护应用程序时修改了应用程序的 elf 结构,使用花指令、混淆、虚拟机、修改跳转等手段改变了原有文件结构,其中将部分须要的指令或数据存放至 .symtab/.strtab 节,在rpm打包处理过程当中被删除,致使应用程序不可用。ide

解决方案

解决方案原文连接 
rpm build will remove .symtab/.strtab section? 
https://stackoverflow.com/questions/44921115/rpm-build-will-remove-symtab-strtab-sectionwordpress

Stripping and stopping stripping of binaries in RPM Build. 
https://imvoid.wordpress.com/2013/06/05/stripping-and-stopping-stripping-of-binaries-in-rpm-build/工具

解决方案1:修改 rpm 打包选项

全局处理方案:

在 SPEC 文件最顶部添加如下代码:post

 
    
1 %global _enable_debug_package 0
2 %global debug_package %{nil}
3 %global __os_install_post /usr/lib/rpm/brp-compress %{nil}
 
    
 
    
  • 1
  • 2
  • 3

单一应用程序处理方案:

strip --strip-unneeded binary_name
  • 1

解决方案2:二次压缩VMP保护后的应用程序

对照问题缘由分析可知,rpm会扫描并处理应用程序符号表,但对于.so和数据文件则没有影响。 
根据以上思路,能够对应用程序的文件描述结构避免rpm进行扫描处理便可,能够考虑对 vmp 加壳后程序进行二次打包,在安装后进行二次解压,来达到目的。测试

相关文章
相关标签/搜索