En este artículo, nos presentaremos como desarrolladores de software con licencia y consideraremos formas de proteger nuestro programa de piratas informáticos.
Introducción
Examinaremos métodos para proteger el software escrito en un lenguaje compilado de la ingeniería inversa, la piratería y la introducción de malware de terceros. La información proporcionada es relevante porque uno de los objetivos de cualquier proyecto propietario es licenciar y controlar la distribución de este software. Casi todos los programas que requieren una licencia están sujetos a intentos de piratería y muchos de ellos tienen contrapartes pirateadas en este momento. En lo que sigue, por simplicidad, llamaremos crackeado al programa crackeado y crackeado al proceso de craqueo.
En este artículo, nos presentaremos como un desarrollador de software con licencia en C ++ y analizaremos qué métodos de protección deben usarse para complicar el proceso de descifrar nuestro programa. Debe entenderse que cualquier programa puede terminar siendo pirateado y no hay protección absoluta, el objetivo es hacer que la ingeniería inversa sea lo más difícil y el tiempo requerido para piratear el programa es mayor que el tiempo entre actualizaciones de nuestro software ficticio.
Información general
La piratería de software es un problema importante para los desarrolladores. Para proteger el software de la distribución ilegal, una licencia no es suficiente; es necesario proteger el programa de la ingeniería inversa. Hay cientos de formas de proteger un programa, pero todas también tienen su propia solución. Supongamos que queremos escribir un programa propietario en C ++ compilado para el sistema operativo Windows, lo licenciamos y venderemos copias. Consideremos cómo debemos actuar para que la única forma de obtener nuestro software sea comprándole la licencia al desarrollador.
++ , . : . , . . , , , .
, , , , . , , , , , . (. reverse engineering). ++ , – . , , - , . .
. , :·
()
, (. . , ). – , .
, , , .
, . – . , , . .
, . , , , .
. . , - .
, , . DR7 – debug control register, , . , , DR0 – DR3. , .
– windows, . , DbgUiRemoteBreakin(), , , . , - . , . .
– , , . , , - . , , , , .
– . windows API , , . , :
IsDebuggerPresent() –
CheckRemoteDebuggerPresent() –
NtQueryInformationProcess() –
RtlQueryProcessHeapInformation() –
RtlQueryProcessDebugInformation() –
NtQuerySystemInformation() –
.
. - -, , . . . — , , , . , , .
. . – . , , , , . . , - . , . .
, .
. , , . . VMProtect Themida. : . . , . , – , .
En este artículo, analizamos cómo proteger el software de los piratas. El uso de todos estos métodos de protección ha aumentado considerablemente el tiempo y los recursos necesarios para descifrar nuestro programa. No existe un método de protección absoluto, se puede evitar cualquier protección. En este caso, el objetivo principal de nuestra protección es asegurarnos de que lleva más tiempo descifrar el programa que lanzar una actualización. En este caso, el programa puede considerarse bien protegido.