Mais um blog inútil.

Janeiro 17, 2008

How to crack XChat 2.8.5e – Part I

Filed under: Cracking — falso @ 20:56

Já há não sei quantos dias que me andam a chatear para fazer um documento a explicar como se cracka o xcrap para Windows, hoje decidi começar então com esta saga... sim vai ser uma saga á-lá-gamito porque assim da mais visitas, faz o pessoal voltar cá pra ver a continuação! Here we go...

1º passar a data uns meses pra frente!

Começa-se sempre por ver que tipo de protecção é que o nosso alvo tem. O XCrap é time trial, ou seja, passados 30 dias depois de o instalar ele mostra-nos esta janelinha, que so tem um botãozinho que abre o browser para pagarmos pelo programa, ou um botão de quit.

Expired

Depois deste passo, costumo ver sempre que ficheiros e chaves no registry é que o programa acede, só mesmo naquela de certificar. Então abro o RegMon e meto a filtrar por xchat* só pra ver se ele guarda a data de instalação do registry... E acho ali aquela key com aquele numero meio estranho "0005874772a3b7", dou double click no regmon nessa key, e depois apago-a do registry.

RegMon

Corro o xcrap de novo... e aparece o mesmo dialog! Hum.... mas espera, não é bem o mesmo... Reparem bem ali no (A) no title, e no outro dialog era (B), portanto parece que há mais do que um check. Voltei ao registry tambem e ele criou la de novo uma nova key com o valor "00047047b73c29".

Expired 2

Apaguei de novo a key, e desta vez pus o FileMon a filtrar por xchat*, e achei o seguinte:

FileMon

Parece que o gajo quando não tem aquela key no registry, vai à procura do "xchat.lic" que deve ser supostamente o ficheiro de licença para registar isto. Então já vi que desta forma não me safo, vai se ter de utilizar medidas mais drásticas!

Então eu todo chateado, vou abrir o xcrap no IDA, mas, algo se passa! O executavel ta comprimido com uma versão do UPX muita antiga que não dá para unpackar estaticamente. Segui este tutorial para unpackar o exe, e depois de fazer tudo o que la diz, fico com um xcrap.exe (está aqui para quem não conseguiu fazer este passo) unpackado. Agora sim já se pode meter mãos à obra.

Então, abro o xcrap.exe no IDA e deixo o gajo analisar o ficheiro todo. Right-click no IDA-View A -> Text View e vou para o inicio do ficheiro. Alt+T para procurar por texto no ficheiro e procuro por "expired", e venho parar aqui:

IDA Expired

Olhando para isto, vê-se mais ou menos que isto é a função que mostra a janela a dizer que já expirou, portanto já chegamos a algum lado. Então vamos ver onde é que esta função é chamada, sobe-se um bocado, ate acharmos o inicio da função que neste caso é onde diz "sub_401000" mais exactamente no endereço 00401000. Clicka-se no "sub_401000" e carrega-se no x para se saber todos os sítios onde esta função é chamada.

IDA References

Depois de olhar para todas as chamadas a esta função, a "sub_4018CD" parece me ter muitas chamadas a coisas de encriptação e tal, que provavelmente é aqui que ele ve se tem um xchat.lic valido ou algo do estilo. Então nesse call ao 40100 vejo que jumps condicionais vão parar ao loc_401D87.

00401916 cmp     [ebp+74h+arg_0], 0 ; Compare Two Operands
0040191A jnz     short loc_401936 ; Jump if Not Zero (ZF=0)

e se ali o ZF nao for 0 vamos parar a ...

0040191C call    ds:_errno       ; Indirect Call Near Procedure
00401922 xor     ecx, ecx        ; Logical Exclusive OR
00401924 cmp     dword ptr [eax], 2 ; Compare Two Operands
00401927 setnz   cl              ; Set Byte if Not Zero (ZF=0)
0040192A inc     ecx             ; Increment by 1
0040192B mov     ds:dword_45F7B8, ecx
00401931 jmp     loc_401D87      ; Jump

E faz um jump para o nosso badboy (endereço 401D87), portanto vamos meter ali um breakpoint no jzn, f2 na linha e f9 para começar a fazer debug, quando ele breaka no breakpoint vai-se à janelinha dos registos do IDA e altera-se o valor do ZF e f9 de novo. Parece que não correu correu bem, o xcrap não abre, o processo ta a correr mas não há nada pra ninguém.

Vamos tentar de outra maneira, vamos ver onde esta função "sub_4018CD" é chamada.

Breakpoint

