Este libro está dirigido tanto a los profesionales como a aquellos principiantes interesados en el campo de la protección de software. La obra introduce al lector en los fundamentos del cracking y del anticracking y en algunas de las técnicas más avanzadas, y su contenido representa una gran compilación de información de casi todas las áreas que comprende esta materia: desde las descripciones de sencillos algoritmos de protección hasta la programación de codificadores PE propios. Si bien es esencial un conocimiento básico de la programación en ensamblador, no resulta imprescindible ya que todo el código mostrado forma parte de otro código realizado con lenguajes de mayor nivel. De este modo, resultará accesible incluso para quienes no sepan nada de ensamblador. Incluye un apéndice de referencia donde se describen los mandatos en ensamblador más comunes.
Con este libro, el lector conocerá:
-Las técnicas actuales de protección y sus vulnerabilidades.
-Los puntos débiles de las protecciones actuales.
-Los programas y herramientas empleadas por los crackers.
-Cómo depurar y defenderse de la depuración de un programa.
-Cómo desensamblar y defenderse contra el desensamblaje de un programa.
-Cómo usar y defenderse de los programas FrogsICE y ProcDump.
-La edición del código del programa.
-El formato de fichero PE y los compresores-codificadores PE como soluciones más actualizadas frente a la piratería.
-El cracking como mejor método de prueba de las protecciones.
-Información complementaria sobre el cracking.
Se adjunta un CD-ROM que contiene todo el código de los programas incluidos en el libro y un completo paquete de software para crackers y anticrackers: codificadores-compresores PE y sus correspondientes descodificadores-descompresores (ProcDump y otros), volcadores, generadores de parches, cargadores, editores y escáneres PE, calculadoras de desplazamientos, desensambladores, depuradores, programas para ocultar los depuradores (como FrogsICE) y muchos otros programas y herramientas. También contiene materiales "crackme" para que el lector ponga en práctica los conocimientos adquiridos.
CAPÍTULO 1. MÉTODOS DE PROTECCIÓN Y SUS PUNTOS DÉBILES CIFRADO
PROGRAMAS INCOMPLETOS
CLASIFICACIÓN BÁSICA DE LOS TIPOS DE PROTECCIÓN DISPONIBLES
Duración limitada
Otras restricciones numéricas
Número de registro
REGISTRO INTERACTIVO
Fichero clave
Programas limitados
Protección hardware
Comprobación de la presencia del CD
Compresores y codificadores PE
Protección contra la copia del CD
Deterioro físico del CD
Ficheros de tamaño falso
CDs sobredimensionados
TOC ("Table of Contents") ilegal
Ficheros agrupados
Errores ficticios de software y otras manipulaciones en el proceso de fabricación de los CDs
Protecciones comerciales
SafeDisc
SecuROM
ProtectCD
Armadillo Software Protection System
ASProtect
VBox
Programas en Visual Basic
Comparación de cadenas de caracteres
Comparación variable (tipo de datos variable)
Comparación variable (tipo de datos largo)
Conversión del tipo de datos
Transferencia de datos
Operaciones matemáticas
Miscelánea
Otras vulnerabilidades de las protecciones actuales
CAPÍTULO 2. PROTECCIÓN CONTRA LOS PROGRAMAS DE DEPURACIÓN
DEPURADORES MÁS HABITUALES
SoftICE
USO ELEMENTAL DE SOFTICE
Configuración del programa
Mandatos, funciones y controles básicos
Windows
Gestión de los puntos de corte
GESTIÓN ESTRUCTURADA DE EXCEPCIONES (SEH)
Descripción y uso de la gestión estructurada de excepciones
SEH en desarrollo
Algoritmos comunes
Algoritmos basados en la función API CreateFileA
La interfaz BoundsChecker y el uso de INIT3
Empleo de INT1
Empleo de INT 68h
Búsqueda en el registro de Windows
Búsqueda en autoexec.bat
PUNTOS DE CORTE
Puntos de corte para software
Puntos de corte en una interrupción (BPINT)
Puntos de corte en una ejecución (BPX)
Puntos de corte en un área de memoria (BPR)
Puntos de corte hardware
Descripción de un programa de ejemplo empleado para detectar puntos de corte hardware
MÉTODOS AVANZADOS
Privilegios de los anillos
Maneras de saltar entre el anillo 3 y el anillo 0
Detección de SoftICE mediante VxDCall
Desactivación de la tecla de atención de SoftICE
OTROS USOS SENCILLOS DE SEH
CAPÍTULO 3. PROTECCIÓN CONTRA LOS DESENSAMBLADORES
DESENSAMBLADORES HABITUALES
USO ELEMENTAL DE W32DASM
ALGORITMOS COMUNES
Protección contra las cadenas
Protección contra las funciones importadas
CÓDIGO AUTOMODIFICABLE (SMC)
SMC pasivo
SMC activo
EDICIÓN DEL CÓDIGO DEL PROGRAMA EN TIEMPO DE EJECUCIÓN
CAPÍTULO 4. PROTECCIÓN CONTRA FROGSICE
USO ELEMENTAL DE FROGSICE
Opciones básicas
Opciones avanzadas
ALGORITMOS COMUNES
VxDCall de la función VMM_GetDDBList
Uso de la función CreateFileA
CAPÍTULO 5 PROTECCIÓN CONTRA PROCDUMP
USO ELEMENTAL DE PROCDUMP
DEFINICIÓN Y OBJETIVO DEL VOLCADO DE MEMORIA
ALGORITMOS COMUNES
CAPÍTULO 6. EDICIÓN DEL CÓDIGO DEL PROGRAMA
MÉTODOS PARA EDITAR EL CÓDIGO DEL PROGRAMA
USO ELEMENTAL DE HIEW
Edición de un programa para detectar SoftICE
ALGORITMOS COMUNES
Comprobación de la integridad de los datos
Comprobación de la integridad de los datos de un fichero
Comprobación de la integridad de los datos en memoria
Otros métodos
CAPÍTULO 7. EL FORMATO PE Y SUS HERRAMIENTAS
DESCRIPCIÓN DEL FORMATO DE FICHERO PE
DESCRIPCIÓN Y FUNCIONAMIENTO DEL COMPRESOR-CODIFICADOR PE
Creación de un codificador o compresor PE
Desventajas de los compresores-codificadores PE
Algunos compresores-codificadores PE
ASPack
CodeSafe
NeoLite
NFO
PE-Compact
PE-Crypt
PE-Shield
PETITE
Shrinker
UPX
WWPack32
FORMATO DE FICHERO PE
Comprobación del formato PE
Cabecera PE
Tabla de secciones
Direcciones virtuales, materiales y virtuales relativas (RVA)
Tabla de importaciones
Tabla de exportaciones
CONFIGURACIÓN DE UN CODIFICADOR PE
Inclusión de una sección nueva en un fichero
Redirección de los datos
Inclusión de código en una sección nueva
Bifurcaciones y variables
Funciones importadas
Creación de una tabla de importaciones
Proceso de una tabla de importaciones original
Uso de una función importada
PROCESO TLS
CODIFICACIÓN
Elección del algoritmo de codificación
Algoritmos de codificación comunes
Violación del código
Áreas codificadas y no codificadas
Ejemplo de una codificación sencilla con un codificador PE
DISEÑO FINAL DE UN CODIFICADOR PE
PROTECCIONES ALTERNATIVAS
Cargador de símbolos AntiSoftICE
Comprobación del punto de entrada al programa
RSA
Ejemplo de aplicación con RSA
CONCLUSIÓN SOBRE EL FORMATO PE Y COMPRESORES-CODIFICADORES PE
CAPÍTULO 8. OTROS PROGRAMAS UTILIZADOS POR LOS CRACKERS
REGISTRY MONITOR
FILE MONITOR
R!SC'S PROCESS PATCHER
Ficheros de mandatos
THE CUSTOMISER
CAPÍTULO 9. CRACKING DE ENTRENAMIENTO
CRUEHEAD - CRACKME V1.0
CRUEHEAD - CRACKME V2.0
CRUEHEAD - CRACKME V3.0
COSH - CRACKME1
MEXELITE - CRACKME 4.0
IMMORTAL DESCENDANTS - CRACKME 8
Easy Serial
Harder Serial
Name/Serial
Matrix
KeyFile
NAG
Cripple
DUELIST - CRACKME #5
Descodificación manual de un fichero
Modificaciones efectuadas directamente en memoria
TC - CRACKME 9
Obtención manual del número de serie
Conversión del programa en un generador de claves
TC - CRACKME 10
TC - CRACKME 13
TC - CRACKME 20
ZEMOZ - MATRIX CRACKME307
ZEMOZ CRCME
Edición hexadecimal del programa
Utilización del cargador
CAPÍTULO 10. INFORMACIÓN COMPLEMENTARIA SOBRE EL CRACKING
ORIGEN Y DIFUSIÓN
CRACKERS
CRACKERS Y GRUPOS CONOCIDOS
+HCU
Immortal Descendants
Messing in Bytes MiB
Crackers in Action CIA
Phrozen Crew
United Cracking Force
DEViANCE
TC - CRACKME 13
TC - CRACKME 20
ZEMOZ - MATRIX CRACKME
ZEMOZ CRCME
Edición hexadecimal del programa
Utilización del cargador
CAPÍTULO 10. INFORMACIÓN COMPLEMENTARIA SOBRE EL CRACKING
ORIGEN Y DIFUSIÓN
CRACKERS
CRACKERS Y GRUPOS CONOCIDOS
+HCU
Immortal Descendants
Messing in Bytes MiB
Crackers in Action CIA
Phrozen Crew
United Cracking Force
DEViANCE
Ebola Virus Crew
Evidence
Da Breaker Crew
RECURSOS EN INTERNET
Cracking e ingeniería inversa
Programación
Herramientas
Referencias
Grupos de cracking
CONSEJOS BÁSICOS DE LOS CRACKERS
Cracking (Lucifer48)
Aplicación de instrucciones NOP (+ORC)
Parchear (MisterE)
Pensar como un cracker (rudeboy)
Herramientas (rudeboy)
CAPÍTULO 11. SECCIÓN DE REFERENCIA
INSTRUCCIONES BÁSICAS EN ENSAMBLADOR
MENSAJES DE WINDOWS
ACCESO AL REGISTRO DE WINDOWS
RESUMEN DE FUNCIONES DE SOFTICE
Definición de puntos de corte
Manejo de los puntos de corte
Modificar y mostrar memoria
Obtención de información sobre el sistema
Mandatos para los puertos de entrada y salida (I/O)
Mandatos para controlar el flujo
Modo de control
Mandatos de personalización
Utilidades
Uso de las teclas del editor de líneas
Uso de las teclas de desplazamiento
Mandatos de ventana
Control de ventana
Mandatos sobre símbolos y fuente