# Tips and Tricks

* EDRs love scanning RWX memory, so use: RW -> RX&#x20;
* Try to use apis closer to the kernel so that products have less telemetry over your apis and you have more api mixups to use. Examples are:&#x20;

```
CreateRemoteThread
RtlCreateUserThread
QueueUserAPC: ResumeThread or NtResumeThread or NtAlertResumeThread
NtQueueApcThread: ResumeThread or NtResumeThread or NtAlertResumeThread
```

* Avoid calling functions against common parameters. For example, you can do something like this:&#x20;
  * **address = VirtualAlloc(1000)**
  * **virtualprotect(addr+50)**
  * **memcpy(address+100)**
  * **createthread(address + 200)**
* Try include obscure flags in OpenProcess calls
* Try to duplicate existing handles on the machine instead of creating new ones with NtQuerySystemInformation
* Inject from noisy contexts like from SYSTEM or csrss.exe&#x20;
* Encrypt/change your permissions of your payload and modules if not in use
