Como poner API IsDebbuggerPresent() en C++!

Iniciado por liurap, 15 Agosto 2008, 22:19 PM

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

liurap

Ola a todos, me ando bastante loco intentando poner la API IsDebuggerPresent() en un code en c++, peo no me sale :S!! He puesto estO;

if (IsDebuggerPresent()==1); // Un pequeño bache ^^
{
MessageBoxA(0,"Eyy!! compadreee!! buen intento; anda, nopeame pa k te deje continuar ;)","Liurap dice: ",MB_                      & MB_ICONEXCLAMATION);
exit(EXIT_SUCCESS);
}

La compilacion da exitosa; peo al ejecutarlo normal, es decir, sin ejecutarlo desde un debugger, me salta el mensaje :S! La cuestion es. . no me deberia de ejecutarlo normal sin un debugger ? y cuando estuviese ejecutando un debugger, tal como puede ser el olly x ej. me saltara el mensaje ??! No se si me entienden; un saludo

- Liu -
Cracking y C++ . . .que poderosiiisima combinacion. .  learning. .

tena

Cita de: liurap en 15 Agosto 2008, 22:19 PM
if (IsDebuggerPresent()==1); // Un pequeño bache ^^

Pusiste un punto y coma despues del if

saludos

liurap

#2
Aiba! :O! Es verdad XDD!! Hay q ver lo q puede cambiar un solo signo.  . jajaja, muxas asias tena no me habia dao cuenta ;) ahora el code funciona a la perfeccion :D

Ahi les dejo el crackme; a ver si me dicen cual es la pass correcta :D

http://rapidshare.com/files/137601522/Crackme_Liu.exe.html

Un saludo
Cracking y C++ . . .que poderosiiisima combinacion. .  learning. .

liurap

Jajaja ahora q me doy cuenta tmb se le puede poner un NOP a la call exit y aki no ha pasado nada jajaj; una nag misericordiosa XDD!

- Liu -
Cracking y C++ . . .que poderosiiisima combinacion. .  learning. .

apuromafo CLS

#4
Cita de: liurap en 15 Agosto 2008, 22:49 PM
Aiba! :O! Es verdad XDD!! Hay q ver lo q puede cambiar un solo signo.  . jajaja, muxas asias tena no me habia dao cuenta ;) ahora el code funciona a la perfeccion :D

Ahi les dejo el crackme; a ver si me dicen cual es la pass correcta :D

http://rapidshare.com/files/137601522/Crackme_Liu.exe.html

Un saludo

el password es  "H4ck3r" sin las comillas

ahora bien vamos lento

la api pues descubre un lugar si esta escrito,
y si esta detectado o no, depende si es un diferente de 0 ,
valor de  1->detectado
valor de 0->no detectado

ahora bien como puede pasarse sin tener que nopearlo el call a exit?

Citar004014C4  |.  85C0          test    eax, eax                         ; |

no es necesario nopear--

cambienlo a
Citar004014C4      33C0          xor     eax, eax
(colocando espacio o assembler)


bueno haciendo el tutorial para resolverlo
bien dije ya el pass
sale lo siguiente al colocarla

Password: H4ck3r

Access Granted :D! Pass:: cooomemel4


Password: cooomemel4

Access Denied :(

porciacaso jeje


Solucion Crackme de liurap

no sabia que habias puesto un crackme
pero demos la solucion, aprovechando que tengo tiempo

pues tenemos la estructura de un c++

Citar00401220 > $  55            push    ebp
00401221   .  89E5          mov     ebp, esp
00401223   .  83EC 08       sub     esp, 8
00401226   .  C70424 010000>mov     dword ptr [esp], 1
0040122D   .  FF15 0C514000 call    dword ptr [<&msvcrt.__set_app_ty>;  msvcrt.__set_app_type
00401233   .  E8 C8FEFFFF   call    00401100

entramos en el call

entramos en un procedimiento que comienza con push ebp
y mas o menos al terminar se ve esto
Citar004011E2  |.  E8 A9000000   call    00401290
004011E7  |.  89C3          mov     ebx, eax                         ; |
004011E9  |.  E8 020A0000   call    <jmp.&msvcrt._cexit>             ; |[msvcrt._cexit
004011EE  |.  891C24        mov     dword ptr [esp], ebx             ; |
004011F1  |.  E8 3A0B0000   call    <jmp.&KERNEL32.ExitProcess>      ; \ExitProcess
004011F6  |>  894424 04     mov     dword ptr [esp+4], eax           ; |
004011FA  |.  8B15 14514000 mov     edx, dword ptr [<&msvcrt._iob>]  ; |msvcrt._iob
00401200  |.  8B42 10       mov     eax, dword ptr [edx+10]          ; |
00401203  |.  890424        mov     dword ptr [esp], eax             ; |

entrando en ese call , estamos en el procedimiento del crackme
claramente para quien no sabia que pasa ahi, pues comenta que hay otra manera
Citar
00401465  |.  C685 DEFEFFFF>mov     byte ptr [ebp-122], 72           ; ||
0040146C  |.  C685 DFFEFFFF>mov     byte ptr [ebp-121], 64           ; ||
00401473  |.  C685 E0FEFFFF>mov     byte ptr [ebp-120], 3A           ; ||
0040147A  |.  C685 E1FEFFFF>mov     byte ptr [ebp-11F], 20           ; ||
00401481  |.  8D8D 58FEFFFF lea     ecx, dword ptr [ebp-1A8]         ; ||
00401487  |.  BA 04304000   mov     edx, 00403004                    ; ||ASCII "Que buscas, cadenas de textos ?? haya otra manera ;) || CRACKME MEDIUM COMPILED BY LIURAP! www.fotolog.com/liurap"
0040148C  |.  B8 73000000   mov     eax, 73                          ; ||
00401491  |.  894424 08     mov     dword ptr [esp+8], eax           ; ||

bueno les explique ayer creo el crackme que habian unos codigos ascii

ahora bien el crackme de ahora requiere que sepan que pasa


sigamos
Citar0040149C  |.  E8 AF070000   call    <jmp.&msvcrt.memcpy>             ; |\memcpy
004014A1  |.  C785 44FEFFFF>mov     dword ptr [ebp-1BC], 17          ; |
004014AB  |.  C785 40FEFFFF>mov     dword ptr [ebp-1C0], 2B          ; |
004014B5  |.  C785 3CFEFFFF>mov     dword ptr [ebp-1C4], 1C          ; |
004014BF  |.  E8 7C080000   call    <jmp.&KERNEL32.IsDebuggerPresent>; |[IsDebuggerPresent
004014C4      85C0          test    eax, eax
004014C6  |.  74 33         je      short 004014FB                   ; |
004014C8  |.  C74424 0C 000>mov     dword ptr [esp+C], 0             ; |
004014D0  |.  C74424 08 773>mov     dword ptr [esp+8], 00403077      ; |ASCII "Liurap dice: "
004014D8  |.  C74424 04 883>mov     dword ptr [esp+4], 00403088      ; |ASCII "Eyy!! compadreee!! buen intento!; anda, nopeame pa k te deje continuar ;)"
004014E0  |.  C70424 000000>mov     dword ptr [esp], 0               ; |
004014E7  |.  E8 24080000   call    <jmp.&USER32.MessageBoxA>        ; \MessageBoxA


pues ahi se muestra que hay un mensaje cuando somos detectados, y pues la forma que podemos evitarla es pues evitando que nos detecte

asi que no le haremos caso y no nopearemos
pues cambiaremos a xor eax,eax obligando al salto a saltar

despues buscamos el mensaje malo

normalmente uno supone algunas cosas
pero en este caso todo se ve aqui

00401692  |.  894424 04     |mov     dword ptr [esp+4], eax          ; |
00401696  |.  C70424 D23040>|mov     dword ptr [esp], 004030D2       ; |ASCII "%c"
0040169D  |.  E8 FE050000   |call    <jmp.&msvcrt.printf>            ; \printf
004016A2  |.  8D85 50FEFFFF |lea     eax, dword ptr [ebp-1B0]
004016A8  |.  FF00          |inc     dword ptr [eax]
004016AA  |.^ EB CC         \jmp     short 00401678
004016AC  |>  C70424 D53040>mov     dword ptr [esp], 004030D5        ; |
004016B3  |.  E8 E8050000   call    <jmp.&msvcrt.printf>             ; \printf
004016B8  |.  C785 4CFEFFFF>mov     dword ptr [ebp-1B4], 0
004016C2  |>  83BD 4CFEFFFF>/cmp     dword ptr [ebp-1B4], 0F         ; |

uno debe ser el chico bueno y otro el malo

claramente el malo tendra mas de 1 salto normalmente

y pues
004016AC  |> \C70424 D53040>mov     dword ptr [esp], 004030D5        ; |


este tiene varios saltos


colocamos un bp en cada cmp     edx, eax     que esta sobre el salto
Citar
00401581  |.  2B85 44FEFFFF sub     eax, dword ptr [ebp-1BC]         ; |5f- 17-> valor
00401587  |.  39C2          cmp     edx, eax                         ; |comparacion entre el 48 y el de nosotros :)
00401589  |.  0F85 1D010000 jnz     004016AC                         ; |



y claramente vemos que 48 es el valor correcto

ahora bien ese 48 representa a la letra H


siguiendo se encontraran con las otras letras

pero primero
eax=00000048
edx=00000061
esta algo asi
cambiamos el valor de edx a 48 para pasar tranquilo
eax=00000048
edx=00000048

seguimos

004015AE  |.  2B85 3CFEFFFF sub     eax, dword ptr [ebp-1C4]         ; |0cf-1c
004015B4  |.  83C0 64       add     eax, 64                          ; |add 64
004015B7  |.  39C1          cmp     ecx, eax                         ; |cmp 34 v/s mio
004015B9  |.  0F85 ED000000 jnz     004016AC                         ; |

ahi sacamos el segundo que es 34

y bueno seguimos hacia abajo hasta completar todo



ahora bien todos esos numeros y valores vienen de una tabla
http://www.ascii.cl/es/codigos-html.htm

bueno saludos y espero le sirva como se hacia :)

bendiciones esta resuelto :-)

liurap

#5
vaya! apuromafo! realmente eres un amo cn el cracking jaja; vaya tiens razon con lo del xor XDD!! well done men ;) asi es lo de access granted pass coooomemel4 era de coña jaaj; la verdadera era H4ck3r XD

En cuanto a lo de IsDebuggerPresent; otras formas x ej.

con un SUB EAX, EAX
ó CMP EAX, EAX

Ambas serian validas tb XD

Cuidat ; Un saludo  :o

- Liu -
Cracking y C++ . . .que poderosiiisima combinacion. .  learning. .

apuromafo CLS

es que isdebug present como bien decia, pues solo verifica que sea asi
falta solo que salte y listo

pero el gran detalle es cuando escribes que haga lo de la api
fs

bueno no explico porque con el tiempo lo aprenden

espero a la proxima coloques de titulo+crackme
porque me puse a leer y veo que pusiste un reto que ni sabia que estaba, o hace tiempo ya hubiera caido

jeje bueno saludos espero te guste el escrito explicatorio de como encontre el serial

:) saludos Apuromafo