某试用版so保护函数虚拟化和函数加密分析
函数虚拟化
函数虚拟化保护和函数混淆保护整体思路差不多,将函数划分为若干个基本块。之前每一个基本块的代码是替换为等效花指令混淆,虚拟化的话就是将原有指令进行翻译,用自定义虚拟机去解释执行。
每次进入虚拟机执行前先保存寄存器环境
从虚拟机出来的时候还原寄存器环境
函数虚拟化比函数混淆的指令膨胀程度和复杂度要高很多,用unicorn
模拟执行一个函数混淆时的一条执行路径,一共会执行大约1926
条指令。
用unicorn
模拟执行相同函数虚拟化后的同一条执行路径,一共会执行大约7w
多条指令。
经过虚拟化的函数也只能通过在plt
表下段或者unicorn
模拟执行去分析其大致功能,很难进行手动还原。
函数加密SMC
函数SMC加密就是将函数进行加密,
然后再so执行.init.proc
函数的时候在进行还原。
dump下来加密后的函数就可以进行还原了。