AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Feststellen, ob das eigene Programm debugged wird
Thema durchsuchen
Ansicht
Themen-Optionen

Feststellen, ob das eigene Programm debugged wird

Ein Thema von musicman56 · begonnen am 7. Jan 2013 · letzter Beitrag vom 7. Jan 2013
Antwort Antwort
musicman56
(Gast)

n/a Beiträge
 
#1

Feststellen, ob das eigene Programm debugged wird

  Alt 7. Jan 2013, 13:59
Hallo,

als Kopierschutz hab ich in meinen Apps nur eine Lizenzdatei in einer verschlüsselten Datenbank gespeichert, und da kommt ein Hacker ja relativ einfach an den Speck aus dem die Träume sind ran. Schon seit vielen Jahren verwende ich AsPack (www.aspack.com) um meine Apps vor debugging zu schützen. Dummerweise sorgt die Heuristik in AVG, Kaspersky, Symantec & Co in Form von Fehlalarmen immer wieder für Ärger mit AsPack. Darum mein Ansinnen, einen Debug-Schutz manuell einzubauen. Leider fehlt mir hierfür das KnowHow. Hat jemand sowas schon mal gemacht? Oder einen Tipp, wo man sowas bekommt? Ich möchte entweder den Programmstart verhindern, oder das laufende Programm beenden, wenn ein Debugger läuft.
  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
 
#2

AW: Feststellen, ob das eigene Programm debugged wird

  Alt 7. Jan 2013, 14:03
Hallo,

Schau mal hier: IsDebuggerPresent
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
musicman56
(Gast)

n/a Beiträge
 
#3

AW: Feststellen, ob das eigene Programm debugged wird

  Alt 7. Jan 2013, 16:09
Hallo,

vielen Dank für den Tipp!!! Das scheint ja genau das zu sein, was ich suche. Werde es gleich ausprobieren
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: Feststellen, ob das eigene Programm debugged wird

  Alt 7. Jan 2013, 18:25
Es ist ne schlechte Idee, es selber umzusetzen. Falls das Projekt es Wert ist, auf professionelle Lösunge zugreifen!

Der Cracker (bitte sag nicht Hacker) kann diese IsDebuggerPresent() Funktion locker umgehen, indem er die calls zuerst ausfindig macht und sich zurechtpatcht.
Das Ausfindig machen in diesem Fall ist sehr einfach, denn all die importierten Funktionen aus Dlls werden in der Exe -genauer in der Importtabelle- vermerkt.
Man würde sofort erkennen, dass ein Programm vlt. versucht, sich zu schützen, wenn man in der Importtabelle diese Funktion findet.

Ein Tick besser ist es, diese Routine selber zu implementieren.
MSDN rät dazu, die Funktion IsDebuggerPresent() & Co zu verwenden, sodass es später zu keinen Kompatibilitätsproblemen kommt, falls die mal
an der PEB - Struktur (Process Environment Block: enthält Daten zum Prozess) etwas ändern.

So sähe die Implementierung aus:
Delphi-Quellcode:
function isBeingDebugged: Boolean;
asm
  mov eax, [FS:$30]
  movzx eax, [eax+2]
end;
Oder du verschleierst den Import - einfach dynamisch laden, wobei dann bei GetProcAddress einen String übergeben musst, der hardcodiert in der Exe ist. Dieser sollte verschlüsselt sein, sonst kann man das wieder ausfindig machen.

Wie du siehst, ist es nicht so einfach. Es gibt sehr viele Wege, die ans Ziel (Knacken) führen.
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#5

AW: Feststellen, ob das eigene Programm debugged wird

  Alt 7. Jan 2013, 18:26
Achtung: Die Abfrage eines solchen Flags ist etwas gänzlich anderes als das was Anti-Cracking-Produkte tun.

Im Zweifelsfall patcht der böse Cracker den Funktionsaufruf einfach weg. Würde mich nicht wundern, wenn einige Debugger solche Funktionen automatisch hooken und einfach das falsche Ergebnis zurückliefern.
Wenn nicht, ist so ein Aufruf auch relativ auffällig und weist dem Cracker vielleicht den Weg zu den sensiblen Codestellen.

Zu einem ähnlichem Thema hatte ich vor kurzem zwei Links und ein paar Schlüsselwörter für die Suche in der DP genannt.


Wenn du es "einfach" willst, kannst du dir ja auch noch andere Komplettlösungen angucken.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
musicman56
(Gast)

n/a Beiträge
 
#6

AW: Feststellen, ob das eigene Programm debugged wird

  Alt 7. Jan 2013, 22:33
Hallo zusammen,

erst mal vielen Dank für die Beiträge. Dass "IsDebuggerPresent" relativ einfach zu umgehen ist, hab ich mir fast schon gedacht. Das Problem ist einfach, dass man wissen muss wie ein Cracker (ohne "H", ich hab's gelernt) vorgeht. Wenn man seine Arbeitsweise und Werkzeuge kennt, weiß man, wo man ansetzen muss. Soviel ist klar.

Aber, wenn man dieses Know-How nicht hat, muss man auf professionelle Lösungen zurück greifen. Genau das hab ich ja getan. Es war wohl das falsche Pferd, und darum jetzt die eingangs beschriebenen Probleme. Seit über 3 Monaten telefoniere/maile ich mit AVG & Co rum und komme nicht weiter. Der Hersteller selber unternimmt offensichtlich auch nichts. Da ist mir ein löchriger Schutz dann doch lieber als der Verdacht des Kunden, Viren zu verschleudern.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Feststellen, ob das eigene Programm debugged wird

  Alt 7. Jan 2013, 23:10
Genau das hab ich ja getan. Es war wohl das falsche Pferd, und darum jetzt die eingangs beschriebenen Probleme. Seit über 3 Monaten telefoniere/maile ich mit AVG & Co rum und komme nicht weiter. Der Hersteller selber unternimmt offensichtlich auch nichts. Da ist mir ein löchriger Schutz dann doch lieber als der Verdacht des Kunden, Viren zu verschleudern.
Der Frage ist ob der Hersteller des Schutzes überhaupt Chancen hat das Problem zu lösen. Es ist hier vor allem die Heuristik der Virenscanner die fehl Schlägt. Hatten schon den Fall das eine 10 Jahre alte DLL wochenlang von einem "führenden" Virenscanner-Hersteller als Virenverseucht angesehen wurde (War von CA neben 2 weiteren Falschalarmen und dem Versagen bei den 2 gemailten Viren u.a. der Grund wieso wir kein CA mehr einsetzen). Evtl. hast du Glück und eine digitale Signatur sorgt dafür das die Heuristik nicht mehr zuschlägt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 12:37 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