hadez
13.10.2000, 12:37
Also ich habe mir mal den Source vom CIH Virus angesehn, nachdem ich mit meinem ASM Buch durch bin. Da sind mir aber ein paar Anweisungen aufgefallen, die ich in der Form noch nicht gesehen habe:
1)
lea ecx, StopToRunVirusCode-@0[ebx]
StopToRunVirusCode und @0 sind Labels, und ebx, naja, das weiß wohl jeder.
2)
; *************************************
; * Generate Exception to Get Ring0 *
; *************************************
int HookExceptionNumber ; GenerateException
ReturnAddressOfEndException = $
Nun zum 1.Fall:
lea schreibt ja normalerweise den offset der adresse des 2.operanden in den 1.
Aber aus dem 2. Operanden werde ich nicht schlau. Kann mir mal wer erklären, was der 2. Operand genau bewirkt?
2.Fall:
Hier ist eigentlich nur die 2.Zeile
(ReturnAddressOfEndException = $)
wichtig. Die erste Zeile habe ich hinzugefügt, da vielleicht ein Zusammenhang zwischen den beiden besteht?!
Was bewirkt die Anweisung in der 2.Zeile? ReturnAddressOfEndException wurde im ganzen Text nirgends als Variable deklariert. Einer Variable würde man ja sowieso nur per mov einen Wert zuweisen können. Also ist ReturnAddressOfEndException wohl sowas wie eine EQU-Zuweisung, oder? Die Zeile könnte man wohl auch mit
ReturnAddressOfEndException EQU $
vergleichen oder? Aber was genau bewirkt jetzt diese Zuweisung? Wird der "Name" ReturnAddressOfEndException jetzt wirklich mit $ gleichgestellt? ReturnAddressOfEndException wird im ganzen Programm nur 2mal verwendet. Einmal in der Zeile von oben und ein zweites mal hier:
add dword ptr [esp], ReadyRestoreSE-ReturnAddressOfEndException
Wenn man die Zeile jetzt so umschreiben würde:
add dword ptr [esp], ReadyRestoreSE-$
würde das ja keine sinn ergeben, oder? kann mir mal wer die Funktion des $ erklären?
Nun ja, eine Fragte habe ich doch noch: Hier werden an ein paar stellen interrupts ausgelöst. aber ich dachte doch, dass man im protected mode keine interrupts benutzen kann. geht es etwa doch?
1)
lea ecx, StopToRunVirusCode-@0[ebx]
StopToRunVirusCode und @0 sind Labels, und ebx, naja, das weiß wohl jeder.
2)
; *************************************
; * Generate Exception to Get Ring0 *
; *************************************
int HookExceptionNumber ; GenerateException
ReturnAddressOfEndException = $
Nun zum 1.Fall:
lea schreibt ja normalerweise den offset der adresse des 2.operanden in den 1.
Aber aus dem 2. Operanden werde ich nicht schlau. Kann mir mal wer erklären, was der 2. Operand genau bewirkt?
2.Fall:
Hier ist eigentlich nur die 2.Zeile
(ReturnAddressOfEndException = $)
wichtig. Die erste Zeile habe ich hinzugefügt, da vielleicht ein Zusammenhang zwischen den beiden besteht?!
Was bewirkt die Anweisung in der 2.Zeile? ReturnAddressOfEndException wurde im ganzen Text nirgends als Variable deklariert. Einer Variable würde man ja sowieso nur per mov einen Wert zuweisen können. Also ist ReturnAddressOfEndException wohl sowas wie eine EQU-Zuweisung, oder? Die Zeile könnte man wohl auch mit
ReturnAddressOfEndException EQU $
vergleichen oder? Aber was genau bewirkt jetzt diese Zuweisung? Wird der "Name" ReturnAddressOfEndException jetzt wirklich mit $ gleichgestellt? ReturnAddressOfEndException wird im ganzen Programm nur 2mal verwendet. Einmal in der Zeile von oben und ein zweites mal hier:
add dword ptr [esp], ReadyRestoreSE-ReturnAddressOfEndException
Wenn man die Zeile jetzt so umschreiben würde:
add dword ptr [esp], ReadyRestoreSE-$
würde das ja keine sinn ergeben, oder? kann mir mal wer die Funktion des $ erklären?
Nun ja, eine Fragte habe ich doch noch: Hier werden an ein paar stellen interrupts ausgelöst. aber ich dachte doch, dass man im protected mode keine interrupts benutzen kann. geht es etwa doch?