Código difícil


La codificación dura (también codificación dura o codificación dura ) 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 volviendo a compilar el ejecutable, aunque se pueden cambiar en la memoria o en el disco usando un depurador o un editor hexadecimal . Los datos que están codificados son mejores para piezas de información que no cambian, como constantes físicas , números de versióny elementos de texto estáticos. Los datos codificados , por otro lado, codifican información arbitraria a través de la entrada del usuario , archivos de texto , archivos INI , respuestas del servidor HTTP, archivos de configuración, macros de preprocesador, constantes externas, bases de datos, argumentos de línea de comandos y se determinan en tiempo de ejecución.

La codificación rígida requiere que el código fuente del programa se cambie cada vez que cambien los datos de entrada o el formato deseado, cuando podría ser más conveniente para el usuario final cambiar los detalles por algún medio fuera del programa. [1]

A menudo se requiere una codificación dura, pero también se puede considerar un antipatrón . [2] Es posible que los programadores no tengan una solución de interfaz de usuario dinámica para el usuario final, pero aun así deben entregar la función o lanzar el programa. Esto suele ser temporal pero resuelve, en un sentido de corto plazo, la presión para entregar el código. Más tarde, se realiza una codificación suave para permitir que un usuario transmita parámetros que le brinden al usuario final una forma de modificar los resultados o el resultado.

El término "codificado" se usó inicialmente como una analogía de los circuitos de cableado, y estaba destinado a transmitir la inflexibilidad que resulta de su uso dentro del diseño y la implementación del 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 suave, que desarrolla los scripts de alto nivel que se obtienen. 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, más que a la incorporación específica de datos de salida.

Codificar las 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 desactivar 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 verificación (como firmas digitales, antimanipulación y antitrampas)) para evitar el acceso inesperado, pero tales acciones a menudo están prohibidas por un acuerdo de licencia de usuario final .

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 es inviable crear un keygen.