AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Luckies "myIsDebuggerPresent" liefert immer true
Thema durchsuchen
Ansicht
Themen-Optionen

Luckies "myIsDebuggerPresent" liefert immer true

Ein Thema von TheMiller · begonnen am 6. Apr 2010 · letzter Beitrag vom 9. Apr 2010
Antwort Antwort
Seite 2 von 4     12 34      
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.088 Beiträge
 
Delphi 12 Athens
 
#11

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 13:17
Mehrere Verschiedene verbauen, am Bestens noch direkt im Code und nicht immer nur die selbe Funktion aufrufen.

So ist es schwerer diese Funktion zu entdecken und auszuschalten.

Wenn alle nur die selbe Funktion nutzen würden, dann könnte man einfach ein Programm schreiben, was die entsprechenden Bytecodes sucht und löscht.
Also praktisch wirkungslos.

PS: Diese Funktion gibt es auch direkt als API, welche man abfragen kann:
http://msdn.microsoft.com/en-us/library/ms680345.aspx
(aber als Anti-Cracking ist es nicht geeignet)

PSS: Rate mal wo Luckie "seine" Funktion her hat?
Hier im Forum suchenIsDebuggerPresent ... in den Threads stehen dann auch noch interessante Sachen.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#12

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 13:26
Danke euch allen und dir himitsu.

Den Thread habe ich schon gelesen^^

Ich werde die anderen Codes auch einbauen. Auf die Idee wäre ich nicht gekommen. Habe auch Luckie schon Bescheid gesagt, dass er in seinem Artikel das Result vergessen hat. Vielleicht nimmt er die 3 anderen Codes ja mit auf...?

Danke
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#13

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 13:29
Könnte man das asm-geraffel eigentlich irgendwie in Delphicode umschreiben?
Dann könnte man doch inline; hinten dransetzten und man hat dann den Code automatisch mehrmals fest in der Echse drin.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#14

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 13:34
Zitat von mleyen:
Könnte man das asm-geraffel eigentlich irgendwie in Delphicode umschreiben?
Dann könnte man doch inline; hinten dransetzten und man hat dann den Code automatisch mehrmals fest in der Echse drin.
Nein das geht nicht. Du musst diesen Wert hier auslesen:

mov eax, fs:[$18] Also fs:[$18]. Das funktioniert mit Delphi nicht, weil man mit normalen Pointern keinen Zugriff auf das fs-Segment hat.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von mleyen
mleyen

Registriert seit: 10. Aug 2007
609 Beiträge
 
FreePascal / Lazarus
 
#15

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 14:00
Hmmm, schade, d.h. es gibt für mich immer noch nichts verständliches / modifizierbares.

Hier noch einmal ein paar Alternativen die ich mir einmal notiert und getestet habe:
Die meisten Funktionen scheinen relativ gleich zu sein. Soweit ich weiß, sind alle Codes von brechi

Delphi-Quellcode:
function IsDebuggerPresent1: Boolean; stdcall;
asm
  MOV EAX, DWORD PTR FS:[$30]
  TEST EAX, EAX
  JS @@W9X
@@WNT:
  MOV ECX, FS:[$18]
  MOV ECX, DWORD PTR [ECX+$30]
  XOR EAX, EAX
  MOV AL, BYTE PTR [ECX+2]
  RET
@@W9X:
  MOV EAX, DWORD PTR [$BFFC9CE4]
  MOV ECX, DWORD PTR [EAX]
  CMP DWORD PTR DWORD PTR [ECX+$54], 1
  SBB EAX, EAX
  INC EAX
  RET
end;

function isDebuggerPresent2: Boolean; stdcall;
asm
  MOV EAX, DWORD PTR FS:[$30]
  TEST EAX, EAX
  JS @@W9X
@@WNT:
  MOV EAX, FS:[$18]
  MOV EAX, [EAX+$30]
  MOVZX EAX, [EAX+2]
  RET
@@W9X:
  MOV EAX, [$BFFC9CE4]
  MOV ECX, [EAX]
  CMP DWORD PTR [ECX+$54], 1
  SBB EAX, EAX
  INC EAX
  RET
end;

function IsDebuggerPresent3: Boolean; stdcall;
asm
  MOV EAX, FS:[$18]
  MOV EAX, [EAX+$30]
  //MOVZX EAX, [EAX+2]
  DB $0F, $B6, $40, $02
end;

function isDebuggerPresent4: Boolean; stdcall;
asm
  MOV EAX, FS:[030H]
  TEST EAX, EAX
  JS @@W9X
@@WNT:
  MOV EAX, FS:[$18]
  MOV EAX, [EAX+$30]
  MOVZX EAX, [EAX+2]
  RET
@@W9X:
  MOV EAX, [$BFFC9CE4]
  MOV ECX, [EAX]
  CMP [ECX+$54], 00000001
  SBB EAX, EAX
  INC EAX
  RET
end;

{*----------------------------------------------------------------------------------------
Mehrere isDbbgrPresents zusammengefasst, in der Hoffnung das es mehr bringt ;-O
----------------------------------------------------------------------------------------*}

