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

 %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冲突的更多相关文章

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

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

  2. centos 7( linux )下搭建elasticsearch踩坑记

    原文:https://blog.csdn.net/an88411980/article/details/83150380 概述    公司最近在做全文检索的项目,发现elasticsearch踩了不少 ...

  3. 【Linux_Fedora_应用系列】_4_安装chrome浏览器

    在前面一篇文章中,我们讨论了在Linux Fedora 14下安装WMV解码器:[Linux_Fedora_应用系列]_3_如何利用Smplayer播放WMV格式的文件 在文章中介绍的方法同样适合FC ...

  4. mysql快速入门

    一.下载并解压 $ wget http://cdn.mysql.com/Downloads/MySQL-5.5/MySQL-5.5.42-1.el6.x86_64.rpm-bundle.tar 解压后 ...

  5. Unity 和android 交互 记录

    参考文章 http://www.jianshu.com/p/c06063a403c6 趟坑如下 icon 冲突问题: 设置不了unity icon,显示的是默认的 android 小人 解决方法: 在 ...

  6. Azkaban使用安装文档

    Azkaban使用安装文档 Azkaban简介 Azkaban的是什么 Azkaban是由Linkedin公司推出的一个批量工作流任务调度器,用于在一个工作流内以一个特定的顺序运行一组工作和流程.Az ...

  7. elastic5.4安装错误解决

    首先,我们从官网下载:(官网:https://www.elastic.co/downloads/elasticsearch)(推荐下载deb或者rpm包,否则坑很多) 启动 (需要依赖java环境) ...

  8. SaltStack远程执行-返回MySQL

    上一篇:SaltStack远程执行-模块 参考官方文档:https://docs.saltstack.com/en/latest/ref/returners/all/salt.returners.my ...

  9. centos6.5升级默认的Mysql到5.5方法

    0.用lsb_release -a 查看linux系统的版本 1.官网下载bundle或rpm版2.解压 tar -xvf MySQL-xxx.tar或 MySQL-server-xxx.rpm和My ...

随机推荐

  1. 【HTML5】Canvas绘图详解-1

    ----->Canvas绘制基础 1,线条绘制 1-1,线条组成的图形和beginPath 案例:绘制由不同颜色的线条组成的图案 1-2,多边形的填充和closePath 案例:绘制封闭具有填充 ...

  2. 并发问题 关于Redis

    并发问题 关于Redis [吐槽]Jimesembria 付费请人解这个BUG , 有没有php同学有兴趣,(问题原因是理论上是5分钟内不生产同样金额的订单, 但是由于并发原因没控制好) 10:34: ...

  3. 学习HTML5之路

    Web 技术大致的时间轴 1991 HTML 1994 HTML 2 1996 CSS 1+JavaScript 1997HTML 4 1998 CSS2 2000 XHTML 1 2002 使用DI ...

  4. Linux下查询一个包是32位还是64位

    Linux下查询一个包是32位还是64位 [root@localhost ~]# rpm -qa  --queryformat %-{name}-%{version}-%{release}-%{arc ...

  5. Linux下的Memcache安装,启动

    一.linux安装memcache 1. 如果通过下载源码进行安装,则需要下载最新版本http://memcached.googlecode.com/files/memcached-1.4.13.ta ...

  6. Java调用Groovy

    记录一下 http://docs.groovy-lang.org/latest/html/documentation/guide-integrating.html

  7. git commit 提交的时候,出现*** Please tell me who you are. git config --global 。。。问题

    $ git commit -a -m 'v6' *** Please tell me who you are. Run git config --global user.email "you ...

  8. MyEclipse jQuery智能 提示

    jQuery智能 MyEclipse Spket IDE 1.6.23 http://www.spket.com/download.html Plugin 1.6.23 5.62 MB Minimum ...

  9. winform 如何正确的获取窗体的标题栏高度

    最近我需要知道鼠标在一个控件里的相对位置,鼠标相对于屏幕的位置我是可以知道的,所以只要得到控件相对于屏幕的位置,就可以算出鼠标相对于控件的位置了 但是发现有误差 后来经过测试是由于窗体的标题栏高度导致 ...

  10. python 中 print 函数用法总结

    Python 思想: “一切都是对象!” 在 Python 3 中接触的第一个很大的差异就是缩进是作为语法的一部分,这和C++等其他语言确实很不一样,所以要小心 ,其中python3和python2中 ...