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.
Craqueando Programas
Postado por
Gabriel Moura
domingo, 28 de setembro de 2008
Marcadores: Tutoriais
0 comentários:
Postar um comentário