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 加殼後程序進行二次打包,在安裝後進行二次解壓,來達到目的。測試

相關文章
相關標籤/搜索