You can also try to duplicate the VMT but modify it.
It is all possible but dangerous, and shouldn't be done run of the mill.
There will be a few problems you may run into...
As Marcov said, copy before modify. Depending on Target platform the original class may or may not be in read only memory. So you may or may not get an access violation when you try to change the pointer to a virtual method.
But even if you copy, and then modify, you will hit issue
* inherited: inherited calls are often de virtualized. So the will call the parent class directly, bypassing the VMT. Changes in the VMT wont work.
* Apps compiled with WPO => more calls can be de virtualized....
* not sure about current compiler, but future versions may be smarter, and do more de-virtualization...
* future FPC version could remove unused entries from the VMT, so make sure not to rely on them being present.
* ...