SoftIce para Principiantes - Breakpoints Úteis
by HaWK

Onde conseguir o programa:

Aqui mesmo no BRCrackerz, seção Ferramentas Úteis

Pré-Requisitos:

- Conhecimentos basicos de Assembly

Requisitos do Sistema:

- Windows 95 ou Windows 98


Blá-Blá-Blá Inicial

 Este tutorial serve com fins apenas educativos. O autor não assume nenhuma responsabilidade.


COMEÇANDO...





    Bom, agora que o SI já está instalado e configurado, vamos a parte mais importante para crackear programas no SI. Os BREAKPOINTS:

    Os Breakpoints, são necessários, para que você possa ir direto ao ponto que interessa. A rotina de proteção do programa. Se você simplesmente pressionar <CTRL+D> provavelmente vai cair no meio de um módulo do Win9X, sei-lá GDI, USER, etc... E isto não interessa!

    Para ativar um BREAKPOINT, você pode usar: BPX, BPM, BPIO, BPINT (Os mais usados)

    Vai aqui uma relação dos breakpoints mais usados e onde usá-los (Compilado por Aesculapius). Não fui eu que a estruturei, portanto preferi não mudá-la, apenas traduzi.

    Vale lembrar que este são chamadas para programas 16 bits, se o seu programa for em 32bits (a maioria deles), basta colocar um "a" na frente das hamadas. Por exemplo:

    BPX messagebox (16 bits) ou BPX messageboxa (32 bits)

    Para verificar isto, basta checar se os registradores do programa são AX ou EAX, se for EAX o programa é 32 bits, caso contrario é 16 bits. Na dúvida, use 32 bits.

Propósitos Gerais

bpx messagebox
bpx getdlgitemtext
bpx getwindowtext
bpx hmemcpy
bpx showwindow
bpx updatewindow
bmsg xxxx wm_gettext
bmsg xxxx wm_command
bmsg xxxx wm_move
 

Relativos a tempo de execução

bpint 21 if ah==2A (DOS)
bpx getlocaltime
bpx getfiletime
bpx getsystemtime
 

Flag do Registrador (No exemplo EAX)

bpx cs:eip if EAX==0 (SICE 3.x)
 

Flag de memoria (Flag em 0030:000045AA)

bpmb cs:eip rw if 0x30:0x45AA==0 (SICE 3.x)
 

Técnica do "Hear The Echo" (Escute o eco)

bpx 0x30:0x45AA do "d 0x30:0x44BB" (SICE 3.x)
bpx CS:0x66CC do "? EAX" (SICE 3.x)
 

Esquemas de CD-ROM & Discos

bpint 13 if ah==2 (DOS)
bpint 13 if ah==3 (DOS)
bpint 13 if ah==4 (DOS)
bpx GetFileAttributesA
bpx GetFileSize
bpx GetDriveType
bpx GetLastError
bpx ReadFile
bpio -h (Your CD-ROM Port Address) R
 

Hardlock's
bpio -h 278 R
bpio -h 378 R
 

Arquivos com registros

bpint 21 if ah==3dh (DOS)
bpint 31 if ah==3fh (DOS)
bpint 21 if ah==3dh (DOS)
bpx ReadFileA
bpx CreateFileA
 

Entrada via teclado

bpint 16 if ah==0 (DOS)
bpint 21 if ah==0xA (DOS)





    Nos próximos tutoriais que seguirão, usando o SI, você vai ver alguns deles sendo usados... Portanto, se você ainda está meio por fora, não se preocupe! Nem tudo está perdido < Ainda ;-) >

    Exemplo BEM SIMPLES:

    - Tente rodar um programa e entrar onde ele pede o Nome/#Registro.
    - Entre qualquer nome e um número de registro qualquer (Por exemplo: Nome: HaWK / # Série: 1234567890)
    - Não pressione OK ou dê <ENTER> ainda.
    - Pressione CTRL+D para entrar no SoftIce.
    - Digite: BPX GETDLGITEMTEXTA (ou BPX GETDLGITEMTEXT)
    - Digite: BPX GETWINDOWTEXTA (ou BPX GETWINDOWTEXT)
    - Saia do SI, pressionando F5 ou X <ENTER>
    - Pressione <ENTER> no programa.
    - Pressione F12 para retornar a chamada do programa, pressionando F8 você faz um STEP (Passo a passo) ou F10 (Trace - Tipo passo a passo mas não vai executar passo a passo dentro dos CALL's).
    - Se você incluir BPX MESSAGEBOXA (ou BPX MESSAGEBOX). Aí o programa vai parar, também na mensagem de erro de Senha Inválida, bla, bla, bla...
 
 


CONCLUSÃO



    Breakpoints, são sombra de dúvidas, uma das funções mais importantes do SI, você vai usá-los sempre que estiver debugando programas.