Mal eine kleine Frage : was ist der berühmte Deltacall?
Nunja, wenn man ein Codestück in eine andere Executable injiziert (und zwar ohne DLLs

), hat man das Problem, dass man jedesmal andere Adressen hat und erstmal gar nicht weiß, wo man sich genau in der Executable befindet. Das wäre auch nicht schlimm - viele Operationen (JMP,CALL) Funktionieren mit relativen Adressierungen - aber es gibt auch Operationen (i.R sollten es Datenzugriffe sein) die eine "feste" Adresse haben wollen. Möchte man also in seinem Code auch Variablen nutzen, behilft man sich mit einem Trick:
wie "jeder"

weiß wird bei einem Call die Rücksprungsadresse auf den Stack abgelgt.
Jetzt könnte man ja sowas machen - sie ablegen lassen und auslesen:
call delta
delta:
pop ebx
damit hat man nachher in ebx seine aktuelle Adresse
call delta ist nix anderes als call $+5 Dollazeichen bedeutet in den meisen Assemblern aktuelle Postition - ein call ist 5 Bytes lang und "Roh" sieht das so aus:
E8 00 00 00 00 (Springe 0 Bytes weiter)
hier ein Beispiel:
Code:
inj_start:
pushad
jmp @f
stolen_bytes db(5) dup(0) <- Buffer
@@:
call delta
delta:
pop ebp
mov esi,ebp
sub esi, (delta-stolen_bytes) <- eine menschenfreundliche adressierungsweise
mov edi,[esp+32] ;an esp+32 liegt die Rücksprungsadresse (wegen pushad)
sub edi,5 ;wenn man diese um 5 verringert, bekommt man die eigene
mov ecx,5 Aufrufadresse
rep movs byte ptr [esi],byte ptr [edi] ;und die wird mit originaldaten überschrieben
mov eax, [esp+32] ; hier wird die Rücksprungsadresse manipuliert
sub eax,5 ; so dass man nachher wieder an der Stelle landet, wo
mov [esp+32],eax ; vorher der Hook-Call stand
MOV EAX,DWORD PTR SS:[ESP+60h] ;das ist der eigentliche Patch
SUB EAX,3298h
mov byte ptr [eax],0c3h
popad
retn
allerdings wird es hier noch nicht wirklich genutzt - bei größeren Codes steigt aber die nutzung auch drastisch an, weil einem recht schnell die Register ausgehen

(Der Code ist an sich ein einmaliger "Patch-Hook" der nach dem aufruf eine bestimmte Adresse patcht und dann den Hook entfernt (stellt originalcode wieder her) und den originalcode ausführt.
das ganze kann man auch variiert betreiben:
call delta
delta: mov eax,[esp]
dürfte genauso klappen und wird auch öfters angewendet, zusammen viel mit Junkcode (einem Müllcode, der nichts bewirkt, außer den Call zu verschleiern) - weil AV-Scanner solche Bytefolgen wohl sehr interessant finden würden.
Um jetzt zurück auf die Frage zu kommen: Delta heißt es wohl weil "Delta" für Differenz steht - und "berühmt" weil dieser Trick in den meisten Tutorials und Webseiten als Delta-Call genannt wird

.