Copying the blockchain would still require surgical removal of the premine transactions all the way through the blockchain. So you have to do that work anyways. At which point, there's no point in a new coin, unless it's just for a "rebrand".
Anyways I see 2 methods of fixing it:
1) Allows use existing wallet.dat and db:
- a) Pick a current block N, freeze things at that block (meaning any transactions after that is technically invalid)
- b) Walk through blockchain from the beginning and trace the premine transactions all the way to current block N.
- c) Find all addresses that have coins that originated from original premine transaction.
- d) Hard code in the wallet file transaction accept code to BLOCK those addresses from allowing to send those transactions, greater than the amount of the bad "premine".
- e) Compile, Release new wallet.
- PRO: you don't have to delete your wallet.dat or db
- CON: going to be some huge IF statements in the code somewhere..
2) Allows use of existing wallet.dat (but throw away old db):
- d) Do the same as above, except deviate from step d)
- e) Derive a new list of addresses and their "real" coin amounts at block N
- f) Code in the genesis block of a new chain, a distribution of those coins from this list.
- g) Compile, Release new wallet.
- PRO: more streamlined blockchain/db
- CON: you need to force all users to delete their DB but NOT their wallet.dat (may be some confusion here).
#2 sounds like the cleanest way to restore order. I'm ready to try anything with my db and DAT files, I mean at this point I have nothing to lose.