Si quisiera acceder y modificar el código de una aplicación informática, ¿sería posible?

¿Cuánto tiempo tienes?

En general, ninguna aplicación de computadora es “inquebrantable” para alguien con suficiente habilidad y tiempo. Sin embargo, hay varias trampas:

  1. En algunos países (como EE. UU.) Al profundizar en el código fuente, es posible que esté infringiendo la ley. En otras regiones, tal vez un poco más cuerdas como la UE, tiene el derecho legal de corregir el código roto.
  2. La mayoría del código de computadora moderno es tan barroco e ineficiente, que probablemente sería una locura sentarse y alterar el código a menos que tuviera una lista completa de fuentes y documentación. No es imposible, es increíblemente difícil. A diferencia de hace 30 años, ahora hay notablemente pocos codificadores competentes que puedan sentarse con una lista de lenguaje ensamblador y piratear el código. Para empeorar las cosas, el código es quizás tres órdenes de magnitud más complejo de lo que era entonces. Y el código anti-piratería / ofuscación sigue siendo común.
  3. Incluso si tiene la fuente, es probable que tenga dificultades para arreglar muchas cosas. Los errores son a menudo sutiles, especialmente los que usted introduce, y la documentación probablemente será escasa e inútil. Es posible que necesite tener una comprensión completa de varios idiomas para detectar y corregir el error.

Anécdota personal. Justo antes de 2000, mi suegro, que dirigía un negocio de muebles, se dio cuenta de que tenía un paquete de contabilidad de código cerrado, vital para su negocio, que no podía ser reemplazado sumariamente, y que en las pruebas fallaría una vez que la fecha llegara a 2000. Usando solo lenguaje ensamblador, pasé varios días hackeándolo para que funcionara (lo hizo). Sin embargo, no es una experiencia que quisiera repetir.

Estos pensamientos invitan a varios otros … ¿Por qué quieres alterar el código? Si es para obtener ganancias, es probable que esté perdiendo el tiempo (a menos que ya tenga una experiencia extrema, en cuyo caso supongo que no habría hecho la pregunta 🙂 Si es para arreglar algo que lo está volviendo loco, ¿por qué no preguntar a la persona que ¿escribió el código? Si es una aplicación heredada y el autor no se puede identificar o está muerto, es probable que deba reemplazarlo si es posible (de lo contrario, contratar a un pirata informático). Si es por puro placer personal, aprenda cómo codificar, aprenda cómo la máquina de bajo nivel funciona, y hack feliz.

Mi 2c, Jo.

Las herramientas que uso para esto son el Pin de Intel para la modificación dinámica del código, dyninst para la reescritura binaria y el depurador gdb. Si solo necesita atrapar y alterar las llamadas de la biblioteca, LD_PRELOAD puede ser todo lo que necesita.

Tenga en cuenta que tanto Pin como dyninst son las mejores herramientas de investigación de su clase, no guiones para niños de guiones. Ambos le brindarán un control extraordinariamente detallado sobre las instrucciones y los datos, pero no le dirán qué significan las instrucciones y los datos.

En caso de necesidad, puede usar Valgrind en lugar de Pin, pero es un orden de magnitud más difícil de aprender.

Si la aplicación es de código abierto, entonces sí, es posible modificar el comportamiento de la aplicación tanto como tenga tiempo y dinero para invertir en hacerlo. Una línea de código es como un clavo en una casa, así que no esperes que sea fácil.

Si la aplicación es de código cerrado, aún puede obtener acceso al código fuente a través de acuerdos con el proveedor. Es posible cambiar el comportamiento de la aplicación modificando las bibliotecas de las que depende. A través de un proceso llamado “compilación inversa”, incluso puede crear código fuente para aplicaciones. El resultado puede ser peor que volver a escribir la aplicación de la manera que desee.

Las personas que no tienen mucha experiencia en programación hacen preguntas como estas. Es casi el mismo tipo de idea que modificar un edificio, pero más difícil. Claro, tienes planes y, por supuesto, puedes modificar cualquier edificio. No será tan fácil como clavarse unas uñas nuevas y alejarse. Debe comprender la construcción del edificio y tener un equipo de profesionales para obtener un buen resultado. Esto es especialmente cierto para aplicaciones comerciales grandes y complejas. Y en el software, puede hacer cambios aparentemente simples que pueden dar lugar a errores inminentes más adelante.

La modificación del software de código abierto es el equivalente de software de la renovación del hogar. Si comprende la diferencia entre el detalle superficial y la alteración estructural, puede poner una nueva cara en una monstruosidad.

Si está escrito en un lenguaje interpretado como PERL, sí, simplemente modifique el código fuente. Dejaré que alguien responda por JAVA ya que creo que no es tan simple. En el caso de un lenguaje compilado como C, a menos que tenga acceso a la fuente, las bibliotecas y un compilador compatible, no. Puede tomar el código objeto y desarmarlo y presumiblemente hacer algunos hacks simples, pero cualquier cosa más que eso y sería más fácil recodificar desde cero.

  • Si la aplicación no es de código abierto … entonces la respuesta es no. O … puede ser posible comprar esos derechos, pero esto sería muy costoso (probablemente al menos un orden de magnitud más costoso que el software en sí. Es probable que haya una gran cantidad de condiciones adicionales (por ejemplo, la fuente no puede ser expuesta) a cualquier otra persona, no se puede revender, etc., etc.) Esta ruta generalmente solo es intentada por grandes corporaciones y entidades gubernamentales.
  • Si es de código abierto, entonces se le da acceso a la fuente. Si obtiene la aplicación de un tercero, se le exige que proporcione acceso (o un enlace). Sin embargo, eso no es todo. Tienes que examinar la licencia de la aplicación. Esa licencia puede
  • Le permite hacer lo que quiera con la fuente (modificar, distribuir, incluso revender la aplicación modificada).
  • Puede o no requerir que realice todas las modificaciones (el trabajo depurado) de código abierto.
  • Puede o no requerir que envíe todas las modificaciones al autor.
  • Es posible que no le permita usar / modificar la aplicación y / o su fuente en un contexto comercial (posiblemente incluyendo el uso interno dentro de una empresa) mientras lo permite para uso personal.
  • Puede haber una multitud de otras condiciones … así que volvamos a lo que comencé … lea la licencia, generalmente están en un lenguaje directo.