rpm遇到的坑-与VMP冲突
问题描述
项目生成应用程序使用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 文件最顶部添加以下代码:
%global _enable_debug_package
%global debug_package %{nil}
%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 加壳后程序进行二次打包,在安装后进行二次解压,来达到目的。
rpm遇到的坑-与VMP冲突的更多相关文章
- yum -y install php-mysql 版本冲突
yum -y install php-mysql 版本冲突 2018年09月02日 19:16:59 乐于技术分享 阅读数:640 [root@itop yum.repos.d]# yum -y ...
- centos 7( linux )下搭建elasticsearch踩坑记
原文:https://blog.csdn.net/an88411980/article/details/83150380 概述 公司最近在做全文检索的项目,发现elasticsearch踩了不少 ...
- 【Linux_Fedora_应用系列】_4_安装chrome浏览器
在前面一篇文章中,我们讨论了在Linux Fedora 14下安装WMV解码器:[Linux_Fedora_应用系列]_3_如何利用Smplayer播放WMV格式的文件 在文章中介绍的方法同样适合FC ...
- mysql快速入门
一.下载并解压 $ wget http://cdn.mysql.com/Downloads/MySQL-5.5/MySQL-5.5.42-1.el6.x86_64.rpm-bundle.tar 解压后 ...
- Unity 和android 交互 记录
参考文章 http://www.jianshu.com/p/c06063a403c6 趟坑如下 icon 冲突问题: 设置不了unity icon,显示的是默认的 android 小人 解决方法: 在 ...
- Azkaban使用安装文档
Azkaban使用安装文档 Azkaban简介 Azkaban的是什么 Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程.Az ...
- elastic5.4安装错误解决
首先,我们从官网下载:(官网:https://www.elastic.co/downloads/elasticsearch)(推荐下载deb或者rpm包,否则坑很多) 启动 (需要依赖java环境) ...
- SaltStack远程执行-返回MySQL
上一篇:SaltStack远程执行-模块 参考官方文档:https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.my ...
- centos6.5升级默认的Mysql到5.5方法
0.用lsb_release -a 查看linux系统的版本 1.官网下载bundle或rpm版2.解压 tar -xvf MySQL-xxx.tar或 MySQL-server-xxx.rpm和My ...
随机推荐
- 【转】C#中的线程 入门
Keywords:C# 线程 Source:http://www.albahari.com/threading/ Author: Joe Albahari Translator: Swanky Wu ...
- 【java规则引擎】规则引擎RuleBase中利用观察者模式
(1)当RuleBase中有规则添加或删除,利用观察者模式实现,一旦有变动,规则引擎其他组件也做出相应的改变.(2)学习思想:当一个应用中涉及多个组件,为了实现易扩展,解耦思想.可以利用观察者模式实现 ...
- mysql存入GBK编码字段信息
set @moneyStr=BASE64_ENCODE(CONVERT(CONCAT('线上报名且已交费',money,'元') using GBK));
- 数据库中通过group by找出表中的重复数据
有时候在做数据割接时会碰到数据插入失败的情况,大部分都是导出的数据中存在重复导致的.我们可以通过查询语句带分组条件来确认是否有重复数据.例如我现在有表 t_wlf_info,其中有个 username ...
- 1、Flume基础扫盲
1.概述 Flume是一个分布式.可靠的和高可用的海量日志采集.聚合和传输的系统.支持在系统中定制种类数据发送方,用于收集数据:同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的 ...
- An invalid form control with name='timeone[]' is not focusable.
在项目开发的时候 遇到了这样的报错 An invalid form control with name='timeone[]' is not focusable. 学习源头:https://segme ...
- php读取文件夹文件,清理文件
// 获取文件夹中图片的数量和名称 public function show_tmp_file() { $handler = opendir('./tmp/');//当前目录中的文件夹下的文件夹 $c ...
- MySQL优化方法论
MySQL优化方法 主机 操作系统 数据库 应用 MySQL优化理论 吞吐率(Throughput) VS 延时(Latency) 吞吐率: 我们一般使用单位时间内服务器处理的请求数来描述其并发处理能 ...
- MFC学习(二)
WinApp封装了程序的主入口WinMain,WinMain就和C语言的main函数地位一样,是Win32程序的入口.在MFC的封装中,一个程序启动,Windows调用WinMain,这个WinMai ...
- jQuery中获取相对文档的坐标的方法是什么?
offset(),获取匹配元素在当前视口的相对偏移.返回的对象包含两个整型属性:top 和 left,以像素计.此方法只对可见元素有效. position()获取匹配元素相对定位父级的偏移.没有定位父 ...