Hum.. é chamada nos dois casos, estranho, vamos tentar na mesma, f2 no jle e f9, quando breakpointar troca-se o valor de SF e f9 de novo e faila com um Expired (F)... MEDO! Parece que existem muitas mais protecções então. Bleh.

Então não é so na "sub_4018CD" que o dialog é chamado. Deixa-se estes dois breakpoints ainda, e vamos voltar a ver os sítios onde o nosso dialogbox é chamado. Vamos agora ver a função "sub_408454".

UPX0:0040850F                 cmp     eax, 1
UPX0:00408512                 jl      short loc_40851B
UPX0:00408514                 cmp     eax, 28E074h
UPX0:00408519                 jle     short loc_4084D1
UPX0:0040851B
UPX0:0040851B loc_40851B:                             ; CODE XREF: sub_408454+BEj
UPX0:0040851B                 jmp     sub_401000

Então temos ali aquele jl, que salta para onde nao queremos ir, que é o jmp. E temos aquele jle que se não saltar para fora, também vamos parar ao jmp, portanto metemos breakpoint no jl e no jle. Ah, aconselharam-me a criar um xchat.lic portanto fiz um na directoria do xcrap com o seguinte conteudo.

OPENSORESISDEADOPENSORESISDEADOPENSORESISDEAD
OPENSORESISDEADOPENSORESISDEADOPENSORESISDEAD
OPENSORESISDEADOPENSORESISDEADOPENSORESISDEAD
OPENSORESISDEADOPENSORESISDEADOPENSORESISDEAD
OPENSORESISDEADOPENSORESISDEADOPENSORESISDEAD

Então agora corremos de novo, e vamos parar de novo no endereço 00401FEC, o jle do screenshot de há bocado. Troca-se o valor de SF de novo e f9. Agora paramos no jl, mas não ta a saltar portanto não se mexe. Mas no jle a seguir ele vai parar ao jmp, portanto trocamos o valor de SF e f9 de novo e.... Funciona!!

Portanto o que queremos fazer basicamente é fazer com que o jle do endereço "401FEC" não seja corrido portanto vamos substituir essa instrução no ficheiro, no IDA vai-se ao endereço, e no status ele mostra qual é o offset dessa instrução no ficheiro, é "1FEC". Num hexeditor à vossa escolha, abrimos o ficheiros e vamos ao endereço "1FEC", e troca se o "7E 0F" por "90 90", 90 é a instrução de NOP.

Next, vamos ao endereço "408512" no IDA e vemos tambem o offset no ficheiro, que é  "8512", no editor vamos a esse offset e trocamos tambem o "7C 07" por "90 90".

E agora o ultimo no endereço "408519" o jle, é um jump condicional, e nos queremos que seja sempre corrido, o offset no disco é "8519", e vamos trocar o "7E" que é jle por "EB" que é jmp. Save and quit, problem_solved. Xcrap is now cracked!

O programa tem mais uns checks, por exemplo, quando se recebe um dcc, mas isso provavelmente são outros calls a esta função como estas duas que patchamos. Na próxima parte deste post talvez explique como crackar também essa parte.

Saudações Gamitianas para todos!

9 comentários a “How to crack XChat 2.8.5e – Part I”

  1. luminoso diz:

    hot. tou todo molhado.
    vou-me limpar

  2. luminoso diz:

    back. bem, agora durante a proxima semana vou fazer essa çida toda se sou capaz ao menos repetir.
    e depois, com bué de fé e uma velinha acessa para mim pelo gamito vou fazer essa merda do dcc.

  3. s3phiroth diz:

    Ouvi dizer que gostavas de mudkips. É verdade ?

  4. sadik diz:

    alta tesao de mijo que me deu

  5. seyon diz:

    épa! lindo!! acho que vou fazer isto tudo..ai..sinto-me todo gamito depois de ter lido isto

  6. karpa diz:

    só li a receita mas não vou fazer o bolo pq nem sequer uso o xcrap.exe
    agora importante mesmo era fazer uma distro 'à la gamito' baseada nesta técnica hem?
    warm regards :P

  7. v diz:

    Epá...

    Eu não acredito que exista alguém interessado em usar o XChat em linux. Só se for gente que nunca usou o mIRC!

  8. luminoso diz:

    quem nunca usou o mirc nao tem interesse no xchat em linux!?!?!?!?

  9. jolas diz:

    Parece-me que o v se estava a referir ao Windows.

Leave a Reply for luminoso

widgeon
widgeon
widgeon
widgeon