Eliminar Palabra DEMO en Programa

Iniciado por guruangel, 6 Diciembre 2007, 23:29 PM

0 Miembros y 5 Visitantes están viendo este tema.

Shaddy

lógicamente si ejecutas el .exe de DOS con esos parámetros, será el mismo .exe el que tenga esa función, así que tendremos que indagar en el propio .exe de DOS que es el que se encarga de gestionar ese tipo de cosas.

Salu2..
"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert Einstein)

http://abssha.reversingcode.com
http://www.reversingcode.com

guruangel

Estuve viendo la herramienta DOS pero ademas de que me lanza un error al iniciar Olly donde me dice que esa no es una aplicacion de 32 bits pues no encontre nada interesante en el codigo...

Es decir... no hay texto llamativo como en el otro programa como DEMO o cosas asi... puro codigo y pues no se por donde buscar... Deme datos... que debo buscar y mas o menos que podria encontrar en ese programa tomando en cuenta lo que viene desde el otro programa por linea de comandos...

Espero instrucciones...

Shaddy

Bueno, no tienes que buscar nada de DEMO, lo que tienes que ver son los argumentos que le pasas, tienes que pasarle argumentos con OllyDBG (debug-arguments) y buscar en la memoria que hace con ellos, así verás donde escribe la cadena para que no escriba nada.

Salu2 :)...
"Si buscas resultados diferentes, no hagas siempre lo mismo" (Albert Einstein)

http://abssha.reversingcode.com
http://www.reversingcode.com

Karman

#23
bueno... estuve mirando tu programa y logré hacerlo funcionar (al parecer no quiere funcionar desde "Archivos de prog...", tonces lo copié a C y le puse un nombre de menos de 8 caracteres), la cosa es que lo que hace es muy simple, llama al segundo programa para que haga los cambios con los 2 argumentos, pero que pasa si falta uno? funciona correctamente (va en realidad vi que solo modifica unos datos pero no pone el mencionado argumento) como podes probar esto? lo abrís con el olly, y cuando va a llamar a "winexec" te vas a "Follow in Dump" de eax (el argumento a ser enviado) y eliminas el 2º argumento haciendo doble clic sobre el espacio y pones 0, te queda así:

00A66D0C  63 73 61 69 6E 74 2E 65 78 65 20 43 3A 5C 63 61  csaint.exe C:\ca
00A66D1C  6D 62 69 6F 00 44 45 4D 4F 53 54 52 41 43 49 4F  mbio DEMOSTRACIO
00A66D2C  4E 5F 4E 4F 5F 46 41 4C 4C 41 5F 30 34 31 34 2D  N_NO_FALLA_0414-
00A66D3C  34 33 34 38 37 31 31                             4348711

y entonces que pasa si el cartel no existe?

abrís el programa con un editor hexadecimal, buscás el cartelito y cuando lo encontrás remplazás la primera letra con 00

00076a00h: FF FF FF FF 22 00 00 00 00 45 4D 4F 53 54 52 41 ; ÿÿÿÿ"....EMOSTRA
00076a10h: 43 49 4F 4E 5F 4E 4F 5F 46 41 4C 4C 41 5F 30 34 ; CION_NO_FALLA_04

y listo... cuando quiera unir el segundo argumento este va a ser nulo... prueba esto y dime que onda...

S2

guruangel

Hola chicos... He seguido las dos instrucciones... y el resultado es el siguiente...

Segui con el metodo de ShadowDark y cargue el segundo archivo... meti un argumento y me manda a restablecer el programa... restart y se para en un push... entonces revise hacia arriba y me aparece unos argumentos.. marcados con el numero 1... 2... etc... pero en realidad no se como usar esto de los argumentos...(recuerden que soy novato aun) asi que les dejo la parte que encontre para entonces me den instrucciones de como actuar ahora...

