A partir de un binario parcial, no del código fuente (faltaban las DLL de runtime),
logró averiguar el propósito del programa original y reescribirlo en Python...
sin duda es inteligencia “artificial”, para bien o para mal.
Traducción:
Después de años de decepciones con la IA, de verdad me llevé una gran sorpresa. Este no es el típico post de "la IA es increíble". Hasta hoy, yo seguía siendo escéptico.
Contexto: Como mucha gente, también probé ChatGPT y otras herramientas de IA para ayudarme a programar. ¿El resultado? De manera consistente, fue decepcionante. Era como un motor de búsqueda con esteroides que escupía código incorrecto envuelto en explicaciones seguras de sí mismas.
El desafío: Hoy vino a visitarme mi nieta de 2 años. Entonces me acordé de una app sencilla que hice en 1997 con Visual Basic 4. Pero, ¿ejecutar un archivo de hace 27 años? ¿Sin DLL antiguas ni capas de compatibilidad? Sí, claro.
El intento desesperado: Por curiosidad, subí el archivo EXE real a Claude 3.7 y le hice una pregunta simple: "¿Podrías decirme cómo ejecutar este archivo? Parece que fue hecho en Visual Basic 4. Sería bueno convertirlo a Python".
Lo que esperaba: una respuesta genérica del tipo "es un archivo viejo, hay riesgos de seguridad, bla bla bla..."
Lo que realmente pasó: Claude 3.7 empezó con las advertencias que esperaba, pero después la cosa se puso interesante. De alguna manera analizó el binario e identificó componentes concretos:
- "Form1"
- "cntTimer"
- "btnExit"
- ¡Incluso detectó un archivo de sonido embebido!
Luego hizo algo que ninguna otra IA había logrado: escribió una conversión completa a Python usando Pygame:
- Replicó la funcionalidad a la perfección.
- Incluyó instrucciones claras de instalación.
- De verdad funcionó a la primera
Tiempo total: menos de 5 minutos. Sin exagerar.
Cuando le pedí ajustes como asignar un sonido a la barra espaciadora y agregar fuentes coloridas, me dio de inmediato una actualización de código perfecta.
Fue la primera vez desde que empecé a usar IA que de verdad me impresionó. No era solo un truco para llamar la atención, sino una solución práctica que me ahorró trabajo real.
Al final, le dije a Claude que me había impresionado y le envié un torpe resumen de por qué me parecía genial... y luego reescribió el post de Reddit. De hecho, suena "casi" normal. (Esta parte la escribí yo).
<5 horas después, el mismo día> actualización
Publiqué una actualización/resumen sobre este post (escrito por mí). No estoy seguro de si esta es la forma correcta de hacerlo, pero al menos una persona en internet dijo que sí, así que debe ser verdad.
https://www.reddit.com/r/ClaudeAI/comments/1iz1i61/update_i_uploaded_a_27yearold_exe_file_to_claude/
<Actualización - 11 horas después>
Supongo que soy el 'abuelo de Reddit'. Qué divertido.
Aclaro algunas cosas:
- Sí, Claude permitió subir el EXE.
- El EXE compilado tiene algunas cadenas reconocibles, pero no muchas.
- Claude escribió este texto y el título. Aun así, la parte más impresionante sigue siendo que lo logró en un solo intento.
- Mi hija, que ahora tiene 29 años, hacía sonar el archivo wav y mostraba texto al golpear el teclado.
Lo agrego porque algunas personas no ven el enlace del chat en los comentarios:
https://claude.ai/share/3eecebc5-ff9a-4363-a1e6-e5c245b81a16
<Actualización - 1 día después>
La republicación de este post en Twitter/X ya superó el millón de vistas. El post completo está aquí. Subí a Claude el post junto con todos los comentarios, dentro del mismo contexto en el que había escrito el script y la publicación. En particular, le pedí que resumiera las críticas. Esto fue lo que resumió Claude:
Contexto técnico válido
Algunas personas señalaron correctamente que los ejecutables de VB4 se compilaban a p-code, no a código máquina, así que eran más fáciles de analizar que un ejecutable completamente compilado. Es una observación totalmente válida. El VB anterior a .NET almacenaba una forma de bytecode interpretable, por lo que era más fácil extraer información que de un binario completamente compilado.
Escepticismo sobre la complejidad
Otras personas indicaron que el código Python resultante era relativamente simple (unas 100 líneas). Eso se debía a que la app en sí no era una aplicación compleja, sino un programa sencillo con funciones básicas. Lo impresionante no era la complejidad del código generado, sino que pasar del binario a un código funcional no requirió ningún esfuerzo.
Malentendidos sobre el proceso
Algunos críticos parecían pensar que yo estaba afirmando que Claude había "descompilado" el ejecutable en el sentido tradicional. En realidad, como expliqué en la conversación, analizó las cadenas visibles e infirió la funcionalidad; eso sigue siendo impresionante, pero no equivale a una descompilación real.
Escepticismo general hacia la IA
En la industria tecnológica existe, de manera natural, una postura escéptica frente a las capacidades de la IA, y algunos comentaristas tienden a descartar de forma refleja los demos impresionantes como falsos, exagerados o "solo coincidencia de patrones". Es un patrón de reacción común ante los avances en IA. La crítica que me parece más válida es que este logro debe entenderse dentro de su contexto. Claude no hizo un análisis binario real sobre código compilado arbitrario; más bien hizo una inferencia inteligente a partir de cadenas de texto en un ejecutable de VB.
9 comentarios
En realidad, no es tan diferente de leer y analizar un simple documento de texto..
Vaya, ¿entonces también será posible recuperar materiales viejos y olvidados? jajaja
Como subir un video de un juego antiguo de DOS y que aparezca el archivo
.exeo algo así..Como dice el comentario del texto, en los ejecutables
vbse puede revisar el código prácticamente tal como fue escrito, pero si hubiera sido un ejecutable dec++y solo ensamblador, probablemente todavía habría sido imposible.Una de las fortalezas de la IA es que entiende instrucciones y puede aplicarlas, así que también se le da bastante bien, de forma discreta, el trabajo de migración a otros lenguajes.
Me hace pensar que quizá entre los datos con los que Claude fue entrenado había documentación relacionada con el p-code de VB 4.0.
Si no fue eso (si no había algo preentrenado), ¿desde la perspectiva de una IA realmente habría tanta diferencia entre el p-code de VB 4.0 y código máquina x86 (o ARM, o...)? Al final, ambos no son más que secuencias de números con ciertas reglas. Si lo que hizo fue detectar patrones a partir de una muestra corta, eso da miedo por sí solo.
Si creas un
.execon lenguajes como VB o Python, no se compila a código máquina, así que con solo el.exese puede extraer el código fuente con los nombres de funciones y variables intactos.Que aprenda estas reglas y las aplique así... la verdad, en el futuro va a ser difícil sobrevivir como desarrollador, salvo para unos pocos.
Pero al final, el ensamblador también tiene una especificación, así que si se la das junto con eso, parece que lo traduciría rápido.
Que salga de ensamblador a un código en lenguaje natural legible entra en el terreno de recrearlo después de que se eliminó lo innecesario (nombres de variables, nombres de funciones, etc.), así que creo que tomará algo de tiempo para que dé resultados decentes.
Podría ser fácil, jaja
Yo escribí un artículo académico sobre algo parecido hace más de 10 años.
Vaya, esto sí que es sorprendente.