| |||
Windows programming Hola a todos! queria hacer una consulta, necesito hacer una aplicacion que me permita monitorear otro programa que usamos en mi empresa, para poder entender mejor como funciona (ya que no tenemos acceso al codigo fuente) y para poder extenderlo y agregar funcionalidad. Conocimientos de programacion tengo, en C y C++, pero no habia programado sobre windows. Estuve investigando algo de Detours y entiendo que me puede servir para mi proposito. Pero me encontre con la dificultad, cuando empece a ver el codigo de la libreria Detours, que necesito entender cosas propias de la plataforma Windows. Actualmente estoy leyendo este libro de Charles Petzold: "Programming Windows.5thEd." No es que este mal, pero quiero algo mas detallado. Que explique detalladamente el codigo de ejemplo que incluye en el libro. Hay cosas muy basicas que no aparecen y quizas pierdo un monton de tiempo buscadolas por internet, cuando en realidad me gustaria tenerlas todas juntas en la misma obra. Desde ya muchas gracias! Espero su respusta... |
| |||
Re: Windows programming ¿Y esto que tiene que ver con C/C++, aparte de que Windows exporte funciones C? Si quieres libros, busca en Google sobre ello; o bien ve a la librería y mira por ti mismo los que creas que sean más detallados y les compres. |
| ||||
Re: Windows programming Para poder entender la libreria Detours tenes que saber algo de assembly como minimo ... y sinceramente extender un programa y agregarle funcionalidad sin tener el codigo fuente: utopia. Es preferible escribirlo de cero ... Lo mejor que podes hacer es desensamblarlo y depurarlo para empezar a reconstruirlo. No en todos lados es legal hacer esto y por eso me pregunto cual es la razon por la cual tienen un programa sin el codigo fuente ...
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |
| |||
Re: Windows programming Tienen el programa sin el codigo fuente porque no es una aplicacion propia. Tienen la licencia, pero la empresa que hice el software no les brinda ningun tipo de soporte. Creo que son unos chantas! en fin, hace poco que empece a trabajar aqui y resulta que todavia no hay proyectos de hacer ningun desarrollo nuevo, desafortunadamente. Muchas gracias por las respuestas, a quienes tuvieron la amabilidad de contestarme algo util. Saludos! |
| ||||
Re: Windows programming Cita: Entonces dudo que sea legal extenderlo o modificarlo en cualquier caso, mejor hacerlo de cero.
Iniciado por leojava2007 Tienen el programa sin el codigo fuente porque no es una aplicacion propia. Tienen la licencia, pero la empresa que hice el software no les brinda ningun tipo de soporte. Creo que son unos chantas! en fin, hace poco que empece a trabajar aqui y resulta que todavia no hay proyectos de hacer ningun desarrollo nuevo, desafortunadamente. Muchas gracias por las respuestas, a quienes tuvieron la amabilidad de contestarme algo util. Saludos!
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |
| |||
Re: Windows programming Cita: Si usárais software libre ("as in freedom"), no os pasarían esas cosas :D
Iniciado por leojava2007 Tienen el programa sin el codigo fuente porque no es una aplicacion propia. Tienen la licencia, pero la empresa que hice el software no les brinda ningun tipo de soporte. Creo que son unos chantas! en fin, hace poco que empece a trabajar aqui y resulta que todavia no hay proyectos de hacer ningun desarrollo nuevo, desafortunadamente. Muchas gracias por las respuestas, a quienes tuvieron la amabilidad de contestarme algo util. Saludos! |
| |||
Re: Windows programming Si, yo creo que lo mejor es empezar de cero. Porque el programa es un quilombo. Creo que sus propios creadores no lo entienden :P pero bueno, estoy leyendo algo de ingenieria inversa que me resulta muy interesante y me puede servir. Sin embargo, la mejor opcion es empezar todo de nuevo. Saludos, y muchas gracias a todos por su interes. |
| |||
Re: Windows programming Cita: El conocimiento requerido para añadir funcionalidades a un programa en binario no es precisamente el de un novato.
Iniciado por leojava2007 Si, yo creo que lo mejor es empezar de cero. Porque el programa es un quilombo. Creo que sus propios creadores no lo entienden :P pero bueno, estoy leyendo algo de ingenieria inversa que me resulta muy interesante y me puede servir. Sin embargo, la mejor opcion es empezar todo de nuevo. Saludos, y muchas gracias a todos por su interes. Vamos, que no es coger un tutorial y ponerte a "leer algo de ingeniería inversa". |
| |||
Re: Windows programming Si es cierto, en este ultimo tiempo tuve oportunidad de aprender eso. No es para nada sencillo y hay que saber muchisimo. Ni siquiera creo que lo lleve a cabo, tardaria menos tiempo diseñando yo solo todo el programa de nuevo :P Pero si pueden aportar datos nuevos se los agradeceria. Por ejemplo, no entendi como puedo hacer para separar el binario en las modulos funcionales, o como darme cuenta de donde esta el main... alguien me puede brindar algo de ayuda? Saludos! |
| ||||
Re: Windows programming Pues yo noe stoy asi muy seguro. Lo que te dire es solo teorico, es decir, nunca lo he probado. Se supone que al compilar un programa primero se........ compila, es de cir se producen modulos de codigo objeto y despues estos modulos se enlazan unos con otros para producir el ejecutable. Por lo menos en linux hay herramientas para saber que modulos estan enlazados con que modulos. Nunca las he usado, pero alguna vez lei algo al respecto. El punto seria hacer en enlazado inverso para tener modulos "funcionales" y despues desensamblar. Posiblemente ahi produciria un codigo mucho mas legible que al desensamblar directamente el ejecutable. Todo depende del compilador que haya ensamblado..... Saludos |
| ||||
Re: Windows programming No es asi. Lo que podes encontrar son diferentes secciones del ejecutable PE de diferente tipo, codigo, datos (constantes o no), recursos, tls, etc. El "main" como tal podes buscarlo pero en realidad lo que vas a encontrar es el main de la RTL (Run Time Library) del compilador usado. Si queres desensamblarlo consegui el IDA que es capaz de identificar funciones (no su nombre ni lo que hacen obviamente) PERO tenes que saber MUCHO de assembly para que te sea realmente util.
__________________ ¡Peron cumple, Evita dignifica! VIVA PERON CARAJO |
| |||
Re: Windows programming Vaya, qué extraño, no me deja usar el botón de "Responder" de ahí abajo... Pierdo la sesión, duh. Normalmente los compiladores/enlazadores optimizan las cosas de manera que el binario resultante tiene muy poco que ver en estructura con lo que se supone que lo ha generado. Además de la dificultad intrínseca de leer el programa en ensamblador (siendo un programa muy grande), se usan muchas optimizaciones que dificultan una lectura lógica del código: Si te han desenrollado un for, te han "inlineado" unas cuantas funciones y va saltando por vtable, ya te puedes volver loco sólo para entender por dónde va el flujo de ejecución. En cualquier caso, aparte de tener que entender todo eso, después tienes que añadir la funcionalidad adicional en partes no ocupadas, sin romper nada de lo demás y atendiendo a las especificaciones del programa. Había gente que hacía eso a programas de free-trial, pero hoy en día, dada la facilidad de conseguir el original y desbloquearlo para dejarlo al completo, ese arte está prácticamente muerto. |
| ||||
Re: Windows programming Seguramente te haran optimizaciones y haran mas pequeño o mas rapido el codigo, pero a final de cuentas hace lo mismo. Igual y es mas dificil de leer igual y no tanto, todo depende del codigo que se compila y luego se desensambla. Digo, yo he analizado programas enteros en ensamblador y pues despeus de encontrar algunos patrones entiendes que es lo que el programa intenta hacer. Y claro, al ver el codigo en C nada que ver, aunque la tarea final sea la misma. Es como ver un codigo alternativo a lo que tu originalmente escribiste. Saludos |
| |||
Re: Windows programming Cita: Hace lo mismo (obviamente) pero no de la misma forma. Cita: Coge un programa simple en C, por ejemplo, uno que imprima la serie de Fibonacci hasta que le mates desde otra terminal; compílale a ensamblador para ver el código resultante; tras eso, vuelve a compilarlo pero esta vez con optimizaciones al completo y enfocado a la arquitectura que tengas.Igual y es mas dificil de leer igual y no tanto, todo depende del codigo que se compila y luego se desensambla. Número de líneas (~instrucciones): $ cat fib.s.noopt | wc -l 73 $ cat fib.s.opt | wc -l 369 Número de etiquetas de salto: $ cat fib.s.noopt | grep ^.L | wc -l 6 $ cat fib.s.opt | grep ^.L | wc -l 49 Número de saltos: $ cat fib.s.noopt | grep j.. | wc -l 6 $ cat fib.s.opt | grep j.. | wc -l 57 No tiene ni punto de comparación (el código fuente C tenía 20 líneas incluidas vacías, 2 funciones, un "if" y un "for"). Cita: Posible es, pero entender un programa completo proveniente de C++, con optimizaciones aplicadas al completo y pensado para una arquitectura como prescott; y lo has entedido; no es trivial, y siquiera sé si alguien tiene ese hobby; es tal el número de variables, saltos, ... que debes controlar al mismo tiempo que se hace inabarcable. Digo, yo he analizado programas enteros en ensamblador y pues despeus de encontrar algunos patrones entiendes que es lo que el programa intenta hacer. Y claro, al ver el codigo en C nada que ver, aunque la tarea final sea la misma. Es como ver un codigo alternativo a lo que tu originalmente escribiste. |
| |||
Re: Windows programming Bueno, encuentro puntos de vista distintos. Todos me aportan algo, no hay duda que (dejando la factibilidad de que pueda hacerlo) va a ser una tarea muy dificil. Por ahora, creo que voy a mantenerme lejos del codigo assembly. Me limitare quizas a entender un poco mejor que es lo que hace el programa observando las llamadas a librerias por ejemplo. Tengo entendido que el API Monitor es muy util para esto. Los mantendre al tanto de las novedades. Muchas gracias! |