Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - majerisa

#1
Ingeniería Inversa / Re: Ayuda con ollydbg
20 Octubre 2016, 20:57 PM
Muchísimas gracias por tu explicación.
#2
Ingeniería Inversa / Re: Ayuda con ollydbg
20 Octubre 2016, 09:55 AM
Muchas gracias por vuestras aportaciones, estoy intentando leer algo y entender vuestras explicaciones, soy un poco profano en la materia.

BloodSharp, si no he entendido mal la solución del CALL no sería viable enotnces?

MCKSys, la solucion que me comentas de activar el flag para que pase la igualdad (entiendo que  la idea es hacer que esta igualdad siempre se cumple (strcmp(password, "PARIS")==0)) me parece buena idea, lo que no entiendo es como "NOPear esa instrucción".


Nuevamente muchas gracias por vuestra ayuda de verdad

#3
Ingeniería Inversa / Re: Ayuda con ollydbg
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

Cita de: BloodSharp en 19 Octubre 2016, 07:36 AM
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 (asm) [Seleccionar]
00401393           75 0A          JNZ SHORT pac1.0040139F
por
Código (asm) [Seleccionar]
call 004013E6


B#


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



Cita de: BloodSharp en 19 Octubre 2016, 07:40 AM
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.

Cita de: majerisa en 19 Octubre 2016, 07:42 AM
Ya veo, entonces no puedo usar esa solución, tiene que pasar por la función passwordOK().

MOD: No hacer triple post.
#4
Ingeniería Inversa / Re: Ayuda con ollydbg
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??
#5
Ingeniería Inversa / Re: Ayuda con ollydbg
19 Octubre 2016, 07:05 AM
Muchísimas gracias, podríais comentarme que hace el cambio que me comentáis?
#6
Ingeniería Inversa / Ayuda con ollydbg
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