I'd imagine that you need to create one class that derives from Autodesk.Max.Plugins.IGUP and implement/override at least the Start() and Stop() functions.
Then you'd need to create another class that derives from Autodesk.Max.Plugins.ClassDesc2 and override its methods (just like any other plugin). Return a new instance of GUP plugin in Create(...) function.
This is off the top of my head so could not be entirely accurate.
Marsel Khadiyev (Software Developer, EPHERE Inc.)