If a software uses end-to-end encryption and the encryption key of a client never leaves the device, isn't it still relatively "simple" to get the encryption keys of clients?
A hacker just would need to hack the software company that provides the software with end-to-end encryption and modify it so that it sends the encryption keys of clients to a given server.
It would take quite a while until people notice this since users don't check every day what data is sent where and it is quite hard to figure out that it's their encryption key that is sent.
I couldn't find a way to prevent hackers to distribute compromised software to steal the user's encryption key.
Edit: The hacker could also compromise the server and distribute its public key instead of forwarding the client's public key and thus can encrypt all messages that way.
Seems impossible to even initiate a secure connection between two parties, without both of them already sharing a secret.