逆向工程-查壳去壳和加壳的基本原理
这里先说明一下壳的概念,壳主要是负责保护软件不被非法修改和反编译的程序。
它们一般都是先于程序运行,拿到控制权,然后完成它们保护软件的任务。
查壳的基本原理:像PEID这类程序都是通过目录下的userdb.txt数据库进行加壳程序特征对比的。
加壳的基本原理:是一种通过一系列数学运算,将可执行程序文件或动态链接库文件的编码进行改变(目前还有一些加壳软件可以压缩、加密驱动程序),以达到缩小文件体积或加密程序编码的目的。加壳一般是指保护程序资源的方法。
去壳的基本原理 :一般是指除掉程序的保护,用来修改程序资源。
脱壳主要有两种方法:硬脱壳和动态脱壳。
第一种,是硬脱壳,这是指找出加壳软件的加壳算法,写出逆向算法,就像压缩和解压缩一样。由于,目前很多“壳”均带有加密、变形的特点,每次加壳生成的代码都不一样。硬脱壳对此无能为力,但由于其技术门槛较低,仍然被一些杀毒软件所使用。
第二种,是动态脱壳。由于加壳的程序运行时必须还原成原始形态,即加壳程序会在运行时自行脱掉“马甲”。目前,有一种脱壳方式是抓取内存中的镜像,再重构成标准的执行文件。相比硬脱壳方法,这种脱壳方法对自行加密、变形的壳处理效果更好。