Páginas: [1] 2 3
|
 |
|
Autor
|
Tema: Problema con un programa en Visual Basic (Leído 2843 veces)
|
javyer
Desconectado
Mensajes: 14
|
Llevo dándole vueltas más de 2 días y nada. El programas se llama Fit Gedo http://www.gedo-formacion.com/fitgedo.html . Y lo que hace la demo es funcionar 5 mintuos después de los cuales se cierra el programa. ¿Cómo podría hacer para que no tuviera límite?. No consigo dar con la tecla. Gracias y saludos.
|
|
|
|
« Última modificación: 05 Febrero 2006, 16:21 por javyer »
|
En línea
|
|
|
|
javyer
Desconectado
Mensajes: 14
|
¿Alguién puede ayudarme?. Gracias.
|
|
|
|
|
En línea
|
|
|
|
|
|
javyer
Desconectado
Mensajes: 14
|
El programa está hecho en Visual Basic, ¿que manuales me pueden venir mejor?. Es una demo que tiene un tiempo limite de 5 minutos pasados los cuales se cierra el programa. Saludos.
|
|
|
|
|
En línea
|
|
|
|
cristianbol12
Desconectado
Mensajes: 13
|
hola, el PeID te puede decir en lenguaje esta escrito pero sabes el tiene un pequeño gran problemita es q nuchas veces no te detecta la proteccion de Armadillo, para salir de dudar bajate de la web PE-scan, y te dira si esta con la proteccion de Armadillo
|
|
|
|
|
En línea
|
|
|
|
tena
Desconectado
Mensajes: 281
|
yo tuve un problema similar el cual el programa se salia despues de 20 minutos. Una vez que lo cargues en el ollydbg ponele un breakpoint a la api _vbaEnd. Luego fijate cual es el salto que lo evita y problema resuelto.
Saludos
|
|
|
|
|
En línea
|
|
|
|
javyer
Desconectado
Mensajes: 14
|
El problema es que soy novato y no sé muy bien, no entiendo mucho de lo que me has escrito. ¿Puedes ser un poco más concreto?. Muchas gracias.
|
|
|
|
|
En línea
|
|
|
|
|
|
|
|
anjz
Desconectado
Mensajes: 34
|
Saludos tena. La verdad es que llevo algun tiempo intentando quitar esa limitación de tiempo, porque pensé que sería facil, y quiza le podría ayudar a javyer, pero no puedo. Tampoco se mucho mucho sobre ingeniería inversa, y no se me había ocurrido poner un breackpoint a la api _vbaend. En cuanto lo vi dije, clarooooo ya está. Pero... resulta que el programa no usa esa API. No aparece, cosa que me extraña. Al principio pensé que sería un simple timer, pero investigando un poco, creando yo mismo aplicaciones con timer y analizandolas me di cuenta de que el tiempo se indica en dos lineas de codigo en ensamblador con dos dígitos en cada línea, es decir el valor máximo con cuatro dígitos solo puede ser FFFF en hexadecimal, pasandolo a decimal 65535 milisegundos, y efectivamente probé a crear un programa con un Timer y ese es el valor máximo que me deja introducir. Es decir no puede ser un timer, porque solo se pueden poner timer de a lo sumo 65 segundos con 535 centésimas, pero no de cinco minutos. Asi que supongo que la cuenta de los cinco minutos la hará basandose en la hora del sistema. Alguien sabe que API usa visualbasic para coger la hora del sistema???? Que no se si será una api la encargada de esa funcion. En definitiva que se me resiste, una simple limitacion de tiempo. QUE RABIA.
|
|
|
|
|
En línea
|
|
|
|
|
|
javyer
Desconectado
Mensajes: 14
|
Muchas gracias por las molestias amigo. He estado afuera estos días y voy a leer y poner en práctica el manual. Ya te contaré. Saludos.
|
|
|
|
|
En línea
|
|
|
|
javyer
Desconectado
Mensajes: 14
|
He estado siguiendo las instrucciones pero cuando se ejecuta y pasa (creo los 5 min.) aparece el siguiente error en pantalla: "Error "50003" en tiempo de ejecución: Error inesperado". ¿A qué puede deberse?. También tengo 2 dudas: - Cuando estamos en la dirección del salto y hacemos doble clic para cambiar la instrucción y cambiamos la instrucción original: JNZ SHORT Gedo.005221C7 por la nuestra: JMP 005221B1 se me va a la pantalla CPU - main thread. Ahí es cuando tengo que hacer doble click y cambiar esos valores, lo hago, ¿tengo que picar despues en Assemble?. Cuando lo hago las letras son rojas y pone "JMP SHORT Gedo. 005221B1". ¿Tengo después que picar con el botón secundario hacemos Copy to executable > Selection?. - Cuando dices "... podriamos cambiar jnz por jz así el programa funcionaría justo al revés..." , ¿por qué jz funciona al revés?, ¿de dónde sale eso?. Y por último, ¿por qué al cambiar la dirección se pone JMP XXXXX?, ¿de dónde sale JMP?. Saludos y gracias.
|
|
|
|
« Última modificación: 14 Febrero 2006, 00:19 por javyer »
|
En línea
|
|
|
|
anjz
Desconectado
Mensajes: 34
|
Lo voy a mirar mejor, pero lo probé, pasaron los cinco minutos y seguia funcionando, si que noté que al cerrar el programa me tiró un error, pero fue al cerrarlo. De todos modos voy a ver si le busco una mejor solución como registrarlo por ejemplo. Si esque se puede.
Respondiendo a tus preguntas, SI es como tu lo mencionas. Cambias la instruccion y le das a assemble, y entonces tus cambios salen en color rojo. Mas tarde las instrucciones que hayas cambiado (en este caso solo una) las seleccionas y haces copy to executable > selection y asi de esta manera guardos los cambios en un ejecutable.
Lo de podemos cambiar jnz por jz, es por lo siguiente.
JNZ Significa Jump if Not Zero es decir Salta si No es Cero. Por encima se hace alguna comparación de dos registros y si coinciden pues sería zero y si no coinciden seria not zero. En este caso JNZ SHORT Gedo.005221C7 nos lleva a la direccion 005221C7 si una comparacion que ha hecho algo mas arriba no coincide. ¿Y que compara? pues no nos importa, asi de simple, el programa evaluara ciertas condiciones y demas, y pondrá ciertos valores en unos registros segun unas condiciones, el caso es que no nos interesa que salte. PERO SI NO ESTA REGISTRADO LO QUE SEA QUE COMPARE PARECE NO COINCIDIR. y por eso caemos en "se te acabo el tiempo". Por eso si cambiamos jnz por jz. Saltará si es cero (es decir si la comparacion coincide) pero como hemos dicho que al no estar registrado nunca coinciden pues no saltará a la zona mala y nosotros contentos.
No se si te habré aclarado pero vaya, leelo con calma. De todos modos los manuales de ratón para comenzar y aprender de estas cosas son ideales. Si te interesa este tema te los recomiendo.
|
|
|
|
|
En línea
|
|
|
|
anjz
Desconectado
Mensajes: 34
|
Te pongo un ejemplo para que entiendas mejor por que ponemos un jmp. Voy a asemejar un codigo inventado en español que se supone que sería como el ensamblador. Lo de que sean esos registros o esos valores me lo he inventado, solo es un ejemplo.
01---> en el registro eax se introduce 1 02---> en el registro ecx se introduce 2 03---> comparame eax con ecx (si coincidiesen seria zero sino seria not zero) 04---> salta si no es zero a la instruccion 45. 05 06 07 . . . 45--->LO SIENTO SE ACABO EL TIEMPO.
Si queremos evitar caer en la instruccion 45 podriamos poner en vez de "salta si NO es zero", un "salta si es zero".
O usar un jmp que significa salta por huevos, le da igual lo que haya salido en la comparacion. un jmp es un "salta por narices a la direccion que te indique"
por lo tanto si cambiamos "salta si no es zero a la direccion 45" y ponemos "salta por narices a la instuccion 05" pues es como si nada pasara por que le dice que salte por narices a la siguiente instruccion. Vamos lo normal, el programa sigue su curso liena a linea en vez de ir a la 45.
Espero haberte aclarado.
|
|
|
|
|
En línea
|
|
|
|
|
Páginas: [1] 2 3
|
|
|
|