最近,我发现了使用UPX作为安全打包程序的文章。在这里,对UPX进行了修补,在解压缩之后,还可以还原一些被覆盖的字节。这样,如果有人用upx -d解压缩二进制文件以对其进行分析,将获得无效的二进制文件。
防止静态分析的另一种解决方案是对一部分代码进行加密,并在运行时使用C语言中的mprotect对其进行解密。 。

所以实际上两种方法都可以用来加密代码,唯一的区别是,在第一种情况下,修改了elf入口点,而存根还原了原始代码,在第二种情况下,从原始入口点开始执行。后一种方法似乎更简单。如果我想保护我的二进制文件免于拆卸,那么第二种方法与第一种方法相比有什么缺点吗?我认为,如果没有反调试技巧,两种方法都可以以相同的方式反转,并且在解密完成后可以转储内存。

#1 楼


如果我想保护我的二进制文件免于拆卸,那么第二种方法与第一种方法相比有什么缺点吗?


第二种方法要求您具有访问源代码¹,而如果您拥有的只是二进制文件,则可以应用第一种方法。

但是,在使用这两种方法中的一种(或两种)之前,请记住,它们都是通过动态逆向工程可以克服这些困难。

¹实际上并不需要源代码,但是如果您没有源代码,则相对于第二种方法,要应用第一种方法要痛苦得多代码。