Just an idea:
1. Mirror the whole client on a server. Let the client dont do updates like most do (check version -> version lower then update), do full scan for every file with md5 hash. If file on mirror has the same hash, its ok. If not, download File. So it cannot be manipulated before your "launcher".
2. Let a process run in background, which checks the md5 of each file while running. If a file is not the same, kick player from server (or whatever). So it cant be manipulated after Launcher.
3. if process running in background is stopped (by taskmanager or whatever) client closes. So the background process cant be manipulated.
4. let the launcher download a keyfile. Client cant run without the actual keyfile which changes every X hours. If client is connected and the keyfile is missing, client closes. (maybe some timestamp thingy as key like linuxtime or something with some tricks like base64 encoded and md5 hashed after so noone can find a fast way to do his own keyfile writer. Up to you

).
5. let background process send something every X minutes to be sure its running from the IP the client connected. No message, kick client.
This are just some ideas to give you an idea how it could be protected (sure its all crackable but this takes a while). This is btw the simple way most of the unwanted programs like hackshield or Gameguard work. (they do much mor for sure but thats the bare minimum).