Know-How e implicações jurídicas
1-Introdução:
Os programas comerciais possuem distribuições experimentais, destinadas ao teste
dos consumidores e, por isso, tem limitações, seja nas funções oferecidas, seja no período
de tempo oferecido para usa-los gratuitamente. Crackear um programa é retirar-lhe a
limitação de uso. Quando a limitação diz respeito à funcionalidade, e ele não possui a
opção de registro para uso completo, torna-se pouco provável o sucesso no crackeio.
Existem várias formas de crackear, mas antes de qualquer coisa é necessário que
classifiquemos o programa a ser crackeado segundo a sua limitação em uma das categorias
abaixo:
a) Programa Cinderela: é aquele que só funciona durante um certo período de tempo
(exemplo; 15 dias, um mês, etc.) contando a partir da data de instalação.
b) Programa Best-Before: funciona até uma data preestabelecida, independente da
data de instalação. Limitações deste gênero são as prediletas das empresas como a
Microsoft, a Simantec ou a Corel;
c) Programas Countdown: caracteriza-se pela contagem regressiva, o executável
funciona apenas por algumas horas, minutos ou segundos, Limitações deste tipo são
puoco comuns, mas por serem posíveis, nada mais justo que relacionarmos aqui.
d) Programa Quiver: tem seu funcionamento limitado pelo número de execuções.
Não se trata de uma proteção temporal, mas seu esquema de proteção se parece
muito com os dos três tipos anteriores.
2-Retirando a proteção Temporal:
Estudaremos agora como funciona uma proteção temporal e passaremos à análise de
como retirá-la. Vale salientar que a função deste artigo é meramente científica. Levar ao
conhecimento público a forma pela qual se dá o crackeio de programas é promover,
ainda que de maneira forçosa, o desenvolvimento dos métodos de proteção dos
softwares, pois só nos é dado desenvolver a solução de um problema quando o
conhecemos.
Os programadores lançam produtos completos, porém com algumas limitações.
Uma delas é a data de caducidade, como que uma data de “validade” do programa,
passada a qual, ele não funciona mais. A razão é simples: inundando o mercado com
cópias com limitações de tempo, cada vez mais usuários se acostumarão com o
software, e para muitos ele se mostrará indispensável, razão pela qual o comprarão
independentemente do preço.
Críticas à parte, pensemos sobre como se dá o funcionamento desta limitação:
instalaremos um programa do tipo Cinderela (evaluation) com limitação de uso de trinta
dias, no 1º de janeiro de 2002; portanto a partir do dia 30 de janeiro do mesmo ano o
programa não funcionará mais (o primeiro dia é, via de regra, incluído na contagem).
Quando executado, o programa confere se a data atual é menor que a de caducidade; em
caso positivo, ele é executado normalmente; caso contrário, exibirá a tão conhecida
mensagem “período de avaliação terminado, registre o programa para continuar a usalo”.
Assim sendo, uma coisa é certa: o programa deve guardar pelo menos uma das
seguintes informações: a data de instalação, o período de avaliação, ou ainda, a data de
caducidade. Mais freqüente é o registro da data de caducidade; o programa, na
instalação, calcula a data de caducidade e a grava em algum lugar, normalmente no
Registro do Windows com qualquer nome dificilmente relacionado ao programa sob
avaliação. Também pode ser guardada no win.ini, no system.ini ou em qualquer outro
arquivo, oculto ou não, criptografado ou não. Mas existe uma forma diferente e mais
complexa de se registrar a data de caducidade do programa, gravando-a dentro do
próprio programa(um exemplo é o programa Hotmetal 4.0, cuja avaliação é do tipo
best-before, funcionando apenas até 31/12/97).
Já sabemos onde procurar a data de caducidade, mas onde o programa busca a data
atual? Normalmente, ele captura a data do próprio relógio do windows, mediante as
chamadas getlocaltime ou getsystemtime, mas a data atual também pode ser verificada
conferindo arquivos que são freqüentemente modificadas pelo sistema, tal qual ocorre
com o system date o user.dat(registro) ou, ainda, o bootlog.txt,
Sabendo disso agora o programa pode ser atacado. Para isso, quatro são as técnicas
clássicas:
a) Modificar a contagem da data de caducidade: em vez de adicionar 30 dias à data
de instalação do programa, fazemo-lo somar anos, décadas ou até séculos, mas esta
modalidade não é fácil, pois trabalha com o próprio executável, e modificar um
executável é uma operação cirúrgica;
b) Modificar a data de caducidade: se a data é calculada na instalação,e não a cada
execução do programa, podemos aumenta-la em vários decênios(desde que também
não contenha uma limitação do tipo best-before, como ocorre com a Enciclopédia
Encarta 2000).
c) Antecipar a caduquez do programa: faz-se adiantando o relógio do windows;
com isso, verifica-se-ão as mensagens exibidas pelo programa uma vez vencido o
prazo de uso. Uma vez conhecidas estas mensagens, procuraremos a respectiva
chamada no programa e podemos desviar seu fluxo.
d) Ataque simultâneo as datas de atal e de caducidade: Faz com que sempre
estejamos no período de avaliação.
Pergunta bastante freqüente entre os usuários leigos; por que todo esse problema
não se resolve atrasando o relógio do windows? Os programadores evitam isso de duas
formas; Ou fazem uma marca em algum arquivo mostrando que o período de avaliação
já terminou (assim, ao ser executado, o programa, antes de conferir a data checa se esta
marca existe), ou registram a data da última execução do programa.(desta forma, antes
de conferir se ainda está no período de avaliação, o programa checa se a data da última
execução é anterior a da execução atual), resumindo, mais problemas a serem
verificados.
Muitas vezes, o programa tem a opção de terminar com a limitação temporal de uso
mediante o registro feito com a digitação de uma seqüência de caracteres referentes,
normalmente ao nome de usuário, nome da empresa e código de ativação.
Para verificarmos se o programa contém uma proteção temporal, pode se usar o
Softice com a instrução bpx getlocaltime. No entanto usaremos uma técnica mais
simples e nos valeremos do programa cobaia.exe, distribuído pela revista geek, # 13(
quem não tiver o programa, é só mandar um e-mail pedindo). Este programa é ideal
para exemplificarmos como se pode achar o código de série no executável, desviar o
fluxo do programa nas rotinas de verificação e construir patches (programas que
alteram apenas uma parte do programa, principalmente as rotinas relacionadas às
limitações temporais), MAS ATENÇÂO: O programa cobaia.exe, foi utilizado, antes
de tudo, porque crackear programas comerciais é crime. Como já dissemos, este
texto serve apenas para os programadores, sabendo das técnicas crackers, prestem
maior atenção na programação das rotinas de verificação e limitação de uso de seus
softwares. Apenas a título de conhecimento, consultemos a Lei9.609, de 19 de fevereiro
de 1998;
Art 12; Violar direitos de autor de programas de computador. Pena - detenção de 6
meses a 2 anos ou multa.
Art 14, § 5; Será responsabilizado por perdas e danos aquele que requerer e
promover as medidas previstas neste e nos Arts 12 e 13, agindo de má-fé ou por espírito
de emulação, capricho ou erro grosseiro, nos termos dos Arts; 16, 17 e 18 do Código de
processo Civil.
3-Crackeando o Programa Cobaia.exe:
3.1 – Extraindo o Código de ativação do programa;
Material Necessário: Cobaia.exe (obviamente); Hackman Editor(disponível no
CD-ROM) ou qualquer outro editor Hexadecimal.
Como o cobaia.exe requer o registro, nos usaremos o método reverso, ou seja,
inseriremos qualquer seqüência de caracteres no campo de registro, pressionaremos o
botão “Registrar” e conferiremos se há mensagem indicando que o código de ativação não
confere. Ela existe e é “Senha-Errada”.
Feito isso, abriremos o programa cobaia.exe com um editor hexadecimal e
procuraremos por esta string [“Senha-Errada”] no programa. Utilizaremos como referência
o Hackman Editor. Porque está disponível no CD-ROM da revista, mas nada impede que
você utilize o editor de sua preferência para isso, copie o programa cobaia.exe para o seu
computador, execute o Hackman Editor e pressione ctrl+o [arquivo/abrir.../abrir arquivo...],
localize o cobaia.exe e clique
ASCII [um dos 5 botões situados na parte inferior da caixa de diálogo], pois procuraremos
por uma seqüência de caracteres ASCII, e digite “Senha-Errada” [sem aspas] no campo de
procura. Então clique em localizar e VOILA!
Como podemos ver, a seqüência “Senha-Errada” vem depois de duas outras
referências bastante interessantes; “GEEK
conferir se a seqüência GEEK 13 é o código de ativação.
3.2 - Desativando o Fluxo de Verificação no Programa;
Material Necessário; Cobaia.exe(mais uma vez, obviamente) e o desassembler e
debugger w32dasm [se você não tiver, mande um e-mail pra gente].
Abra o w32dasm, vá à opção disassembler..., Escolha Open File to Disassemble...,
Procure pelo programa cobaia.exe e clique
processo de abertura do arquivo termine. Você verá uma tela parecida com a da página
seguinte.
Não se assuste com a interface. Vá ao menu Refs e escolha String Data References.
Surgirá uma relação com as strings contidas no programa. Façamos de conta que ainda
não sabemos qual é a chave do programa. Então percorreremos a lista à procura de
“Senha-Errada”, encontrá-la-emos e clicaremos com o mouse por duas vezes:
Feche a janela com a lista de strings, e você ficará nesta tela;
Rolando a tela um pouco para cima, você verá a indicação de duas strings bastante
sugestivas: “GEEK
chave do produto, Voilá. Mas isto não é o suficiente, você quer fazer um crack, estudar
como é feita a verificação do código-chave e quebrar esta verificação desviando o fluxo
normal do programa. Para isso, é necessário um conhecimento prévio em assembler.
Analisando o código em assembler, verificamos que a indicação “Senha_incorreta”
[0045766D] é chamada pela rotina que contém a string “GEEK-
mediante o comando jne 0045776D, e que é responsável por pular para a indicação de
“Senha-Errada”, caso a senha digitada não seja “GEEK-
responsável pelo salto caso uma condição seja atendida – no caso, a senha digitada ser
diferente de “GEEK-
está a rotina jne 00457659 [pois ela será modificada] e também o endereço ao qual irá
redireciona-la; 0045765B [início da rotina responsável pelo “parabéns”]. Então, acesse
o menu Debug e escolha Load process. Então clique no botão Go To Adress e digite o
endereço ao qual iremos [00457659]. Feito isso, clique
Instruction Below. Digitaremos a instrução alterada: jne 0045765B [assim, ainda que a
chave digitada seja diferente de “GEEK-
esta instrução, dê um Enter para que ela seja incorporada e clique
pedido que seja confirmada a mudança do código: dê um OK e clique em CLOSE: Será
pedido, novamente para você confirmar a ação: dê OK novamente. Agora é só clicar em
RUN ou pressionar F9 até que o programa seja totalmente aberto [a cada vez que você
pressione F9 ou RUN, é executada apenas uma parte do programa].Quando isto
acontecer, tente digitar qualquer coisa [ou nada], clique
crackeou o programa cobaia:
Para sair, feche o COBAIA e clique em “CLOSE”, confirme a saída e feche o
w32dasm, Se quiser, pode salvar o código assembler do cobaia.exe.
3.3 – Criando um patch para “brincar” com o programa.
Material Necessário; Hackman Editor[ou qualquer Editor Hexadecimal de sua
preferência].Patch Creation Wiizard [se Não tiver mande um e-mail pra gente] e
Cobaia .exe[obviamente].
Abra o cobaia.exe no Hackman Editor e procure pela string “Senha-
Incorreta”[conforma descrito no item 3.1].Então copie a tradução desta srting para
Hexadecimal. Para fazer isso, basta verificar que o Hackman Editor é composto de duas
telas; a da direita tem os caracteres em ASCII [é nela que vemos a referência para
“Senha-Incorreta”], enquanto a da esquerda em estes mesmos caracteres, só que em
linguagem hexadecimal[53 65 6E 68 61
indicação em hexadecimal da palavra “Parabéns”[50 61 72 61 62 65 6E 73].
Com estes dados em mão, abra o Patch Creation Wizard, clique em Next, escolha
Seek and Destroy Patch,Clique em Next novamente, preencha os campos You
Handle[aparecerá como “Nome do Autor”],Target Title [objetivo do crack] e, Target
File, localize o programa Cobaia.exe: Feito isso, clique em Next novamente, então
clique
composta por 12 indicações em hexadecimal [cada indicação é composta por duas
casas]. Em Source, digite 53 65 6E 68 61
50 61 72 61 62 65 6E 73 20 20 20 20 [código da palavra “parabéns” seguido por quatro
espaços, o que na escrita hexadecimal, equivale ao Nº 20. Isso ´e feito porque a
substituição só ocorre com strings do mesmo tamanho e, neste caso, “Senha-
Incorreta”tem quatro letras a mais que “Parabéns”, devendo o espaço que sobrou ser
completado com espaços vazios – 20]. Finalmente,
1 1 1 1 1 [pois todas as letras serão alteradas – cada Nº 1 se relaciona a uma referência
hexadecimal. Caso houvesse alguma referência aproveitável, ou seja, igual em ambas as
Strings localizada na mesma posição, colocaríamos o Nº 0 para esta posição, indicando
que ela não deve ser alterada]. Feito isto, dê ADD e clique
no mesmo diretórioi em que se encontra o executável Crackeado; certifique-se que o
Cobaia.exe não está marcado com o atributo Somente Leitura e execute o Patch, Se
tudo foi feito corretamente, o Patch indicará que modificou um setor programa. Então
execute o Cobaia e digite qualquer chave para testa-lo: VOILÁ, o cobaia agora acatará
qualquer coisa.
Vale salientar, todavia que, o que nós fizemos foi uma simples alteração da
mensagem exibida pelo programa, pois a rotina de verificação é a mesma, e ele
continua entendendo que a chave digitada foi diferente da esperada, ou seja, “GEEK –
debulhar o código desassemblado para dele extrair a lógica de comparação entre a
chave digitada e o nome de usuário [caso o programa, além da chave, exija um nome de
usuário]; no caso do Cobaia.exe, bastaria que salvássemos uma cópia com aquela
mudança de fluxo efetuada, e daí gerássemos um Patch com a diferença entre ambos os
executáveis, pois, desviando o fluxo, o programa, ele executaria a rotina de liberação
do Software, destravando-o para uso ilimitado.
0 comentários:
Postar um comentário