Going to address other parts later.
Anti-disassembly, Anti-debugging and Anti-VM are properties of sophisticated malware and other programs.
(I am not saying this is perfect, unbreakable.)
Quote Sign in - Google Accounts
The purpose of anti-debugging is to hinder the process of reverse engineering. There could be several general approaches: (1) to detect the existence of a debugger, and behave differently when a debugger is attached to the current process; (2) to disrupt or crash a debugger. Approach (1) is the mostly frequently applied (see an excellent survey in [2]). Approach (2) is rare (it targets and attacks a debugger - and we will see several examples in Max++ later). Today, we concentrate on Approach (1).

Anti-disassembly, anti-debugging and anti-VM | Infosec
Malware takes advantage of a disassembler’s basic assumptions. It exploits predictable choices made by debuggers and hides when it suspects it is running on
Many web search results for:
anti-debugging