![]() |
Luckies "myIsDebuggerPresent" liefert immer true
Hallo,
ich möchte mich ein bissl mit AntiCracking beschäftigen. Habe jetzt Luckies "AntiCracking"-Artikel gelesen und - weil ich keine Ahnung von ASM habe - voerst einfach per Copy&Paste ins Projekt eingefügt. Beim Programmstart lasse ich mir das Ergebnis anzeigen und erhalte aber immer true - auch außerhalb von der IDE. Was mache ich falsch?
Delphi-Quellcode:
Ich habe sogar Delphi geschlossen und ich bekomme trotzdem "ja" angezeigt. Vielleicht könnt ihr mir helfen!
function MyIsDebuggerPresent: Boolean; assembler;
var BeingDebugged: Boolean; begin asm push eax; push ebx; mov eax, fs:[$18]; mov ebx, [eax+$30]; mov eax, [ebx+2]; mov [BeingDebugged], al; pop ebx; pop eax; // Wichtig! POP immer in umgekehrter Reihenfolge von PUSH end; end; procedure TForm1.FormCreate(Sender: TObject); var ... begin ... if (myIsDebuggerPresent) then ShowMessage('Ja'); ... end; Danke im Voraus |
Re: Luckies "myIsDebuggerPresent" liefert immer tr
Hi,
liefert AX nicht den Rückgabewert einer boolschen Funktion ? Dann ist push eax - pop eax kontraproduktiv und restauriert eax anstatt das Ergebnis zu liefern. Vielleicht fehlt da noch ne Zeile, die IsBeingDebugged in AX lädt? Gruss |
Re: Luckies "myIsDebuggerPresent" liefert immer tr
Ehm...okay...
ich kann echt KEIN asm... garkein bissl... Könntest du mir unter die Arme greigen? Das wäre nett... :zwinker: |
Re: Luckies "myIsDebuggerPresent" liefert immer tr
Delphi-Quellcode:
function MyIsDebuggerPresent: Boolean; assembler;
var BeingDebugged: Boolean; begin asm // push eax; push ebx; mov eax, fs:[$18]; mov ebx, [eax+$30]; mov eax, [ebx+2]; mov [BeingDebugged], al; pop ebx; // pop eax; // Wichtig! POP immer in umgekehrter Reihenfolge von PUSH end; end; procedure TForm1.FormCreate(Sender: TObject); var ... begin ... if (myIsDebuggerPresent) then ShowMessage('Ja'); ... end; |
Re: Luckies "myIsDebuggerPresent" liefert immer tr
Hallo,
danke - aber ich erhalte auf die Weise das gleiche Verhalten |
Re: Luckies "myIsDebuggerPresent" liefert immer tr
POP EAX würde das Result (welches ja in EAX liegt) überschreiben.
Delphi-Quellcode:
function MyIsDebuggerPresent: Boolean;
var BeingDebugged: Boolean; begin asm push eax push ebx mov eax, fs:[$18] mov ebx, [eax+$30] mov eax, [ebx+2] mov [BeingDebugged], al pop ebx pop eax end; Result := BeingDebugged; end;
Delphi-Quellcode:
function MyIsDebuggerPresent: Boolean; assembler;
asm push ebx mov eax, fs:[$18] mov ebx, [eax+$30] mov eax, [ebx+2] pop ebx end;
Delphi-Quellcode:
function MyIsDebuggerPresent: Boolean; assembler;
asm mov eax, fs:[$18] mov edx, [eax+$30] mov eax, [edx+2] end; function MyIsDebuggerPresent: Boolean; assembler; asm mov eax, fs:[$18] mov eax, [eax+$30] mov eax, [eax+2] end; |
Re: Luckies "myIsDebuggerPresent" liefert immer tr
Hi.
Das mit dem "Result" hat funktioniert. Er liefert jetzt die richtigen Ergebnisse. Aber warum hast du noch drei verschiedene Codeblöcke eingebaut? Kannst du dazu noch was sagen? |
Re: Luckies "myIsDebuggerPresent" liefert immer tr
die 3 anderen Code-Blöcke sind im Grunde nur Alternativen zu der ersten Funktion. Sie liefern alle exakt das gleiche Ergebnis, nur wird das Ergebnis immer etwas verschieden berechnet.
In der 1. Alternative wird das Ergebnis in ebx berechnet und dann nach eax verschoben und ebx aus dem Stack entfernt. In der 2. Alternative wird das Ergebnis in edx berechnet und dann nach eax verschoben. In der 3. Alternative wird das Ergebnis gleich in eax berechnet. Bernhard |
Re: Luckies "myIsDebuggerPresent" liefert immer tr
Ah okay.
Vielen Dank. Ist irgendeine Methode zu bevorzugen, oder ist es im Grunde egal? |
Re: Luckies "myIsDebuggerPresent" liefert immer tr
kommt ganz darauf an, wie du das machen willst. Wenn es etwas unsichtbarer sein sollte, würde ich keine Funktion benutzen, sondern das ganze in der Aufruf-Prozedur machen. Ansonsten sind die 4 gleichwertig.
Bernhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz