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
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