自修改代码

逆向工程 反调试
2021-07-09 09:55:13

最近我发现了Using UPX as a Security Packer 一文这里对UPX打了补丁,解压后,也恢复了一些被覆盖的字节。这样,如果有人解压缩二进制文件upx -d以对其进行分析,将获得一个非工作二进制文件。另一种防止静态分析的解决方案是加密部分代码并在运行时使用mprotectfrom C对其进行解密

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

1个回答

如果我想保护我的二进制文件不被反汇编,与第一种方法相比,第二种方法有什么缺点吗?

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

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

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