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

转载于:https://www.cnblogs.com/LiuYanYGZ/p/9566179.html

rpm遇到的坑-与VMP冲突相关推荐

  1. rpm安装mysql5.7.16_【CentOS 6.6 RPM方式安装MySQL 5.7.16 】

    1.准备安装介质 从MySQL官网下载如下4个rpm安装包: mysql-community-common-5.7.16-1.el6.x86_64.rpm mysql-community-libs-5 ...

  2. yum -y install php-mysql 版本冲突

    yum -y install  php-mysql 版本冲突 2018年09月02日 19:16:59 乐于技术分享 阅读数:640 [root@itop yum.repos.d]# yum -y i ...

  3. CentOS离线安装gcc(循环依赖、冲突解决)

    CentOS离线安装gcc循环依赖.冲突解决 1.概述 2.安装过程 2.1 检查gcc安装情况 2.2 根据系统版本安装下载相应rpm 2.3 上传到服务器并安装 2.3.1 解决循环依赖 2.3. ...

  4. idea解决maven依赖冲突

    最近在一个老spring项目上面需要适配一个新功能,过程中也需要升级spring的版本,然后最后就导致maven的依赖包很乱,同一个包存在多个版本,本文就记录下使用idea解决maven的依赖冲突,同 ...

  5. 使用Glide加载、缓存图片、Gif、解决背景出现浅绿色、GlideModules冲突

    之前一直使用Volley ImageLoader.或者Picasso,无意间发现Glide,觉得真的是棒棒的. 1.和其他的一样在Module的build.gradle中添加依赖 compile 'c ...

  6. centos 彻底卸载软件包(含依赖)并解决安装冲突包问题

    centos 彻底卸载软件包(含依赖)并解决安装冲突包问题 1.查看yum操作事务 [root@localhost ~]# yum history list 或 yum history Loading ...

  7. 阿里云云服务器Centos7部署JDK8+Nginx+Tomcat8+Mysql5.7

    为什么80%的码农都做不了架构师?>>>    sudo yum -y install wget 1.JDK8 1.1 下载JDK1.8,wget http://download.o ...

  8. 王道408数据结构——第七章 查找

    文章目录 一.基本概念 二.顺序查找(线性查找) 一般线性表的顺序查找 有序表的顺序查找 二.折半查找(二分查找) 三.分块查找(索引顺序查找) 四.B树 五.B+树 六.散列表 构造散列函数 1. ...

  9. 架构师成长之路(内附推荐书籍)

    转: https://www.jianshu.com/p/f661f098b88a 想要成为架构师,对技术的深度和广度都有很高的要求,本文列举出成为一个架构师必备的技能和学习路线. 对于学习途径有疑惑 ...

最新文章

  1. java instanceof 报错_java instanceof方法
  2. pyqt5与matplotlib结合画图 ,绘制动态图形
  3. oracle 归档日志
  4. .Net基础体系和跨框架开发普及
  5. Java list接口
  6. 从零实现一个3D目标检测算法(3):PointPillars主干网实现(持续更新中)
  7. LeetCode 253. 会议室 II(贪心+优先队列)
  8. jquery js 兄弟父元素的获取
  9. inventor软件绘制百叶窗方法_三维工厂设计该使用什么软件?
  10. python安全性_关于python安全性的问题
  11. java堆栈_Java堆栈– Java堆栈
  12. FieldGroup绑定ItemDataSource
  13. 在服务器应用虚拟化中发现价值
  14. python简单代码示例-python3简单代码示例
  15. layui文档,镜像站
  16. 各个省份城市HTML,省份城市的三级联动.html
  17. [数论 反演]BZOJ4816 [Sdoi2017]数字表格
  18. delphi下使用indy进件socket通信的简单实例介绍
  19. Java中获取当天的0点时间和明天的0点时间
  20. adb命令之service call

热门文章

  1. 回顾2017系列篇(二):移动端APP设计趋势
  2. Android 开发之旅:深入分析布局文件又是“Hello World!”
  3. OSChina 周二乱弹 ——无人超市的出现,未来什么最重要?
  4. 【译】渐进式 Web App 的离线存储
  5. 浅谈网站内容应该做给谁看?
  6. 标题: ZZ- Linux 系统裁减指南(LiPS)
  7. mysql所支持的比较运算符_MySQL比较运算符一览表(带解析)
  8. 直接sql和orm哪个效率高_制砂机哪个牌子好?好的制砂机什么样?看看你的制砂机符不符合...
  9. adb 51 android.rules,使用51-android-rules解决ubuntu上不识别 android手机的问题
  10. mysql连接查询(内联)_MySQL之连接查询