Erstmal brauchst du einen Hook zum drawen.
Kann die Grafikschnittstelle sein(DirectX, OpenGL etc.), dafür kannst du dann aber einfach das SDK von DX benutzen, da hast du dann alle funcs zum drawen.
Musst halt nur vorher das Direct3D Device grabben und ne member function vom d3d9/10/11 vtable hooken(present, endscene, beginscene).
PS: direkte direct3d hooks sind meistens detected in f2p games oder moderneren games. Man kann auch die return addr vom call von ner render func loggen und dann den Funktionspointer changen, ist aber eig. auch detected(ohne weiteres..

).
Dann gibts es noch engine hooking.
Da hookt man einfach die render functions des games, z.b. in crossfire
member von iltclient wie flipscreen. ist momentan undetected, wenn du es schlau machst. also den vtable nicht direkt hooken sondern "umwege" gehst also pointer changest die auf pointer zeigen, die auf den call zeigen(beispiel).
Bei Engine hooking musst du außerdem die functions reversen, heißt gucken welche parameter gebraucht werden und du brauchst natürlich die font base und das render device des games.
Nachdem du erst mal einen drawing hook hast, brauchst du die 3d world vektoren der spieler. Die sind meistens in den Iteration classes, also meistens einfach in der player base. Für einen 2d box esp hättest du jetzt schon alles. Du iterierst dann einfach alle player durch mit ner for schleife oder so, musst du auch reversen. gibt aber genug infos in foren. Nun ja du brauchst jetzt nur noch ne funktion, die die 3d world koordinaten in 2d screen koordinaten konvertiert. Das ist jetzt hier nicht so schnell zu erklären, aber du kannst ja mal nach worldtoscreen/w2s suchen. Da findet sich bestimmt was

. Wenn du das alles geschafft hast brauchst du nur noch über dein Device oder deine engine functions eine box zu drawen pDevice->Clear.
Hoffe ich konnte dir eine kleine Übersicht über ESPs verschaffen

.
btw. aimbots sind eig. noch einfacher, du brauchst keinen hook. änder einfach yaw & pitch deines spielers(meistens in der player class oder kamera klasses) und schieß entweder mit ner api oder nem keyboard hook.
Also grob zusammengefasst brauchst du;
- Kenntnisse in der linearen Algebra
- Kenntnisse von Projektionen
- C++ Basiswissen (pointer etc.)
- reverse engineering kenntnisse(stack, heap, local variables, data structures)
Und schau dir mal das an:
Der typ hat echte gut erklärte tutorials über das ganze: