Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: javyer en 5 Febrero 2006, 16:19 pm



Título: Problema con un programa en Visual Basic
Publicado por: javyer en 5 Febrero 2006, 16:19 pm
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.


Título: Re: Problema con un programa en Visual Basic
Publicado por: javyer en 7 Febrero 2006, 19:16 pm
¿Alguién puede ayudarme?. Gracias.


Título: Re: Problema con un programa en Visual Basic
Publicado por: pERICOTE en 7 Febrero 2006, 22:25 pm
Empieza con los tutosde raton y luegos con los de Ricardo Narvaja.
Seguro en dos dias ya puedes formular una pregunta mas concreta y directa. Saludos  ;D ;D ;D


Título: Re: Problema con un programa en Visual Basic
Publicado por: javyer en 8 Febrero 2006, 01:46 am
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.


Título: Re: Problema con un programa en Visual Basic
Publicado por: cristianbol12 en 8 Febrero 2006, 01:59 am
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


Título: Re: Problema con un programa en Visual Basic
Publicado por: tena en 9 Febrero 2006, 01:06 am
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


Título: Re: Problema con un programa en Visual Basic
Publicado por: javyer en 9 Febrero 2006, 13:01 pm
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.


Título: Re: Problema con un programa en Visual Basic
Publicado por: tena en 11 Febrero 2006, 02:36 am
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.

Esta bien, en este link te deje unas indicaciones:
http://www.badongo.com/file.php?file=eliminar los 4 minutos de duracion__2006-02-10_indicaciones.zip

Espero que te sirva.
Saludos


Título: Re: Problema con un programa en Visual Basic
Publicado por: tena en 11 Febrero 2006, 02:39 am
debes clickear en "click here to download..."

o si no en esta que va directa
http://cache3.badongo.com/0444455546866269/disk5/data/other_files/2006-02-10/indicaciones.zip


Título: Re: Problema con un programa en Visual Basic
Publicado por: anjz en 12 Febrero 2006, 19:54 pm
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.


Título: Re: Problema con un programa en Visual Basic
Publicado por: anjz en 13 Febrero 2006, 20:33 pm
Bueno, ya he conseguido desactivar la proteccion de tiempo ;D

He hecho un pequeño manual muy sencillo y paso a paso de como hacerlo
lo podeis descargar aqui:

http://www.geocities.com/anjsweb/5minutos.doc


Título: Re: Problema con un programa en Visual Basic
Publicado por: javyer en 13 Febrero 2006, 23:04 pm
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.


Título: Re: Problema con un programa en Visual Basic
Publicado por: javyer en 13 Febrero 2006, 23:20 pm
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.


Título: Re: Problema con un programa en Visual Basic
Publicado por: anjz en 14 Febrero 2006, 01:25 am
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.



Título: Re: Problema con un programa en Visual Basic
Publicado por: anjz en 14 Febrero 2006, 01:35 am
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.


Título: Re: Problema con un programa en Visual Basic
Publicado por: javyer en 14 Febrero 2006, 09:36 am
Ok, todo mejor. Esperaré que me digas algo del error. Lo he hecho varias veces tanto con el cambio del registro cómo con la opción de que nunca se agote el tiempo y me da el mismo error. Saludos.


Título: Re: Problema con un programa en Visual Basic
Publicado por: anjz en 14 Febrero 2006, 21:43 pm
Pues, la verdad esque la dirección esa que nos apuntamos del W32Dasm no se si es exactamente la dirección de la ventanita esa que dice que se te agotó el tiempo.

Igual está mal partiendo desde esa base.
Ese es el problema que le veo yo. No se como localizar exactamente la instrucción de el mensaje y por tanto la direccion en donde se decide si paso o no paso el tiempo.

Esque en las API que usa no me sale la _vbaend ni tampoco la rtcmsgbox(que es la que se usa para crear mensajes emergentes del estilo al que nos aparece diciendo que se acabó el tiempo).
No se por donde pillarlo.

Pero NO SABE NADIE??? me extraña. Yo esque no se mucho mucho, estoy aprendiendo. A ver si alguién que sepa algo mas sobre aplicaciones en VB se involucra un poquillo  ;)


Título: Re: Problema con un programa en Visual Basic
Publicado por: javyer en 14 Febrero 2006, 23:00 pm
Haber si hay suerte y ayuda alguién. Espero noticias tuyas por si encuentras algo, ok?. Saludos


Título: Re: Problema con un programa en Visual Basic
Publicado por: aragorn666 en 14 Febrero 2006, 23:16 pm
Nada de nada ni idea como principiante que soy no se


Título: Re: Problema con un programa en Visual Basic
Publicado por: aragorn666 en 14 Febrero 2006, 23:20 pm
.


