Skip to main content

程序保护后运行问题汇总

1.加壳勾选“虚拟机检测”,在真实pc机上无法运行?

答:由于Vmware Tools一般是只安装到虚拟机里的,所以虚拟机检测会检测这个选项,物理机里有它就会检测成虚拟机里;打开注册表找到HKEY_LOCAL_MACHINE\SOFTWARE\VMware, Inc.\VMware Tools,将其删掉即可。

2.如果选择了“未保护”而未选择“压缩”,那这个函数的确完全没有保护?

如果选择压缩,则整个文件包括所有函数都被保护了,但未对函数做针对性保护。原因是加密选项里面的设置是针对整个文件的,非单个函数的。

压缩是一种对程序的整体保护方案,在首次调用时会将代码和数据解密还原(但不还原文件结构信息)。

3.文件加壳后大小变化?

加壳后的大小 = 壳代码大小 + 基础文件大小 + 混淆虚拟化函数大小

4.加密后如何查看原来的配置?

如果保留了.ssp文件 可以看到如何配置的,将ssp文件与待加密文件放到同一个目录,然后将待加密文件拖进加壳工具就可以看见文件加密上如何设置的加密选项等细节.

5.运行加密后的软件出现闪退的问题如何处理?

建议先排查加密选项部分,将加密选项勾选项全部取消确认下是否还有问题,如果问题消失则可以挨个选项去掉勾选后排查是具体哪个选项不适配导致的,并将此问题反馈给对接人。

6.PE的程序如何判断是否是加密过的呢?

如下图,标识位置是固定的。

native-3

7.用第三方工具无法检测出程序加密过,是什么原因?

我们的工具会把加壳的标识去掉,所以第三方无法检测出来,如果想要查看加密后的效果建议用工具,例如IDA.

8.Linux系统上使用objcopy -g命令后,程序会较原程序文件大小少?

答:这个命令可能是去除了一些静态符号,类似于strip 命令可以去掉一些 Section 的信息;加壳后也会自动去掉一些 Section 信息,但为了使原程序仍具体“可链接”的功能,会自动将动态符号表中的信息加到静态符号表中;

9.加壳会对程序的section信息做改变么?

答:我们加壳会对section部分做处理的,会加上我们的信息,.text代码段我们会修改并进行检查;我们会对不驻留内存的 section 会删掉,使用命令readelf -S demo.so可以查看节属性,不带 A(Alloc)属性的,都会删掉。

10.c++程序,加壳后的程序hook createfile能防么?

答:不能,不是壳的功能。

11.程序保护后运行,崩溃的堆栈是否能正常解析,堆栈信息是否会乱码?

答:代码加密不会有影响,可以解析;代码混淆和虚拟化不一定(若崩溃的代码正好被混淆或虚拟化了,就无法分析了)

12.elf的HIDEN符号是否隐藏?

答:加壳后的程序勾选“移除调试信息”后会隐藏HIDEN符号(local符号是默认给去掉的)

查看符号命令:readelf --dyn-sym demo查看HIDEN符号命令:readelf -s demo.vp | grep HID