Unveiling metamorphism by abstract interpretation of code properties