Título: Re: Problema con un programa en Visual Basic
Publicado por: javyer en 15 Febrero 2006, 00:38 am
Me he descargado el hackman hex editor pero soy muy novato y no sé cómo hacerlo. No sé cómo hacer eso con un editor hexadecimal. ¿Puedes echarme una "manita"?. Saludos y gracias por tu ayuda.


Título: Re: Problema con un programa en Visual Basic
Publicado por: tena en 15 Febrero 2006, 17:11 pm
Mira existe un debugger para aplicaciones hechas en Visual Basic, es de la compañia de Numega del famoso softice. Esta harramienta se llama SmartChek y es muy usado para buscar seriales.
Con respecto al tema, si cargas el ejecutable en Smartchek, y luego de sus respectivas configuraciones para que te aparescan todos los eventos y le das a run, luego de que se ejecute totalmente la aplicacion esperas los 5 minutos hasta que se cierre Fit Gedo. Posteriormente te desplazas hacia abajo, hasta encontrar el ultimo evento, puede ser un timer, etc, lo abris y ahi encontraras la api que usa para cerrarlo ej: _vbaEnd o lo que sea en Fit Gedo.

Tambien podes buscar el serial y registrarlo. Para hacer esto, hace los mismos pasos que antes hasta que se ejecute completamente Fit Gedo, luego te vas a la ventanita de registro, lo completas Nombre: xxxxx Serial: xxxxx y le das a ok, y lo cerras. A posteriori buscas en Smartcheck la cadena que escribiste en Nombre: o Serial:, o simplemente podes buscar la palabra clic, osea si apretaste 3 veces el boton del mouse hasta llegar al ok de la ventanita de registro, buscaras el tercer clic que se encuentre entre los eventos capturados por Smartchek.
Para que te salgan todos los eventos debes presionar el boton de All event al lado de run, creo. y expandir todo el arbol.

Saludos
                        TENA


Título: Re: Problema con un programa en Visual Basic
Publicado por: tena en 15 Febrero 2006, 17:22 pm
Me he descargado el hackman hex editor pero soy muy novato y no sé cómo hacerlo. No sé cómo hacer eso con un editor hexadecimal. ¿Puedes echarme una "manita"?. Saludos y gracias por tu ayuda.

No entiendo muy bien lo que quieres decir con lo "No se como hacerlo" o "No se como hacer eso"  creo que me perdi de algo. No importa
Si lo que quieres es buscar un offcet creo que debes ir al menu archivo y ahi se encontrara algo como Find... no me accuerdo muy bien pero ahi esta. Escribes el offcet y le das a ok, caes justo encima.

¿cual es el offcet? Pues en W32Dasm estando parado en una linea, si te fijas abajo de la pantalla veras el offcet de dicha linea o direccion.
Para sacar el offcet sin necesidad de W32Dasm en general se le restan 400000 (imagen base) a la direccion que queres buscar. Por ejemplo el offcet de 42B000 es 2B000 si la imagen base es 400000.  Y a ese offcet lo buscas en el hackman.

y hasta podes buscar string en Hackman ai cambias la opcion de buscar a string.

Saludos
                         Tena


Título: Re: Problema con un programa en Visual Basic
Publicado por: tena en 15 Febrero 2006, 17:43 pm
vbReformer es otra herramienta que te dice caracteristicas de los controles y las imagenes, propiedades, etc, pero no te da el codigo.
A lo mejor te sirva...para buscar el mensaje ese que decis.

Saludos
              Tena


Título: Re: Problema con un programa en Visual Basic
Publicado por: javyer en 15 Febrero 2006, 17:45 pm
¿Por qué ha borrado fcxadsfasdfasdfasdfasdfasdfasdfasdf los dos mensajes que me eran muy útiles?. No pude cogerlos. Saludos.


Título: Re: Problema con un programa en Visual Basic
Publicado por: tena en 15 Febrero 2006, 17:49 pm
¿Por qué ha borrado fcxadsfasdfasdfasdfasdfasdfasdfasdf los dos mensajes que me eran muy útiles?. No pude cogerlos. Saludos.

No entiendo y no se


Título: Re: Problema con un programa en Visual Basic
Publicado por: pERICOTE en 15 Febrero 2006, 18:32 pm
Intentare bajar el programa que pesa una decena de megas que es todo una tortura para mi maquina y luego vere que hago, nos vemos.
 ;D ;D ;D ;D


Título: Re: Problema con un programa en Visual Basic
Publicado por: javyer en 17 Febrero 2006, 13:21 pm
Ok, haber si encuentras algo. Yo por más que le doy vueltas no consigo nada. Saludos.


