软件加壳,主要目的是为了防止被破坏。我最近遇到一个linux c 的加壳需求。
核心其实也非常简单,就是完成运行过程中,解壳完成后的源程序的代码重定位,让源代码正常的运行起来。
现在比较出名的加壳工具还是成名已久的开源老将 – - – UPX,但是有个弊端就是,开源的,解壳工具基本上也是开源的,这样只是让我们自己的软件 加壳比不加壳 只是多了一层遮羞布。
解决这个问题,我有两个方案,一个是将UPX的重定位和ZIP项目的加密功能进行融合,另外一个方案是使用zip项目和linux c下的exec命令融合。
如果要求不高,我感觉第二个方案比较简单,但是硬伤是,exec系列的函数只有在磁盘中加载函数,我想的是zip解压到/tem或者/proc的一个比较随即隐秘的位置,使用exec来做。
当然第二个方案完美的解决方法是,将exec系列修改成从内存中加载,后来发现exec的代码是linux内核的,linux内核的代码有个特点,就是牵一发则动全身,你要改,就得将内核编译一次,在内核下做修改。我评估了下,没得必要,对以后移植有很大的弊端。
剩下的方案就是第一个,UPX和ZIP的融合,看起来就很难。。。
怎样才能有一个自己的加壳工具,这个感觉任务量贼大。