C/C++ Virtual Machine

Die antispy C/C++ Virtual Machine implementiert einen einfachen aber sehr mächtigen Interpreter um mathematische Operationen zu verschleiern. Die Abstraktion der virtuellen Maschine macht die statische und dynamische Analyse von Funktionen sehr schwer.

Implementierung

Die Implementierung einer virtuellen Maschine erfolgt in zwei Schritten. Der auszuführende Code wird in die Virtuelle Maschine geladen und anschließend ausgeführt.

Register


Register sind im Namespace antispy::vm_register definiert. Es gibt 14 sogenannte Register die zur freien Verfügung stehen. Darüber hinaus gibt es zwei spezialisierte Register.

return Register

Das ::anti_spy::vm_register::return_register wird zum Speichern von Ergebnissen verwendet.

from_code Register

Das ::anti_spy::vm_register::from_code Register ist ein spezielles Register um Variablen aus der virtuellen Maschine zu lesen ohne diese vorher auf den Stack zu pushen.

Stack


Unsere virtuelle Maschine implementiert einen Stack. Dieser unterscheidet sich nicht von dem Stack anderer Architekturen und Plattformen. Er wird benutzt um Daten für lange Operationen zu speichern und Daten zu manipulieren.

Operationen


In unserem Instruction Set unterscheiden wir zwischen verschiedene Arten von Operationen.

nullary Operations

unary Operations

binary Operations

ternary Operations

  • Dokumentation folgt.