Hiding in the Particles: When Return-Oriented Programming Meets Program Obfuscation