Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

DEBUGGER DETECTION


Information sur la source

Catégorie :Sécurité Niveau : Initié Date de création : 18/06/2002 Date de mise à jour : 18/06/2002 22:11:40 Vu / téléchargé: 5 078 / 209

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

Description

Il détécte si il y'a présence d'un débugger au lancement de votre programme (4 différentes méthodes)
 

Source

  • 'Les constantes
  • Const HKEY_CLASSES_ROOT = &H80000000
  • Const HKEY_CURRENT_USER = &H80000001
  • Const HKEY_LOCAL_MACHINE = &H80000002
  • Const HKEY_USERS = &H80000003
  • Const HKEY_DYN_DATA = &H80000004
  • Public Const OF_READ = &H0&
  • Public Const INVALID_HANDLE_VALUE = -1
  • Public Const GENERIC_WRITE = &H40000000
  • Public Const OPEN_EXISTING = 3
  • Public Const FILE_SHARE_READ = &H1
  • Public Const FILE_SHARE_WRITE = &H2
  • 'Les API
  • Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  • Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
  • Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long ' Note that if you declare the lpData parameter as String, you must pass it By Value.
  • Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long ' Note that if you declare the lpData parameter as String, you must pass it By Value.
  • Public Declare Function lOpen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
  • Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
  • Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
  • Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
  • Public Declare Function IsDebuggerPresent Lib "kernel32" () As Long
  • Public Enum HCle
  • HKeyLocalMachine = 0
  • HKeyCurrentUser = 1
  • HKeyClassesRoot = 2
  • HKeyUsers = 3
  • HKeyDynamicData = 4
  • End Enum
  • Private Function HKConvert(HK As HCle) As Long
  • If HK = 2 Then HKConvert = HKEY_CLASSES_ROOT
  • If HK = 1 Then HKConvert = HKEY_CURRENT_USER
  • If HK = 0 Then HKConvert = HKEY_LOCAL_MACHINE
  • If HK = 3 Then HKConvert = HKEY_USERS
  • If HK = 4 Then HKConvert = HKEY_DYN_DATA
  • End Function
  • Public Function LireValeur(HK As HCle, Chemin As String, Valeur As String) As String
  • Buff = 0
  • Buff = RegCreateKey(HKConvert(HK), Chemin, lng)
  • If Buff = 0 Then RegQueryValueEx lng, Valeur, 0&, 1, 0&, Buff
  • If Buff < 2 Then
  • LireValeur = ""
  • Exit Function
  • End If
  • LireValeur = String(Buff + 1, " ")
  • RegQueryValueEx lng, Valeur, 0&, 1, ByVal LireValeur, Buff
  • LireValeur = Left(LireValeur, Buff - 1)
  • End Function
  • Sub Main()
  • Call Debugger_Detection
  • End Sub
  • Public Sub Debugger_Detection()
  • message = "Debugger detected ! Please Diseable It before use our software"
  • titre = "Debugger detection !"
  • '1e méthode : L'API is debugger present
  • If IsDebuggerPresent <> 0 Then GoTo fin
  • '2e méthode : Cherche une clé consernant le débugger NuMega Softice
  • a = LireValeur(HKEY_LOCAL_MACHINE, "Software\NuMega\SoftICE", "InstallDir")
  • If a <> "" Then GoTo fin2
  • a = ""
  • a = LireValeur(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Uninstall\SoftICE", "UninstallString")
  • If a <> "" Then GoTo fin2
  • a = ""
  • a = LireValeur(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\App Paths\Loader32.Exe", "Path")
  • If a <> "" Then GoTo fin2
  • '3e methode : Utilisation de createfilea
  • si1 = "\\\\.\\SICE" 'Pour
  • si2 = "\\\\.\\SIWVID" 'win 9X
  • si3 = "\\\\.\\NTICE" 'NT
  • lngHandle = CreateFile(si1, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
  • If lngHandle <> INVALID_HANDLE_VALUE Then GoTo fin
  • lngHandle = CreateFile(si2, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
  • If lngHandle <> INVALID_HANDLE_VALUE Then GoTo fin
  • lngHandle = CreateFile(si3, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
  • If lngHandle <> INVALID_HANDLE_VALUE Then GoTo fin
  • '4e méthode : Utilisation de lopen
  • Pointer = lOpen(si1, OF_READ)
  • If Pointer <> INVALID_HANDLE_VALUE Then GoTo fin
  • Pointer = lOpen(si2, OF_READ)
  • If Pointer <> INVALID_HANDLE_VALUE Then GoTo fin
  • Pointer = lOpen(si3, OF_READ)
  • If Pointer <> INVALID_HANDLE_VALUE Then GoTo fin
  • Exit Sub
  • fin:
  • MsgBox message, vbCritical + vbOKOnly, titre
  • End
  • fin2:
  • MsgBox "Debugger is installed in this computer, Please uninstall it before use " & App.EXEName, vbCritical + vbOKOnly, "NuMega Softice installed !"
  • End Sub
'Les constantes
Const HKEY_CLASSES_ROOT = &H80000000
Const HKEY_CURRENT_USER = &H80000001
Const HKEY_LOCAL_MACHINE = &H80000002
Const HKEY_USERS = &H80000003
Const HKEY_DYN_DATA = &H80000004
Public Const OF_READ = &H0&
Public Const INVALID_HANDLE_VALUE = -1
Public Const GENERIC_WRITE = &H40000000
Public Const OPEN_EXISTING = 3
Public Const FILE_SHARE_READ = &H1
Public Const FILE_SHARE_WRITE = &H2
'Les API
Public Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Public Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long         ' Note that if you declare the lpData parameter as String, you must pass it By Value.
Public Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData As Long) As Long         ' Note that if you declare the lpData parameter as String, you must pass it By Value.
Public Declare Function lOpen Lib "kernel32" Alias "_lopen" (ByVal lpPathName As String, ByVal iReadWrite As Long) As Long
Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Public Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Public Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Public Declare Function IsDebuggerPresent Lib "kernel32" () As Long
Public Enum HCle
    HKeyLocalMachine = 0
    HKeyCurrentUser = 1
    HKeyClassesRoot = 2
    HKeyUsers = 3
    HKeyDynamicData = 4
End Enum

Private Function HKConvert(HK As HCle) As Long
If HK = 2 Then HKConvert = HKEY_CLASSES_ROOT
If HK = 1 Then HKConvert = HKEY_CURRENT_USER
If HK = 0 Then HKConvert = HKEY_LOCAL_MACHINE
If HK = 3 Then HKConvert = HKEY_USERS
If HK = 4 Then HKConvert = HKEY_DYN_DATA
End Function

Public Function LireValeur(HK As HCle, Chemin As String, Valeur As String) As String
Buff = 0
Buff = RegCreateKey(HKConvert(HK), Chemin, lng)
If Buff = 0 Then RegQueryValueEx lng, Valeur, 0&, 1, 0&, Buff
If Buff < 2 Then
    LireValeur = ""
    Exit Function
End If
LireValeur = String(Buff + 1, " ")
RegQueryValueEx lng, Valeur, 0&, 1, ByVal LireValeur, Buff
LireValeur = Left(LireValeur, Buff - 1)
End Function

Sub Main()
Call Debugger_Detection
End Sub


Public Sub Debugger_Detection()
message = "Debugger detected ! Please Diseable It before use our software"
titre = "Debugger detection !"
'1e méthode : L'API is debugger present
If IsDebuggerPresent <> 0 Then GoTo fin
'2e méthode : Cherche une clé consernant le débugger NuMega Softice
a = LireValeur(HKEY_LOCAL_MACHINE, "Software\NuMega\SoftICE", "InstallDir")
If a <> "" Then GoTo fin2
a = ""
a = LireValeur(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\Uninstall\SoftICE", "UninstallString")
If a <> "" Then GoTo fin2
a = ""
a = LireValeur(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion\App Paths\Loader32.Exe", "Path")
If a <> "" Then GoTo fin2
'3e methode : Utilisation de createfilea
si1 = "\\\\.\\SICE"     'Pour
si2 = "\\\\.\\SIWVID"   'win 9X
si3 = "\\\\.\\NTICE"    'NT
lngHandle = CreateFile(si1, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
If lngHandle <> INVALID_HANDLE_VALUE Then GoTo fin
lngHandle = CreateFile(si2, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
If lngHandle <> INVALID_HANDLE_VALUE Then GoTo fin
lngHandle = CreateFile(si3, GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
If lngHandle <> INVALID_HANDLE_VALUE Then GoTo fin
'4e méthode : Utilisation de lopen
Pointer = lOpen(si1, OF_READ)
If Pointer <> INVALID_HANDLE_VALUE Then GoTo fin
Pointer = lOpen(si2, OF_READ)
If Pointer <> INVALID_HANDLE_VALUE Then GoTo fin
Pointer = lOpen(si3, OF_READ)
If Pointer <> INVALID_HANDLE_VALUE Then GoTo fin
Exit Sub
fin:
MsgBox message, vbCritical + vbOKOnly, titre
End
fin2:
MsgBox "Debugger is installed in this computer, Please uninstall it before use " & App.EXEName, vbCritical + vbOKOnly, "NuMega Softice installed !"
End Sub

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Commentaires et avis

signaler à un administrateur
Commentaire de PatDeLaYaute le 19/06/2002 00:43:43

Salut,
ca a l'air d'être un bon code, mais y'a une petite chose,
en regardant vite fait le code, j'ai comme l'impression que cela ne détecte que SoftICE. Y'a pas que celui là comme debugger.
Je sais pas comment fonctionne softice, mais tu pourrait faire plus simple en faisant la liste des applis en cours et de rechercher le nom de softice cette liste.
Cela raccourcirait un peu le code. La seule chose est de connaitre le nom du debugger dans la liste des taches

@+ et bonne prog

signaler à un administrateur
Commentaire de lowan le 19/06/2002 09:28:16

Salut, bon ce n'est pas pour vous contredire mais bon. Il existe des utilitaires pour contourner les createfile, je ne citeré que frogice comme exemple. De plus il est tout aussi simple d'ouvrir ce fichier dans Numega smartcheck ou bien encore dans W32Dasm. Qui sont pour moi les meilleurs, de plus il suffit douvrir le fichier dans w32dasm trouver le saut conditionnel, ou bien tout simplement enlever le call avec un éditeur hexadécimal. Voila je te laisse. @+ enfin je tenais à te dire que cété déja pas mal davoir fait ca.

signaler à un administrateur
Commentaire de kalif le 19/06/2002 14:15:27

qq pourrait me dire vite fait comment fonctionne softice ou un ptit url qui explique ...

++

signaler à un administrateur
Commentaire de SkylandeR le 23/06/2002 21:36:31

PatDeLaYaute &gt; la plus part des débugger (je prend le cas de Softice) ont la particularité de ne PAS apparaitre dans la liste des taches parcequ'il se lance avant Windows, le système est bloquée quand on l'appelle avec Crtl-D, donc ton idée peut marcher pour d'autre débugger comme TWR mais Softice, non. Merci quand même.
Lowan &gt; Je connais très bien l'existence de Frogice, chuit un cracker! Je salue au passage le formidable travail de Frog_Print. C'est le fichier Code.txt livré avec Frogice qui explique toutes les protections que j'ai fait mon chtit prog. Mais y'a des protections que j'ai pas incluse car c'est du pur asm qui ne peut pas etre "traduit" en VB et/ou ça implique des interruptions spécifiques au dos (int3...)
kalif &gt; T'as qu'a chercher des tut de cracking et tu trouvera surrement une explication de softice, je te conseille 2 tut :
memento 2 par la shmeit corp
Acid burn tutorial 2000 par Acid_Burn

Thanks les gars pour votre aide

signaler à un administrateur
Commentaire de 24Karas le 01/11/2002 22:45:14

Pour le site de la shmeit il a changé d'adresse : www.shmeitcorp.tk
sinon sur le site de christal il y a plein d'explication : christal.suidzer0.org
       dedi : [Kheo] SC

signaler à un administrateur
Commentaire de zappy le 28/12/2002 12:22:37

suidzer0.org, c'est le site d'un pote :)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,328 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.