Título: Re: Problema con un programa en Visual Basic
Publicado por: pERICOTE en 17 Febrero 2006, 15:25 pm
AUNQUE LA SALIDA NO ES ELEGANTE, EL OBJETIVO SE ALCANZA PLENAMENTE, ES DECIR EL PROGRAMA CONTINUA SIN LA LIMITACION DE LOS CINCO MINUTOS HASTA LA ETERNIDAD

ANTES:
00522256   .  66:3B05 6AE05>CMP AX,WORD PTR DS:[54E06A]              ;  COMPARACION CLAVE
0052225D   .  0F8C FE000000 JL Gedo.00522361                         ;  VER ESTE SALTO BUENO

DESPUES:
00522256   .  66:3BC0   CMP AX,AX                                ; 
00522259   .  90            NOP
0052225A   .  90            NOP
0052225B   .  90            NOP
0052225C   .  90            NOP
0052225D   .  0F84 FE000000 JE Gedo.00522361                         

CREO QUE SE PUEDE HACER MAS COSAS, NOS VEMOS HASTA LA PROXIMA.
 ;D ;D ;D ;D


Título: Re: Problema con un programa en Visual Basic
Publicado por: anjz en 17 Febrero 2006, 16:29 pm
Podrias explicar un poquillo por encima, como llegaste a la conclusion de que es eso lo que hay que cambiar??? Que pasos seguiste? Se agradecería.
Funciona bien lo que has hecho lo que pasa, esque a mi cuando ha pasado el tiempo he notado como que se estrechaban las fotos y todo lo del programa.


Título: Re: Problema con un programa en Visual Basic
Publicado por: pERICOTE en 18 Febrero 2006, 03:28 am
La Text Strings Referenced "FIT GEDO SYSTEM -- VERSION DEMO (" resulta muy elocuente por lo que me dirijo a ella dando doble click, luego procedo a analizar el desemsamblado colocando BPs en sitios claves, y verifico que en 00522110 el salto no se da y que el JMP en la dirección 0052214D pasa por encima del conteo de los cinco minutos cayendo a un lugar bueno entonces:

00522110     /74 3B         JNE SHORT Gedo.00522152    ;  (CAMBIO EL JNZ POR JE Y LO REDIRECCIONO A 0052214D)
00522112   . |8B17          MOV EDX,DWORD PTR DS:[EDI]
00522114   . |57            PUSH EDI
00522115   . |FF92 04030000 CALL DWORD PTR DS:[EDX+304]
0052211B   . |50            PUSH EAX
0052211C   . |8D45 DC       LEA EAX,DWORD PTR SS:[EBP-24]
0052211F   . |50            PUSH EAX
00522120   . |FF15 8C104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaObjSe>;  MSVBVM60.__vbaObjSet
00522126   . |8BF0          MOV ESI,EAX
00522128   . |53            PUSH EBX
00522129   . |56            PUSH ESI
0052212A   . |8B0E          MOV ECX,DWORD PTR DS:[ESI]
0052212C   . |FF51 5C       CALL DWORD PTR DS:[ECX+5C]
0052212F   . |3BC3          CMP EAX,EBX
00522131   . |DBE2          FCLEX
00522133     |7D 0F         JGE SHORT Gedo.00522144
00522135   . |6A 5C         PUSH 5C
00522137   . |68 A0FC4000   PUSH Gedo.0040FCA0
0052213C   . |56            PUSH ESI
0052213D   . |50            PUSH EAX
0052213E   . |FF15 58104000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaHresu>;  MSVBVM60.__vbaHresultCheckObj
00522144   > |8D4D DC       LEA ECX,DWORD PTR SS:[EBP-24]
00522147   . |FF15 54124000 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFreeO>;  MSVBVM60.__vbaFreeObj
0052214D   . \E9 11020000   JMP Gedo.00522363   ;  (ESTE SALTO PASA POR ENCIMA DEL CONTEO)

Y listo esto es todo, la versión demo quedó completamente operativa sin la limitación de los cinco minutos y sin el texto que recordaba “X minutos restantes”. A esto lo llamo una salida elegante, jeje...
 ;D ;D ;D ;D


Título: Re: Problema con un programa en Visual Basic
Publicado por: anjz en 18 Febrero 2006, 09:49 am
gracias por tu respuesta,me has aclarado algo mas.


Título: Re: Problema con un programa en Visual Basic
Publicado por: javyer en 18 Febrero 2006, 21:23 pm
Muchisimas gracias por tu ayuda pERICOTE. También dar las gracias a anjz por el interés mostrado también. Un saludo y de nuevo gracias.


Título: Re: Problema con un programa en Visual Basic
Publicado por: makinen00 en 28 Febrero 2008, 21:19 pm
he llegado a decubrir los punto que dices, pero no consigo dejarlos grabado ya que cuando cierro el software no se queda memorizada la modificación y sigue la cuenta atrás.
Como se hace la memorización de la modificación?
Gracias