elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Ingeniería Inversa (Moderadores: karmany, .:UND3R:., MCKSys Argentina)
| | |-+  Ayuda con ollydbg
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con ollydbg  (Leído 10,199 veces)
majerisa

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Ayuda con ollydbg
« en: 18 Octubre 2016, 23:09 pm »

Hola a todos, estoy empezando en esto y estoy intentando hacer una practica y debo ser muy torpe porque no hay manera.
Tengo un programa que lo único que hace es comparar un password que se introduce por teclado y compararlo con el que tiene el código.
#include <stdlib.h>
int main()
{
    char password[4];
    int isOK = 0;
    int i =0;
    void passwordOK();
    while  (isOK == 0 && i<3){
        i++;
        printf("Password: ");
        gets(password);
        if (strcmp(password, "PARIS")==0)  {
        }   isOK = 1;
else{printf("Password NOT OK\n");
} };
    if (isOK ==1){
            passwordOK();
        }else{
            printf("ERROR: 3 passwords NOT
OK\n");
            system("PAUSE");
} }return 0;
void passwordOK()
{
     printf("Password OK\n ");
     system("PAUSE");
}


Lo que necesito hacer es, modificacarlo con ollydbg, de forma que si se introduzco una contraseña incorrecta, se realice igualmente la llamada a la función passwordOK() y muestre el mensaje "Password OK ".

Importante que haga la llamada a la función, y no consigo localizarla en el ensamblador que me da ollydbg. Pongo la parte que creo que es la importante....


$-8C     00401360        |> 834424 18 01   /ADD DWORD PTR SS:[ESP+18],1             ; |||
$-87     00401365        |. C70424 2430400>|MOV DWORD PTR SS:[ESP],pac1.00403024    ; |||ASCII "Password: "
$-80     0040136C        |. E8 BF080000    |CALL <JMP.&msvcrt.printf>               ; ||\printf
$-7B     00401371        |. 8D4424 14      |LEA EAX,DWORD PTR SS:[ESP+14]           ; ||
$-77     00401375        |. 890424         |MOV DWORD PTR SS:[ESP],EAX              ; ||
$-74     00401378        |. E8 BB080000    |CALL <JMP.&msvcrt.gets>                 ; |\gets
$-6F     0040137D        |. C74424 04 2F30>|MOV DWORD PTR SS:[ESP+4],pac1.0040302F  ; |ASCII "PARIS"
$-67     00401385        |. 8D4424 14      |LEA EAX,DWORD PTR SS:[ESP+14]           ; |
$-63     00401389        |. 890424         |MOV DWORD PTR SS:[ESP],EAX              ; |
$-60     0040138C        |. E8 AF080000    |CALL <JMP.&msvcrt.strcmp>               ; \strcmp
$-5B     00401391           85C0           TEST EAX,EAX
$-59     00401393           75 0A          JNZ SHORT pac1.0040139F
$-57     00401395           C74424 1C 0100>MOV DWORD PTR SS:[ESP+1C],1
$-4F     0040139D        |. EB 0C          |JMP SHORT pac1.004013AB
$-4D     0040139F        |> C70424 3530400>|MOV DWORD PTR SS:[ESP],pac1.00403035    ; |ASCII "Password NOT OK"
$-46     004013A6        |. E8 9D080000    |CALL <JMP.&msvcrt.puts>                 ; \puts
$-41     004013AB        |> 837C24 1C 00    CMP DWORD PTR SS:[ESP+1C],0
$-3C     004013B0        |. 75 07          |JNZ SHORT pac1.004013B9
$-3A     004013B2        |. 837C24 18 02   |CMP DWORD PTR SS:[ESP+18],2
$-35     004013B7        |.^7E A7          \JLE SHORT pac1.00401360
$-33     004013B9        |> 837C24 1C 01   CMP DWORD PTR SS:[ESP+1C],1
$-2E     004013BE        |. 75 07          JNZ SHORT pac1.004013C7
$-2C     004013C0        |. E8 21000000    CALL pac1.004013E6
$-27     004013C5        |. EB 18          JMP SHORT pac1.004013DF
$-25     004013C7        |> C70424 4530400>MOV DWORD PTR SS:[ESP],pac1.00403045     ; ||ASCII "ERROR: 3 passwords NOT OK"
$-1E     004013CE        |. E8 75080000    CALL <JMP.&msvcrt.puts>                  ; |\puts
$-19     004013D3        |. C70424 5F30400>MOV DWORD PTR SS:[ESP],pac1.0040305F     ; |ASCII "PAUSE"
$-12     004013DA        |. E8 71080000    CALL <JMP.&msvcrt.system>                ; \system
$-D      004013DF        |> B8 00000000    MOV EAX,0
$-8      004013E4        |. C9             LEAVE
$-7      004013E5        \. C3             RETN
$-6      004013E6        /$ 55             PUSH EBP
$-5      004013E7        |. 89E5           MOV EBP,ESP
$-3      004013E9        |. 83EC 18        SUB ESP,18
$ ==>    004013EC           C70424 6530400>MOV DWORD PTR SS:[ESP],pac1.00403065     ;  ASCII "Password OK
 "



Muchas gracias por vuestra ayuda
En línea

apuromafo CLS


Desconectado Desconectado

Mensajes: 1.441



Ver Perfil WWW
Re: Ayuda con ollydbg
« Respuesta #1 en: 18 Octubre 2016, 23:34 pm »

 00401393           75 0A          JNZ SHORT pac1.0040139F

a
 00401393         JMP  004013EC
En línea

Apuromafo
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda con ollydbg
« Respuesta #2 en: 18 Octubre 2016, 23:37 pm »

Hola!

Como ha colocado apuromafo, si modificas el salto de 00401393 para que salte siempre (cambiar el JNZ por JMP), aceptará cualquier password (incluída la correcta).

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

majerisa

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda con ollydbg
« Respuesta #3 en: 19 Octubre 2016, 07:05 am »

Muchísimas gracias, podríais comentarme que hace el cambio que me comentáis?
En línea

BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
Re: Ayuda con ollydbg
« Respuesta #4 en: 19 Octubre 2016, 07:36 am »

00401393           75 0A          JNZ SHORT pac1.0040139F

a
 00401393         JMP  004013EC
Hola!

Como ha colocado apuromafo, si modificas el salto de 00401393 para que salte siempre (cambiar el JNZ por JMP), aceptará cualquier password (incluída la correcta).

Saludos!

En mi preferencia a ese código hay que tener cuidado... sobre todo porque se salta directo ahí al printf de otra función y la stack es distinta aparentemente y cuando el caller apunte a cualquier lado puff...

yo reemplazaría ahí
Código
  1. 00401393           75 0A          JNZ SHORT pac1.0040139F
por
Código
  1. call 004013E6


B#
En línea



majerisa

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda con ollydbg
« Respuesta #5 en: 19 Octubre 2016, 07:36 am »

Imagino que estoy equivocado pero mirando bien lo que me me comentáis me da la impresión que si lo cambio a
 00401393         JMP  004013EC lo que hace es mostrar por pantalla el ok pero no ejecuta la función que comentaba, no??
En línea

BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
Re: Ayuda con ollydbg
« Respuesta #6 en: 19 Octubre 2016, 07:40 am »

Imagino que estoy equivocado pero mirando bien lo que me me comentáis me da la impresión que si lo cambio a
 00401393         JMP  004013EC lo que hace es mostrar por pantalla el ok pero no ejecuta la función que comentaba, no??

Salta directamente al printf de la otra función y mostrara password correcta, pero estoy casi seguro que va a fallar el programa cuando llegue a una instrucción ret


B#
En línea



majerisa

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda con ollydbg
« Respuesta #7 en: 19 Octubre 2016, 07:40 am »

Ahora le echaré un vistazo a lo que me comentas, el requisito es que tiene que seguir pasando por la función  passwordOK(), no vale solo con importante imprimir por pantalla el ok directamente.

Saludos y muchas gracias por tu aportación

En mi preferencia a ese código hay que tener cuidado... sobre todo porque se salta directo ahí al printf de otra función y la stack es distinta aparentemente y cuando el caller apunte a cualquier lado puff...

yo reemplazaría ahí
Código
  1. 00401393           75 0A          JNZ SHORT pac1.0040139F
por
Código
  1. call 004013E6


B#

Ya veo, entonces no puedo usar esa solución, tiene que pasar por la función passwordOK().



Salta directamente al printf de la otra función y mostrara password correcta, pero estoy casi seguro que va a fallar el programa cuando llegue a una instrucción ret


B#

Una pregunta, y con la opción que tú propones que hace?. No entiendo muy bien que haría.

Ya veo, entonces no puedo usar esa solución, tiene que pasar por la función passwordOK().

MOD: No hacer triple post.
« Última modificación: 19 Octubre 2016, 17:21 pm por MCKSys Argentina » En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.471


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda con ollydbg
« Respuesta #8 en: 19 Octubre 2016, 17:30 pm »

Revisando con más detenimiento el código, veo que si pones un JMP en 00401393 no vas a lograr lo que quieres. (errar es humano  :P)

Lo que podrías hacer es NOPear esa instrucción para que

Código:
$-57     00401395           C74424 1C 0100>MOV DWORD PTR SS:[ESP+1C],1

se ejecute. Con eso haces que el "flag de igualdad" que usa el proggie se active y pase los chequeos siguientes.

En mi preferencia a ese código hay que tener cuidado... sobre todo porque se salta directo ahí al printf de otra función y la stack es distinta aparentemente y cuando el caller apunte a cualquier lado puff...

yo reemplazaría ahí
Código
  1. 00401393           75 0A          JNZ SHORT pac1.0040139F
por
Código
  1. call 004013E6


B#

Revisa el código. Saltar a ése printf en particular no rompe nada pues no PUSHea nada al stack, lo usa directamente.
Ahora, si usas un CALL como pones, ahí sí romperás el stack y tendrás una excepción.

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

BloodSharp


Desconectado Desconectado

Mensajes: 804


El Messi-Vegeta :D


Ver Perfil
Re: Ayuda con ollydbg
« Respuesta #9 en: 20 Octubre 2016, 01:51 am »

Revisa el código. Saltar a ése printf en particular no rompe nada pues no PUSHea nada al stack, lo usa directamente.
Ahora, si usas un CALL como pones, ahí sí romperás el stack y tendrás una excepción.

Saludos!

Si cierto, mala mía :P ahí revisé bien el código y efectivamentelo el caller se va a cualquier lado.
Poniendo el call igual muestra el mensaje pero cuando termina la rutina passwordOK explota, además que el call es más largo que el jmp short :S (5bytes vs 2bytes).
Lo compilé en mingw (sin optimizaciones) y quedó identico...
Dejo las rutinas completas:

Código
  1. 00401340 <testcode.sub_401340>       | 55                       | push ebp                                |
  2. 00401341                             | 89 E5                    | mov ebp,esp                             |
  3. 00401343                             | 83 E4 F0                 | and esp,FFFFFFF0                        |
  4. 00401346                             | 83 EC 20                 | sub esp,20                              |
  5. 00401349                             | E8 72 06 00 00           | call testcode.4019C0                    |
  6. 0040134E                             | C7 44 24 1C 00 00 00 00  | mov dword ptr ss:[esp+1C],0             |
  7. 00401356                             | C7 44 24 18 00 00 00 00  | mov dword ptr ss:[esp+18],0             |
  8. 0040135E                             | EB 4B                    | jmp testcode.4013AB                     |
  9. 00401360                             | 83 44 24 18 01           | add dword ptr ss:[esp+18],1             |
  10. 00401365                             | C7 04 24 24 30 40 00     | mov dword ptr ss:[esp],testcode.403024  | 403024:"Password: "
  11. 0040136C                             | E8 BF 08 00 00           | call <testcode.printf>                  |
  12. 00401371                             | 8D 44 24 14              | lea eax,dword ptr ss:[esp+14]           |
  13. 00401375                             | 89 04 24                 | mov dword ptr ss:[esp],eax              |
  14. 00401378                             | E8 BB 08 00 00           | call <testcode.gets>                    |
  15. 0040137D                             | C7 44 24 04 2F 30 40 00  | mov dword ptr ss:[esp+4],testcode.40302 | 40302F:"PARIS"
  16. 00401385                             | 8D 44 24 14              | lea eax,dword ptr ss:[esp+14]           |
  17. 00401389                             | 89 04 24                 | mov dword ptr ss:[esp],eax              |
  18. 0040138C                             | E8 AF 08 00 00           | call <testcode.strcmp>                  |
  19. 00401391                             | 85 C0                    | test eax,eax                            |
  20. 00401393                             | 75 0A                    | jne testcode.40139F                     |
  21. 00401395                             | C7 44 24 1C 01 00 00 00  | mov dword ptr ss:[esp+1C],1             |
  22. 0040139D                             | EB 0C                    | jmp testcode.4013AB                     |
  23. 0040139F                             | C7 04 24 35 30 40 00     | mov dword ptr ss:[esp],testcode.403035  | 403035:"Password NOT OK"
  24. 004013A6                             | E8 9D 08 00 00           | call <testcode.puts>                    |
  25. 004013AB                             | 83 7C 24 1C 00           | cmp dword ptr ss:[esp+1C],0             |
  26. 004013B0                             | 75 07                    | jne testcode.4013B9                     |
  27. 004013B2                             | 83 7C 24 18 02           | cmp dword ptr ss:[esp+18],2             |
  28. 004013B7                             | 7E A7                    | jle testcode.401360                     |
  29. 004013B9                             | 83 7C 24 1C 01           | cmp dword ptr ss:[esp+1C],1             |
  30. 004013BE                             | 75 07                    | jne testcode.4013C7                     |
  31. 004013C0                             | E8 21 00 00 00           | call <testcode.sub_4013E6>              |
  32. 004013C5                             | EB 18                    | jmp testcode.4013DF                     |
  33. 004013C7                             | C7 04 24 45 30 40 00     | mov dword ptr ss:[esp],testcode.403045  | 403045:"ERROR: 3 passwords NOT OK"
  34. 004013CE                             | E8 75 08 00 00           | call <testcode.puts>                    |
  35. 004013D3                             | C7 04 24 5F 30 40 00     | mov dword ptr ss:[esp],testcode.40305F  | 40305F:"PAUSE"
  36. 004013DA                             | E8 71 08 00 00           | call <testcode.system>                  |
  37. 004013DF                             | B8 00 00 00 00           | mov eax,0                               |
  38. 004013E4                             | C9                       | leave                                   |
  39. 004013E5                             | C3                       | ret                                     |
  40. 004013E6 <testcode.sub_4013E6>       | 55                       | push ebp                                |
  41. 004013E7                             | 89 E5                    | mov ebp,esp                             |
  42. 004013E9                             | 83 EC 18                 | sub esp,18                              |
  43. 004013EC                             | C7 04 24 65 30 40 00     | mov dword ptr ss:[esp],testcode.403065  | 403065:"Password OK\n "
  44. 004013F3                             | E8 38 08 00 00           | call <testcode.printf>                  |
  45. 004013F8                             | C7 04 24 5F 30 40 00     | mov dword ptr ss:[esp],testcode.40305F  | 40305F:"PAUSE"
  46. 004013FF                             | E8 4C 08 00 00           | call <testcode.system>                  |
  47. 00401404                             | C9                       | leave                                   |
  48. 00401405                             | C3                       | ret                                     |


B#
« Última modificación: 20 Octubre 2016, 01:53 am por BloodSharp » En línea



Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda con el Ollydbg
Ingeniería Inversa
wscan 3 2,763 Último mensaje 25 Febrero 2004, 14:01 pm
por doblecero
ayuda ollydbg
Ingeniería Inversa
franki127 3 3,707 Último mensaje 22 Mayo 2008, 23:04 pm
por solidcls
Ayuda con el Ollydbg
Ingeniería Inversa
deliol 6 4,700 Último mensaje 1 Noviembre 2008, 20:57 pm
por Shaddy
Ayuda con el ollydbg
Dudas Generales
m4rk0z73 2 2,682 Último mensaje 22 Agosto 2010, 04:04 am
por Ariath
Ayuda con Ollydbg
Ingeniería Inversa
er_davids 1 2,086 Último mensaje 19 Agosto 2010, 15:00 pm
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines