La codificación rígida (también codificación rígida o codificación rígida ) es la práctica de desarrollo de software de incrustar datos directamente en el código fuente de un programa u otro objeto ejecutable, en lugar de obtener los datos de fuentes externas o generarlos en tiempo de ejecución . Los datos codificados normalmente solo se pueden modificar editando el código fuente y recompilando el ejecutable, aunque se puede cambiar en la memoria o en el disco usando un depurador o un editor hexadecimal . Los datos codificados normalmente representan piezas de información que no cambian, como constantes físicas , números de versióny elementos de texto estático. Datos Softcoded , por el contrario, codificar la información arbitraria a través de la entrada del usuario , archivos de texto , archivos INI , HTTP respuestas del servidor, los archivos de configuración, macros del preprocesador, las constantes externos, bases de datos, argumentos de línea de comando, y se determinan en tiempo de ejecución.
Descripción general
La codificación rígida requiere que se cambie el código fuente del programa cada vez que cambien los datos de entrada o el formato deseado, cuando podría ser más conveniente para el usuario final cambiar el detalle por algún medio fuera del programa. [1]
A menudo se requiere una codificación rígida, pero también se puede considerar un anti-patrón . [2] Es posible que los programadores no cuenten con una solución de interfaz de usuario dinámica para el usuario final, pero aún deben entregar la función o lanzar el programa. Esto suele ser temporal, pero resuelve, en un sentido a corto plazo, la presión para entregar el código. Posteriormente, la codificación se realiza para permitir que un usuario pase parámetros que le dan al usuario final una forma de modificar los resultados o el resultado.
El término "codificado" se usó inicialmente como una analogía a los circuitos de cableado, y estaba destinado a transmitir la inflexibilidad que resulta de su uso en el diseño e implementación de software. En el contexto de los entornos de desarrollo colaborativo extensible en tiempo de ejecución , como los MUD , la codificación rígida también se refiere al desarrollo del motor central del sistema responsable de las tareas de bajo nivel y la ejecución de scripts , a diferencia de la codificación por software que está desarrollando los scripts de alto nivel interpretado por el sistema en tiempo de ejecución , con valores de fuentes externas, como archivos de texto , archivos INI , macros de preprocesador , constantes externas, bases de datos , argumentos de línea de comandos, respuestas del servidor HTTP , archivos de configuración y entrada del usuario . En este caso, el término no es peyorativo y se refiere al desarrollo general, en lugar de incorporar específicamente datos de salida.
Codificación y puertas traseras
La codificación de credenciales es una forma popular de crear una puerta trasera . Las credenciales codificadas por lo general no son visibles en los archivos de configuración o en la salida de los comandos de enumeración de cuentas y los usuarios no pueden cambiarlas ni omitirlas fácilmente. Si se descubre, un usuario podría deshabilitar dicha puerta trasera modificando y reconstruyendo el programa a partir de su código fuente ( si la fuente está disponible públicamente ), descompilando o aplicando ingeniería inversa al software , editando directamente el código binario del programa o instituyendo una integridad. cheque (como firmas digitales, anti-manipulación y anti-trampa ) para evitar el acceso inesperado, pero tales acciones a menudo están prohibidas por un EULA .
Codificación y DRM
Como medida de gestión de derechos digitales , los desarrolladores de software pueden codificar un número de serie único directamente en un programa. O es común codificar una clave pública , creando el DRM para el cual no es factible crear un keygen.
En el caso contrario, un cracker de software puede codificar un número de serie válido para el programa o incluso evitar que el ejecutable lo solicite al usuario, permitiendo que las copias no autorizadas sean redistribuidas sin la necesidad de ingresar un número válido, compartiendo así el mismo. clave para cada copia, si alguna ha sido codificada.
Ruta de instalación fija
Si un programa de Windows está programado para asumir que siempre está instalado en C: \ Archivos de programa \ Nombre de aplicación y alguien intenta instalarlo en una unidad diferente por motivos de espacio o de organización, es posible que no se instale o no se ejecute después de la instalación. Es posible que este problema no se identifique en el proceso de prueba, ya que el usuario medio instala en la unidad y el directorio predeterminados, y es posible que las pruebas no incluyan la opción de cambiar el directorio de instalación. Sin embargo, es recomendable que los programadores y desarrolladores no corrijan la ruta de instalación de un programa, ya que la ruta de instalación predeterminada depende del sistema operativo, la versión del sistema operativo y las decisiones del administrador del sistema . Por ejemplo, muchas instalaciones de Microsoft Windows utilizan la unidad C: como su disco duro principal , pero esto no está garantizado.
Hubo un problema similar con los microprocesadores en las primeras computadoras, que comenzaron la ejecución en una dirección fija en la memoria.
Disco de inicio
Algunos programas " protegidos contra copia " buscan un archivo en particular en un disquete o unidad flash al iniciar para verificar que no sean copias no autorizadas. Si la computadora se reemplaza por una máquina más nueva, que no tiene una unidad de disquete, el programa que la requiere ahora no se puede ejecutar, ya que no se puede insertar el disquete.
Este último ejemplo muestra por qué la codificación rígida puede resultar impráctica incluso cuando parece en ese momento que funcionaría por completo. En las décadas de 1980 y 1990, la gran mayoría de las PC estaban equipadas con al menos una unidad de disquete, pero las unidades de disquete dejaron de utilizarse más tarde. Un programa codificado de esa manera hace 15 años podría enfrentar problemas si no se actualiza.
Carpetas especiales
Algunos sistemas operativos de Windows tienen las denominadas carpetas especiales, que organizan los archivos de forma lógica en el disco duro. Pueden surgir problemas relacionados con la codificación rígida:
Ruta del perfil
Algunos programas de Windows codifican la ruta del perfil en ubicaciones definidas por el desarrollador, como . Esta es la ruta para la gran mayoría de Windows 2000 o superior, pero esto causaría un error si el perfil se almacena en una red o se reubica. La forma correcta de obtenerlo es llamar a la función o resolver la variable de entorno. Otra suposición que los desarrolladores suelen hacer es asumir que el perfil está ubicado en un disco duro local.C:\Documents and Settings\Username
GetUserProfileDirectory
%userprofile%
Ruta de la carpeta Mis documentos
Algunos programas de Windows codifican la ruta My Documents
como ProfilePath\My Documents
. Estos programas funcionarían en máquinas que ejecutan la versión en inglés, pero en las versiones localizadas de Windows, esta carpeta normalmente tiene un nombre diferente. Por ejemplo, en las versiones italianas, la My Documents
carpeta se llama Documenti . My Documents
también puede haber sido reubicado usando la redirección de carpetas en la directiva de grupo en Windows 2000 o superior. La forma correcta de obtenerlo es llamar a la SHGetFolderPath
función.
Solución
Una referencia indirecta, como una variable dentro del programa llamada "FileName", podría expandirse accediendo a una ventana de diálogo "buscar archivo", y el código del programa no tendría que cambiarse si el archivo se moviera.
La codificación rígida es especialmente problemática al preparar el software para su traducción a otros idiomas.
En muchos casos, un único valor codificado de forma rígida, como el tamaño de una matriz, puede aparecer varias veces en el código fuente de un programa. Este sería un número mágico . Esto comúnmente puede causar un error en el programa si se modifican algunas de las apariencias del valor, pero no todas. Un error de este tipo es difícil de encontrar y puede permanecer en el programa durante mucho tiempo. Puede ocurrir un problema similar si se usa el mismo valor codificado para más de un valor de parámetro, por ejemplo, una matriz de 6 elementos y una longitud mínima de cadena de entrada de 6. Un programador puede cambiar por error todas las instancias del valor (a menudo usando un función de búsqueda y reemplazo del editor) sin verificar el código para ver cómo se usa cada instancia. Ambas situaciones se evitan definiendo constantes , que asocian nombres con los valores, y utilizando los nombres de las constantes para cada aparición dentro del código.
Un caso importante de codificación rígida es cuando las cadenas se colocan directamente en el archivo, lo que obliga a los traductores a editar el código fuente para traducir un programa. (Existe una herramienta llamada gettext
que permite dejar cadenas en archivos, pero permite que los traductores las traduzcan sin cambiar el código fuente; efectivamente descodifica las cadenas).
Codificación dura en competiciones
En competencias de computación como la Olimpiada Internacional de Informática , los concursantes deben escribir un programa con un patrón de entrada-salida específico de acuerdo con los requisitos de las preguntas.
En casos excepcionales en los que el número posible de entradas es lo suficientemente pequeño, un concursante podría considerar usar un enfoque que asigne todas las entradas posibles a sus salidas correctas. Este programa se consideraría una solución codificada de forma rígida en lugar de una algorítmica (aunque el programa codificado de forma rígida podría ser la salida de un programa algorítmico).
Ver también
- Firmware
- Software de código cerrado
- Código auto modificable
Referencias
- ^ Elfriede Dustin (2002). Pruebas de software efectivas: 50 formas específicas de mejorar sus pruebas . Addison-Wesley Professional. págs. 188–. ISBN 978-0-201-79429-8.
- ^ Tanya Janca (14 de octubre de 2020). Alice y Bob aprenden la seguridad de las aplicaciones . Wiley. págs. 15–. ISBN 978-1-119-68740-5.