How would one take an addresses and balances "snapshot" of all 6,086,374 normal addresses at block number 4293752?
I think the OP means complete to the currently accepted last node that was mined a little while ago.
Of course we would likely want to limit this to wallet addresses or account addresses. I don't see how we can know that...still looking.
Getting the balances is easy, there's an api web3.eth.getBalance. You can specify from which block do you want the balance.
The hard part is collecting the addresses. If you do not want to use an external api like etherscan then you have to build a database processing all transactions in the blockchain registering sender and receiver.
You will still be missing accounts created by "internal transactions". For that you have to use low level trace apis from geth/parity.