Autor
|
Tema: Ayuda con ollydbg (Leído 10,242 veces)
|
majerisa
Desconectado
Mensajes: 6
|
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
|
00401393 75 0A JNZ SHORT pac1.0040139F
a 00401393 JMP 004013EC
|
|
|
En línea
|
Apuromafo
|
|
|
MCKSys Argentina
|
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
Mensajes: 6
|
Muchísimas gracias, podríais comentarme que hace el cambio que me comentáis?
|
|
|
En línea
|
|
|
|
BloodSharp
Desconectado
Mensajes: 804
El Messi-Vegeta :D
|
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í 00401393 75 0A JNZ SHORT pac1.0040139F
por call 004013E6
B#
|
|
|
En línea
|
|
|
|
majerisa
Desconectado
Mensajes: 6
|
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
Mensajes: 804
El Messi-Vegeta :D
|
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 retB#
|
|
|
En línea
|
|
|
|
majerisa
Desconectado
Mensajes: 6
|
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í 00401393 75 0A JNZ SHORT pac1.0040139F
por 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
|
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 ) Lo que podrías hacer es NOPear esa instrucción para que $-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í 00401393 75 0A JNZ SHORT pac1.0040139F
por 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
Mensajes: 804
El Messi-Vegeta :D
|
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 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: 00401340 <testcode.sub_401340> | 55 | push ebp | 00401341 | 89 E5 | mov ebp,esp | 00401343 | 83 E4 F0 | and esp,FFFFFFF0 | 00401346 | 83 EC 20 | sub esp,20 | 00401349 | E8 72 06 00 00 | call testcode.4019C0 | 0040134E | C7 44 24 1C 00 00 00 00 | mov dword ptr ss:[esp+1C],0 | 00401356 | C7 44 24 18 00 00 00 00 | mov dword ptr ss:[esp+18],0 | 0040135E | EB 4B | jmp testcode.4013AB | 00401360 | 83 44 24 18 01 | add dword ptr ss:[esp+18],1 | 00401365 | C7 04 24 24 30 40 00 | mov dword ptr ss:[esp],testcode.403024 | 403024:"Password: " 0040136C | E8 BF 08 00 00 | call <testcode.printf> | 00401371 | 8D 44 24 14 | lea eax,dword ptr ss:[esp+14] | 00401375 | 89 04 24 | mov dword ptr ss:[esp],eax | 00401378 | E8 BB 08 00 00 | call <testcode.gets> | 0040137D | C7 44 24 04 2F 30 40 00 | mov dword ptr ss:[esp+4],testcode.40302 | 40302F:"PARIS" 00401385 | 8D 44 24 14 | lea eax,dword ptr ss:[esp+14] | 00401389 | 89 04 24 | mov dword ptr ss:[esp],eax | 0040138C | E8 AF 08 00 00 | call <testcode.strcmp> | 00401391 | 85 C0 | test eax,eax | 00401393 | 75 0A | jne testcode.40139F | 00401395 | C7 44 24 1C 01 00 00 00 | mov dword ptr ss:[esp+1C],1 | 0040139D | EB 0C | jmp testcode.4013AB | 0040139F | C7 04 24 35 30 40 00 | mov dword ptr ss:[esp],testcode.403035 | 403035:"Password NOT OK" 004013A6 | E8 9D 08 00 00 | call <testcode.puts> | 004013AB | 83 7C 24 1C 00 | cmp dword ptr ss:[esp+1C],0 | 004013B0 | 75 07 | jne testcode.4013B9 | 004013B2 | 83 7C 24 18 02 | cmp dword ptr ss:[esp+18],2 | 004013B7 | 7E A7 | jle testcode.401360 | 004013B9 | 83 7C 24 1C 01 | cmp dword ptr ss:[esp+1C],1 | 004013BE | 75 07 | jne testcode.4013C7 | 004013C0 | E8 21 00 00 00 | call <testcode.sub_4013E6> | 004013C5 | EB 18 | jmp testcode.4013DF | 004013C7 | C7 04 24 45 30 40 00 | mov dword ptr ss:[esp],testcode.403045 | 403045:"ERROR: 3 passwords NOT OK" 004013CE | E8 75 08 00 00 | call <testcode.puts> | 004013D3 | C7 04 24 5F 30 40 00 | mov dword ptr ss:[esp],testcode.40305F | 40305F:"PAUSE" 004013DA | E8 71 08 00 00 | call <testcode.system> | 004013DF | B8 00 00 00 00 | mov eax,0 | 004013E4 | C9 | leave | 004013E5 | C3 | ret | 004013E6 <testcode.sub_4013E6> | 55 | push ebp | 004013E7 | 89 E5 | mov ebp,esp | 004013E9 | 83 EC 18 | sub esp,18 | 004013EC | C7 04 24 65 30 40 00 | mov dword ptr ss:[esp],testcode.403065 | 403065:"Password OK\n " 004013F3 | E8 38 08 00 00 | call <testcode.printf> | 004013F8 | C7 04 24 5F 30 40 00 | mov dword ptr ss:[esp],testcode.40305F | 40305F:"PAUSE" 004013FF | E8 4C 08 00 00 | call <testcode.system> | 00401404 | C9 | leave | 00401405 | C3 | ret |
B#
|
|
« Última modificación: 20 Octubre 2016, 01:53 am por BloodSharp »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ayuda con el Ollydbg
Ingeniería Inversa
|
wscan
|
3
|
2,781
|
25 Febrero 2004, 14:01 pm
por doblecero
|
|
|
ayuda ollydbg
Ingeniería Inversa
|
franki127
|
3
|
3,725
|
22 Mayo 2008, 23:04 pm
por solidcls
|
|
|
Ayuda con el Ollydbg
Ingeniería Inversa
|
deliol
|
6
|
4,712
|
1 Noviembre 2008, 20:57 pm
por Shaddy
|
|
|
Ayuda con el ollydbg
Dudas Generales
|
m4rk0z73
|
2
|
2,698
|
22 Agosto 2010, 04:04 am
por Ariath
|
|
|
Ayuda con Ollydbg
Ingeniería Inversa
|
er_davids
|
1
|
2,097
|
19 Agosto 2010, 15:00 pm
por MCKSys Argentina
|
|