rpm遇到的坑-与VMP冲突

rpm遇到的坑-与VMP冲突

摘自:https://blog.csdn.net/shijichao2/article/details/78797586 

2017年12月13日 22:29:21 阅读数:224 标签: centosrpmvmpvmprotect文件变小 更多
个人分类: linux
 
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/shijichao2/article/details/78797586

问题描述

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

思考及解决过程

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

原因分析

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

解决方案

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

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 文件最顶部添加以下代码:

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 加壳后程序进行二次打包,在安装后进行二次解压,来达到目的。

posted @   LiuYanYGZ  阅读(705)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2017-08-31 NFS原理详解
点击右上角即可分享
微信分享提示