0F00F316  /$  8BFF                  mov edi,edi
0F00F318  |.  55                    push ebp
0F00F319  |.  8BEC                  mov ebp,esp
0F00F31B  |.  57                    push edi
0F00F31C  |.  8B7D 08               mov edi,[arg.1]
0F00F31F  |.  57                    push edi                                       ; /Arg1
0F00F320  |.  E8 599D0000           call ntvdm.0F01907E                            ; \ntvdm.0F01907E
0F00F325  |.  0FB6C0                movzx eax,al
0F00F328  |.  48                    dec eax
0F00F329  |.  48                    dec eax
0F00F32A  |.  74 16                 je short ntvdm.0F00F342
0F00F32C  |.  8B4D 10               mov ecx,[arg.3]
0F00F32F  |.  8BC1                  mov eax,ecx
0F00F331  |.  56                    push esi
0F00F332  |.  8B75 0C               mov esi,[arg.2]
0F00F335  |.  C1E9 02               shr ecx,2
0F00F338  |.  F3:A5                 rep movs dword ptr es:[edi],dword ptr ds:[esi]
0F00F33A  |.  8BC8                  mov ecx,eax
0F00F33C  |.  83E1 03               and ecx,3
0F00F33F  |.  F3:A4                 rep movs byte ptr es:[edi],byte ptr ds:[esi]
0F00F341  |.  5E                    pop esi
0F00F342  |>  5F                    pop edi
0F00F343  |.  5D                    pop ebp
0F00F344  \.  C2 0C00               retn 0C
0F00F347      CC                    int3
0F00F348      CC                    int3
0F00F349      CC                    int3
0F00F34A      CC                    int3
0F00F34B      CC                    int3
0F00F34C > $  6A 18                 push 18
0F00F34E   .  68 4816000F           push ntvdm.0F001648
0F00F353   .  E8 4CC20000           call ntvdm.0F01B5A4
0F00F358   .  BF 94000000           mov edi,94
0F00F35D   .  8BC7                  mov eax,edi
0F00F35F   .  E8 3CCA0000           call ntvdm.0F01BDA0
0F00F364   .  8965 E8               mov ss:[ebp-18],esp
0F00F367   .  8BF4                  mov esi,esp
0F00F369   .  893E                  mov ds:[esi],edi
0F00F36B   .  56                    push <<<<<< AQUI ES DONDE SE DETIENE esi                                       ; /pVersionInformation
0F00F36C   .  FF15 2C10000F         call ds:[<&KERNEL32.GetVersionExA>]            ; \GetVersionExA
0F00F372   .  8B46 10               mov eax,ds:[esi+10]
0F00F375   .  A3 685A060F           mov ds:[F065A68],eax
0F00F37A   .  8B4E 04               mov ecx,ds:[esi+4]
0F00F37D   .  890D 745A060F         mov ds:[F065A74],ecx
0F00F383   .  8B56 08               mov edx,ds:[esi+8]
0F00F386   .  8915 785A060F         mov ds:[F065A78],edx
0F00F38C   .  8B76 0C               mov esi,ds:[esi+C]
0F00F38F   .  81E6 FF7F0000         and esi,7FFF
0F00F395   .  8935 6C5A060F         mov ds:[F065A6C],esi
0F00F39B   .  83F8 02               cmp eax,2
0F00F39E   .  74 0C                 je short ntvdm.0F00F3AC

Entonces segui con el segundo metodo de Karman... Pero me pasa lo mismo que antes... que me quita la descripcion que tenia antes en el archivo binario y me deja el espacio en blanco... pero si hace el segundo argumentos...

Espero me guien con el uso de los argumentos y como deberia de actuar... mas o menos que deberia de buscar y que otra cosa deberia hacer y en que parte del Olly... Gracias a Karman por seguir con la ayuda al igual que ShadowDark...

Karman

si te deja la descripción en blanco es por una condición del Delphi, que deriva del pascal y utiliza el sistema "primer caracter longitud del texto"... entonces al reemplazar el texto el primer carácter define la longitud... y como este es 0 no te lo muestra, en consecuencia... tendrías que modificar el archivo en DOS para que no te reemplace la longitud de la cadena... el chiste del programador fue colocar el corazón del programa en DOS que es un lenguaje muerto (está de moda hacer eso ahora... xD) ya que es difícil de debugear y desensamblar... habría que analizar lo que hace el programa en DOS...

S2

guruangel


Ok... es lo que me habia hecho referencia ShadowDark... a ver... que sugerencias me das para analizar ese archivo... Segun el RDG Packer Detector 0.63 me dice que esta compilado con MiniGw Gcc V2.xx

Segun averigue eso es un programa que usa unas librerias o plugin para compilar varios lenguajes... entre los que compila no aparece el Turbo Pascal... Pero tengo entendido que eso esta realizado en Turbo Pascal...

Asi que no confio de ese detector... jejeje... Espero por mas instrucciones a ver como sigo analizando ese sistema...


Karman

tendrías que desensamblarlo con algún disassembler de DOS, que como mencioné no son muy conocidos por ser un lenguaje muy viejo.... y la verdad, en DOS no existen DLL's así que el código se reutiliza por lo que no vas a encontrar llamadas a funciones definidas... sinó a funciones locales (que hacen lo mismo que las funciones definidas) pero no están tan documentadas... una segunda opción sería crear un patcher que sepa identificar los registros de tu archivo DAT y pueda corregir el mencionado carater "inicial" que elimina la descripción....

S2

guruangel

Bueno... ibamos bien hasta que dijiste eso de hacer un Parcher... jejeje... Creo que soy muy novato aun y este programa es mucho para mi... jejeje... Es decir... tengo que ir quemando etapas... y bueno.. dejame ver si consigo un programa para desensamblarlo y seguir antes de que lo abandone... Gracias... esperare por algun programa mientras sigo buscando una solucion...

Karman

para lo del patcher tendrías que saber la estructura bajo la cual se guardan los datos en el archivo, que podría ser algo así:

registro datos:
  num lngnomb;
  alfan Nombre;
  num cant;
  num mod;
  ..
  etc...
fin reg;

y con esto leer el archivo modificado (el que tiene la descripción en blanco) y corregir el dato lngnomb... pero para eso tendrías que averiguar bien primero dicho registro....

S2