最近我发现了Using UPX as a Security Packer 一文。这里对UPX打了补丁,解压后,也恢复了一些被覆盖的字节。这样,如果有人解压缩二进制文件upx -d以对其进行分析,将获得一个非工作二进制文件。另一种防止静态分析的解决方案是加密部分代码并在运行时使用mprotectfrom C对其进行解密。
所以实际上这两种方法都可以用来加密代码,唯一的区别是,第一种情况是修改elf入口点,存根恢复原始代码,第二种情况是从原始入口点开始执行。后一种方法似乎更简单。如果我想保护我的二进制文件不被反汇编,与第一种方法相比,第二种方法有什么缺点吗?我认为如果没有反调试技巧,两种方法都可以以相同的方式反转,并且当解密完成时,内存可以被转储。