Protéger les logiciels de l'ingénierie inverse

Dans cet article, nous nous présenterons en tant que développeur de logiciels sous licence et examinerons les moyens de protéger notre programme contre le piratage par des pirates.





introduction

Nous examinerons les méthodes de protection des logiciels écrits dans un langage compilé contre l'ingénierie inverse, le piratage et l'introduction de logiciels malveillants tiers. Les informations fournies sont pertinentes car l'un des objectifs de tout projet propriétaire est d'obtenir une licence et de contrÎler la distribution de ce logiciel. Presque tous les programmes nécessitant une licence sont soumis à des tentatives de piratage et nombre d'entre eux ont des homologues piratés à l'heure actuelle. Dans ce qui suit, pour simplifier, nous appellerons le programme cracké - cracké, et le processus de cracking - crack.





Dans cet article, nous nous prĂ©senterons en tant que dĂ©veloppeur de logiciels sous licence en C ++ et analyserons les mĂ©thodes de protection Ă  utiliser pour compliquer le processus de craquage de notre programme. Il faut comprendre que tout programme peut finir par ĂȘtre piratĂ©, et il n'y a pas de protection absolue, le but est de rendre l'ingĂ©nierie inverse la plus difficile et le temps nĂ©cessaire pour pirater le programme est plus long que le temps entre les mises Ă  jour de notre logiciel fictif.





informations générales

Le piratage de logiciels est un problÚme majeur pour les développeurs. Pour protéger le logiciel contre toute distribution illégale, une licence ne suffit pas, il est nécessaire de protéger le programme contre l'ingénierie inverse. Il existe des centaines de façons de protéger un programme, mais elles ont toutes leur propre solution de contournement. Supposons que nous voulions écrire un programme propriétaire en C ++ compilé pour le systÚme d'exploitation Windows, nous le délivrons sous licence et en vendrons des copies. Voyons comment nous devons agir pour que la seule façon d'obtenir notre logiciel soit d'acheter sa licence auprÚs du développeur.





++ , . : . , . . , , , .





, , , , . , , , , , . (. reverse engineering). ++ , – . , , - , . .





. , :·      













  • ()









, (. . , ). –   , .





, , , .





, . – . , , . .





, . , , , .









. . , - .





, , . DR7 – debug control register, , . , , DR0 – DR3. , .





– windows, . , DbgUiRemoteBreakin(), , , . , - . , . .





– , , . , , - . , , , , .





– . windows API , , . , :





  • IsDebuggerPresent() –





  • CheckRemoteDebuggerPresent() –





  • NtQueryInformationProcess() –





  • RtlQueryProcessHeapInformation() –





  • RtlQueryProcessDebugInformation() –





  • NtQuerySystemInformation() –





.









. - -, , . . . — , , , . , , .





. . – . , , , , . . , - . , . .





, .





. , , . . VMProtect Themida. : . . , . , – , .





Dans cet article, nous avons examinĂ© comment protĂ©ger les logiciels des pirates. L'utilisation de toutes ces mĂ©thodes de protection a considĂ©rablement augmentĂ© le temps et les ressources nĂ©cessaires pour dĂ©chiffrer notre programme. Il n'y a pas de mĂ©thode de protection absolue, toute protection peut ĂȘtre contournĂ©e. Dans ce cas, l'objectif principal de notre protection est de s'assurer qu'il faut plus de temps pour casser le programme que pour publier une mise Ă  jour. Dans ce cas, le programme peut ĂȘtre considĂ©rĂ© comme bien protĂ©gĂ©.












All Articles