Debugger detection

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 / Exemple :


'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

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.