function isDebuggerPresent: Boolean; inline;
begin
  Result := IsDebuggerPresent1 or IsDebuggerPresent2 or IsDebuggerPresent3 or IsDebuggerPresent4;
end;
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#16

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 18:21
Dumme Frage eines ASM-Legasthenikers:
Delphi-Quellcode:
function IsDebuggerPresent3: Boolean; stdcall;
asm
  MOV EAX, FS:[$18]
  MOV EAX, [EAX+$30]
  //MOVZX EAX, [EAX+2]
  DB $0F, $B6, $40, $02
end;
DB $0F, $B6, $40, $02
ist das nicht das gleiche wie MOVZX EAX [EAX+2] ?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#17

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 18:23
Nein, der Code ist ursprünglich von Oliver.

@DJ-SPM: Wenn du schon nur kopierst, dann bitte auch richtig. Dein Code:
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;
Mein Code:
Delphi-Quellcode:
function MyIsDebuggerPresent: Boolean; assembler;
asm
  mov eax, fs:[$18];
  mov eax, [eax+$30];
  movzx eax, byte ptr [eax+2];
end;
Du hast da alles durcheinander geworfen, was man durcheinander werfen kann. Bei dir wird das Ergebnis in der Variablen BeingDebugged abgelegt. Da sie aber lokal ist, ist deren Inhalt nach Verlassen der Funktion ungültig.

Die globale Variable BeingDebvuggt wird nur benötigt, wenn man den ASM-Code nicht in eine Funktion packt, sondern "nackt" in den Code kopiert, damit man keine verdächtigen Funktionsaufrufe hat.

Also lese den Artikel noch mal sorgfältig.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.088 Beiträge
 
Delphi 12 Athens
 
#18

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 18:44
Zitat von Luckie:
Nein, der Code ist ursprünglich von Oliver.
Und er hatte es damals in der DP rumgepostet

Zitat:
DB $0F, $B6, $40, $02
ist das nicht das gleiche wie MOVZX EAX [EAX+2] ?
Jupp, das ist mal wieder die beliebte Falle:
Es ringt nix, wenn man etwas im Quellcode "verschlüsselt", was aber nach dem Compilieren wieder "entschlüsselt" ist.

'abc' = #97#98#99 ist genau das Selbe ... es ist zwar jeweils eine andere Quellcode-Darstellung, aber hat Beides das selbe Compilierungs-Ergebnis.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#19

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 18:50
@Luckie: Wieso habe ICH alles durcheinander geworfen? Ich hab von anfang an gesagt, dass ich kein Stück assembler beherrsche. Den Code, den ich gepostet habe, habe ich aus DEINEM Artikel von deiner Homepage (siehe hier).

Ich mach dir damit keinen Vorwurf - ich kann ASM nicht. Doch bin gewillt es zu lernen und zu verstehen. Das dauert aber länger, als die Grundlagen von ASM zu lernen - gerade im Anti-Cracking gebiet.

Ich fühle mich auch etwas angegriffen, wenn du schreibst "Wenn du schon nur kopierst und einfügst..." - ich bin lange genug hier im Forum, damit auch du wissen könntest, dass ich nicht der Typ dafür bin. Und dass ich nicht eine solche Einstellung habe, zeigt auch mein Interesse daran, anderen Leuten und dir zu helfen, indem ich dich per Kontaktformular deiner Homepage auf den "Result-Fehler" hingewiesen habe, damit du es ändern/korrigieren kannst.

Nunja... soviel dazu...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#20

Re: Luckies "myIsDebuggerPresent" liefert immer tr

  Alt 6. Apr 2010, 18:55
Du hast ihn eben nicht kopiert. Du hast das:
Delphi-Quellcode:
function MyIsDebuggerPresent: Boolean; assembler;
asm
  mov eax, fs:[$18];
  mov eax, [eax+$30];
  movzx eax, byte ptr [eax+2];
end;
mit dem
Delphi-Quellcode:
var
  BeingDebugged: Boolean;

  asm
   mov eax, fs:[$18];
   mov eax, [eax+$30];
   mov eax, [eax+2];
   mov [BeingDebugged], al
  end;
zusammen geworfen.

Und was steht über den hier geposteten zweiten Codeausschnitt?
Zitat:
Schon besser, aber es geht noch besser. Auch dieser Funktionsaufruf ist mit einem CALL verbunden, den man rauspatchen kann. Deswegen ist es besser die Funktion im Code "hardzucoden"
Das ist also keine Funktion, sondern steht so lose irgendwo im Quellcode, damit der verdächtige Funktionsaufruf wegfällt.

Zitat:
zeigt auch mein Interesse daran, anderen Leuten und dir zu helfen, indem ich dich per Kontaktformular deiner Homepage auf den "Result-Fehler" hingewiesen habe, damit du es ändern/korrigieren kannst.
Du hast mich auf einen Fehler hingewiesen, der keiner ist und nur durch das fehlerhafte Kopieren von dir zustanden gekommen ist.

Falls meine Worte etwas hart waren, bitte ich dies zu entschuldigen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 4     12 34      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz