Escolar Documentos
Profissional Documentos
Cultura Documentos
--------------------------------------------------------------------------------
Anlise Esttica do Cdigo - Parsing
Na Anlise Esttica do Cdigo procura-se:
--------------------------------------------------------------------------------
Anlise Dinmica do Cdigo - Debugging
Na Anlise Dinmica executa-se o programa e se monitora os valores das
variveis, quais funes so chamadas, etc. As ferramentas utilizadas so
denominadas de "Debuggers", sendo o mais conhecido deles o SoftIce da
Numega.
--------------------------------------------------------------------------------
Dados
Quando um sistema possuir um banco de dados, este pode servir de fonte de
informao sobre o prprio sistema.
--------------------------------------------------------------------------------
Documentao
Documentao tudo o que no est usado pelo computador para fazer
funcionar o sistema. Podem ser textos, diagramas, helps, etc.
--------------------------------------------------------------------------------
Outras fontes de informao
A linguagem de programao que foi utilizada, o sistema operacional, o tipo de
processador, etc.
1. Criao de arquivos-fonte
--------------------------------------------------------------------------------
2. Compilao de arquivos-fonte
--------------------------------------------------------------------------------
3. Linkedio de arquivos-objeto
--------------------------------------------------------------------------------
4. Execuo do programa
--------------------------------------------------------------------------------
5. Teste de Segurana
--------------------------------------------------------------------------------
Dead Listing
Dead Listing Dead listing uma listagem desassemblada de um programa em texto
raso e que, na forma de Linguagem Assembly, descreve cada instruo que o
programa possa usar ou executar. Geralmente no se d a devida importncia a
uma dead listing, seja por no dominar o Assembly, seja por considerar que a
anlise esttica do cdigo no leva aos resultados esperados. Ledo engano...
Conhecimentos bsicos de Assembly so suficientes e os resultados surpreendentes
!
FORMATO PE
1. O Formato PE
Imagine o formato PE como sendo simplesmente um padro de armazenamento
de dados que o Windows entenda. So regras para guardar "cada coisa em seu
lugar" de modo que o sistema possa ach-las quando necessrio. Os programas
possuem cdigo, dados inicializados, dados no inicializados, etc, etc, etc. Tudo
deve ser guardado de acordo com o modelo estabelecido e o resultado uma
imensa fileira de bytes. O objetivo deste texto (e dos subsequentes) ir
desvendando cada pedao dessa tripa de bytes.
A DLL "imagehelp.dll" tambm poder ser til. Ela faz parte do windows NT,
porm a documentao escassa. Algumas de suas funes so descritas no
"Developer Network".
Depois segue o cabealho do arquivo (file header) no formato COFF que indica
em qual mquina o executvel deve rodar, o nmero de sees que contm, a
hora em que foi linkado, se um executvel ou uma DLL e assim por diante.
(Neste contexto, a diferena entre um executvel e uma DLL a seguinte: uma
DLL no pode ser iniciada, somente pode ser utilizada por outro binrio e um
binrio no pode ser linkado a um executvel).
J COMPLICOU ?
A coisa j complicou? Est querendo desistir por aqui? No se apavore. Cada
um dos tpicos ser explicado em detalhes e, se voc tiver noes de assembly,
vai ter muita coisa boa com que se divertir...
Se o pavor bateu, tente pelo menos o prximo texto - quem sabe voc no
desiste to fcil. Se voc est tranquilo, basta seguir a sequncia.
Cabealho MZ do DOS
Os primeiros dois bytes de qualquer executvel em formato PE constituem a
assinatura do DOS. Voc sabe que dois bytes formam uma palavra (WORD). O
word da assinatura SEMPRE a sequncia "MZ", ou seja, 4D 5A em
hexadecimal. Portanto, pode-se reconhecer o fragmento do DOS pela sua
assinatura. Este reconhecimento chamado de validao do cabealho DOS.
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F ASCII
0000 0000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZ............
0000 0010 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 .......@.......
Agora d uma olhada nos bytes das posies 18 a 1B, marcados em verde. 4
bytes so 2 word, e 2 word so um DWORD. Lemos 40 00 00 00. Acontece que
os processadores Intel (e compatveis) guardam os bytes em ordem inversa.
Ento, lendo da direita para a esquerda, o valor encontrado 0000 0040. Este
valor indica o quanto devemos nos deslocar (offset) para encontrar o stub do
DOS.
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F ASCII
0000 0000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZ............
0000 0010 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 .......@.......
0000 0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000 0030 00 00 00 00 00 00 00 00 00 00 00 00 C0 00 00 00 ...............
0000 0040 0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68 .....!Th
0000 0050 69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F is program canno
0000 0060 74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20 t be run in DOS
0000 0070 6D 6F 64 65 2E 0D 0D 0A 24 00 00 00 00 00 00 00 mode....$.......
A assinatura PE
Seguindo a segunda pista, encontramos a assinatura PE que indica o incio do
cabealho do arquivo. Pressupem-se que todo arquivo que contenha uma
assinatura PE seja um arquivo PE vlido - pelo menos o Windows "pensa"
assim.
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F ASCII
0000 0000 4D 5A 90 00 03 00 00 00 04 00 00 00 FF FF 00 00 MZ............
0000 0010 B8 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 .......@.......
0000 0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000 0030 00 00 00 00 00 00 00 00 00 00 00 00 C0 00 00 00 ...............
0000 0040 0E 1F BA 0E 00 B4 09 CD 21 B8 01 4C CD 21 54 68 .....!Th
0000 0050 69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F is program canno
0000 0060 74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20 t be run in DOS
0000 0070 6D 6F 64 65 2E 0D 0D 0A 24 00 00 00 00 00 00 00 mode....$.......
0000 0080 E3 E2 11 DB A7 83 7F 88 A7 83 7F 88 A7 83 7F 88
....
0000 0090 A7 83 7F 88 B4 83 7f 88 5B A3 6D 88 A6 83 7F 88
..[m.
0000 00A0 60 85 79 88 A6 83 7F 88 52 69 63 68 A7 83 7F 88
`y.Rich.
0000 00B0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00 PE..L...yxU<....
Para tirar a cisma, vamos usar nosso visualizador on line para dar uma olhada
num executvel que um velho conhecido: o bloco de notas (notepad.exe). O
visualizador um objeto flash. Caso seu browser no esteja habilitado para
rodar flash, habilite-o. Se voc no tiver o plugin do flash instalado, faa o
download na Macromedia.
4. Cabealho do Arquivo
Para obter o IMAGE_FILE_HEADER preciso validar o "MZ" do cabealho do DOS
(os primeiros 2 bytes), depois encontrar o membro 'e_lfanew' do cabealho do
fragmento do DOS (offset 3C) e avanar o nmero indicado de bytes a partir do
incio do arquivo. Resumindo: na posio 003C encontra-se o 'e_lfanew' cujo valor,
de 32 bits, nos indica a posio do incio do cabealho do arquivo, ou seja, a
IMAGE_NT_SIGNATURE, cujo valor sempre 00004550 (veja no texto anterior se
tiver dvidas).
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
...
0000 00C0 50 45 00 00 4C 01
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
...
0000 00C0 50 45 00 00 4C 01 04 00
OBS: alguns linkers costumam atribuir valores absurdos ao carimbo, fora dos
padres time_t descritos acima.
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
...
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
...
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
0000 00D0 00 00 00 00
4f. SizeOfOptionalHeader
O "SizeOfOptionalHeader" (tamanho do cabealho opcional), de 16 bits,
simplesmente o tamanho do IMAGE_OPTIONAL_HEADER. Pode ser utilizado para
verificar se a estrutura do arquivo PE est correta. No nosso exemplo, o tamanho
do cabealho opcional 224 (E000 invertido = 00E0 hexa = 224 decimal).
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
...
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
0000 00D0 00 00 00 00 E0 00
4g. Caractersticas
"Characteristics" (caractersticas) tem 16 bits e consiste num conjunto de flags, a
maioria vlida apenas para arquivos objeto e bibliotecas:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
...
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
0000 00D0 00 00 00 00 E0 00 0F 01
Hexa 01 0F
Binrio 0 0 0 0 0 0 0 1 0 0 0 0 1 1 1 1
Bits 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Agora, de posse dos bits, podemos analisar a informao transmitida por cada um
deles:
Deste modo, para localizar um bloco de informaes num arquivo PE para um RVA
especfico, h a necessidade de se calcular os deslocamentos (offsets) como se o
arquivo estivesse mapeado porm, saltar de acordo com os deslocamentos do
arquivo. Como exemplo, suponha que voc saiba que a execuo se inicia no RVA
0x1560 e pretende desassemblar o cdigo a partir deste ponto. Para achar o
endereo no arquivo (disco), voc precisar descobrir que as sees na RAM esto
alinhadas em 4096 bytes, que a seo ".code" comea no RVA 0x1000 da RAM e
tem o comprimento de 16384 bytes. S ento voc pode determinar que o RVA
0x1560 est deslocado (offset) 0x560 nesta seo. Agora, verificando tambm que
as sees do arquivo em disco esto alinhadas no limite de 512 bytes e que a seo
".code" comea no deslocamento 0x800, com alguns clculos, torna-se possvel
localizar o incio da execuo em disco: 0x800 + 0x560 = 0xD60.
5. Cabealho Opcional
Imediatamente aps o cabealho do arquivo vem o cabealho opcional que, apesar
do nome, est sempre presente. Este cabealho contm informaes de como o
arquivo PE deve ser tratado.
5a. Magic
5b. MajorLinkerVersion e MinorLinkerVersion
5c. Tamanho do Cdigo, Segmento de Dados e Segmento BSS
5d. AddressOfEntryPoint - O Ponto de Entrada do Cdigo do Executvel
5e. Base do Cdigo e Base dos Dados
5f. Base da Imagem
5g. Alinhamento
5h. Verso do Sistema Operacional
5i. Verso do Binrio
5j. Verso do Subsistema
5k. Verso do Win32
5l. Tamanho da Imagem
5m. Tamanho dos Cabealhos
5n. CheckSum
5o. Subsistema NT
5p. Caractersticas de DLL
5q. Tamanho da Reserva de Pilha (StackReserve)
5r. Loader Flags
5s. Nmero e Tamanho dos RVA
5a. Magic
O primeiro word de 16 bits do cabealho opcional o 'Magic'. Em todos os arquivos
PE que analisei at hoje, o valor encontrado sempre foi 010B.
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
0000 00D0 00 00 00 00 E0 00 0F 01 0B 01
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
0000 00D0 00 00 00 00 E0 00 0F 01 0B 01 05 0C
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
0000 00D0 00 00 00 00 E0 00 0F 01 0B 01 05 0C 00 02 00 00
0000 00E0 00 0E 00 00 00 00 00 00
5d. Ponto de Entrada do Cdigo do Executvel
O prximo valor de 32 bits um RVA. Se voc tiver dvidas sobre RVAs, NO
CONTINUE. Volte para o texto anterior e leia com ateno as Consideraes sobre
RVAs. A partir deste ponto, se voc no estiver familiarizado com as ditas cujas...
vai perder o passo!
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
0000 00D0 00 00 00 00 E0 00 0F 01 0B 01 05 0C 00 02 00 00
0000 00E0 00 0E 00 00 00 00 00 00 00 10 00 00
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
0000 00D0 00 00 00 00 E0 00 0F 01 0B 01 05 0C 00 02 00 00
0000 00E0 00 0E 00 00 00 00 00 00 00 10 00 00 00 10 00 00
0000 00F0 00 20 00 00
5g. Alinhamento
Os dois valores de 32 bits seguintes so os alinhamentos das sees do arquivo PE
na RAM ('SectionAlignment', quando a imagem estiver carregada na memria) e no
arquivo em disco ('FileAlignment'). Geralmente ambos valores so 32, ou ento
FileAlignment (alinhamento de arquivo) 512 e SectionAlignment (alinhamento de
sees) 4096. As sees sero vistas posteriormente.
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
0000 00D0 00 00 00 00 E0 00 0F 01 0B 01 05 0C 00 02 00 00
0000 00E0 00 0E 00 00 00 00 00 00 00 10 00 00 00 10 00 00
0000 00F0 00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00
No nosso exemplo, o alinhamento de sees 4096 (0010 0000 -> inverso 0000
1000 -> 4096 decimal) e o alinhamento de arquivo 512 (0002 0000 -> inverso
0000 0200 -> 512 decimal).
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
0000 00D0 00 00 00 00 E0 00 0F 01 0B 01 05 0C 00 02 00 00
0000 00E0 00 0E 00 00 00 00 00 00 00 10 00 00 00 10 00 00
0000 00F0 00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00
0000 0100 04 00 00 00
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
0000 00D0 00 00 00 00 E0 00 0F 01 0B 01 05 0C 00 02 00 00
0000 00E0 00 0E 00 00 00 00 00 00 00 10 00 00 00 10 00 00
0000 00F0 00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00
0000 0100 04 00 00 00 00 00 00 00
Esta verso de subsistema deve ser fornecida corretamente porque ela checada e
usada:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
0000 00D0 00 00 00 00 E0 00 0F 01 0B 01 05 0C 00 02 00 00
0000 00E0 00 0E 00 00 00 00 00 00 00 10 00 00 00 10 00 00
0000 00F0 00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00
0000 0100 04 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00
0000 0110 00 50 00 00
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
0000 00D0 00 00 00 00 E0 00 0F 01 0B 01 05 0C 00 02 00 00
0000 00E0 00 0E 00 00 00 00 00 00 00 10 00 00 00 10 00 00
0000 00F0 00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00
0000 0100 04 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00
0000 0110 00 50 00 00 00 04 00 00 00 00 00 00
5n. CheckSum
Segue-se o valor de 32 bits do 'CheckSum'. O valor do checksum, para as verses
atuais do NT, s checado se a imagem for um driver NT (o driver no carregar
se o checksum no estiver correto). Para outros tipos de binrios o checksum no
precisa ser fornecido e pode ser 0.
No nosso exemplo, que no para NT, o valor est zerado (veja acima).
5o. Subsistema NT
O prximo valor de 16 bits, o 'Subsystem', indica em qual subsistema do NT a
imagem deve rodar:
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
0000 00D0 00 00 00 00 E0 00 0F 01 0B 01 05 0C 00 02 00 00
0000 00E0 00 0E 00 00 00 00 00 00 00 10 00 00 00 10 00 00
0000 00F0 00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00
0000 0100 04 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00
0000 0110 00 50 00 00 00 04 00 00 00 00 00 00 02 00 00 00
O 'heap' neste contexto o heap primrio (default). Um processo pode criar mais
heaps se houver necessidade.
Como as DLLs no possuem pilha ou heap prprios, estes valores so ignorados nas
suas imagens.
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
0000 00D0 00 00 00 00 E0 00 0F 01 0B 01 05 0C 00 02 00 00
0000 00E0 00 0E 00 00 00 00 00 00 00 10 00 00 00 10 00 00
0000 00F0 00 20 00 00 00 00 40 00 00 10 00 00 00 02 00 00
0000 0100 04 00 00 00 00 00 00 00 04 00 00 00 00 00 00 00
0000 0110 00 50 00 00 00 04 00 00 00 00 00 00 02 00 00 00
0000 0120 00 00 10 00 00 10 00 00 00 00 10 00 00 10 00 00
0000 0130 00 00 00 00 10 00 00 00
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 00C0 50 45 00 00 4C 01 03 00 A3 77 55 3C 00 00 00 00
...
0000 0130 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00
0000 0140 40 20 00 00 3C 00 00 00 00 40 00 00 60 09 00 00
0000 0150 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000 0160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000 0170 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000 0180 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0000 0190 00 00 00 00 00 00 00 00
O diretrio de ndice 2 refere-se aos recursos: seu RVA 0000 4000 e seu tamanho
0000 0960. Portanto, os dados referentes aos recursos estaro deslocados 16384
bytes (4000h = 16384d) e ocupam 2400 bytes (0960h = 2400d).
Para achar informaes nas sees, preciso busc-las nos diretrios de dados do
cabealho opcional. No se deixe influenciar pelo nome da seo e no assuma que
os dados da seo estejam logo no incio da mesma.
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F ASCII
...
0000 01B0 2E 74 65 78 74 00 00 00 .text...
0000 01C0 94 01 00 00 00 10 00 00 00 02 00 00 00 04 00 00 ...............
0000 01D0 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ...
0000 01E0 2E 72 64 61 74 61 00 00 C2 01 00 00 00 20 00 00 .rdata...... ..
0000 01F0 00 02 00 00 00 06 00 00 00 00 00 00 00 00 00 00 ................
0000 0200 00 00 00 00 40 00 00 40 2E 64 61 74 61 00 00 00 ....@..@.data...
0000 0210 24 00 00 00 00 30 00 00 00 02 00 00 00 08 00 00 $....0..........
0000 0220 00 00 00 00 00 00 00 00 00 00 00 00 40 00 00 C0 ............@..
0000 0230 2E 72 73 72 63 00 00 00 60 09 00 00 00 40 00 00 .rsrc...`....@..
0000 0240 00 0A 00 00 00 0A 00 00 00 00 00 00 00 00 00 00 ................
0000 0250 00 00 00 00 40 00 00 C0 ....@...........
7b. Endereo Fsico e do Tamanho Virtual
O prximo membro da IMAGE_SECTION_HEADER a unio de 32 bits do Endereo
Fsico ('PhysicalAddress') e do Tamanho Virtual ('VirtualSize'). Num arquivo objeto,
este o endereo para o qual o contedo remanejado; num executvel, o
tamanho do contedo. Mais uma vez, este campo no utilizado! H linkadores
que o preenchem com o tamanho, outros com o endereo e outros ainda que o
preenchem com 0. Apesar disso, os executveis no apresentam problemas.
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F ASCII
...
0000 01B0 2E 74 65 78 74 00 00 00 .text...
0000 01C0 94 01 00 00 00 10 00 00 00 02 00 00 00 04 00 00 ...............
0000 01D0 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 60 ............ ...
No nosso exemplo, o valor encontrado 0000 1000, ou seja, o RVA ser de 4096
bytes (destacado em amarelo).
No nosso exemplo, o valor encontrado 0000 0200, ou seja, o tamanho dos dados
da seo de 512 bytes (veja acima, destacado em laranja).
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F ASCII
0000 0400 6A 00 E8 87 01 00 00 A3 1C 30 40 00 E8 77 01 00 j.....0@.w..
7g. Caractersticas
O ltimo membro dos cabealhos das sees o valor de 32 bits com as
Caractersticas. So um punhado de flags que descrevem como a memria das
sees deve ser tratada:
Hexa 60 00 00 20
Binrio 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
Bits 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5
43210
PROTEO EFICIENTE
Nunca subestime a capacidade de um cracker reverter um programa para que ele
no subestime sua capacidade de proteger seu cdigo !
Se a proteo 100% de um software parece um sonho impossvel, prepare-se para
uma proteo 99%. A maioria dos mortais so apenas usurios comuns, sem
condies de crackear um programa. O mximo que podem fazer procurar algum
crack nos assim chamados sites de warez. Quantos realmente podem se considerar
crackers ? 1% ou 2% dos usurios ? Se desses 1% a 2% voc conseguir afastar
99%, faa as contas ! T pra l de bo, n no ? ;-)
2 No avise o usurio assim que ocorrer uma violao. Faa com que o programa
espere, talvez um dia ou dois (crackers odeiam estas surpresas).
3 Use checksums em DLLs e EXEs. Faa com que se chequem entre si. No
perfeito mas dificulta muito o crack.
4 Introduza uma pausa de 1 a 2 segundos aps a entrada de uma senha para que
um cracking usando fora bruta seja impraticvel. Simples de ser feito, raramente
usado.
5 Use a correo automtica no seu software. Voc sabe, como a correo de erros
que os modems e os HDs usam. A tecnologia j existe h anos e ningum a usa nos
prprios softwares ? O melhor dessa histria que se o cracker usou um
decompilador, ele pode estar olhando para uma listagem que perdeu a validade.
6 Faa um patch no seu prprio software. Mude seu cdigo para que cada vez
chame rotinas de validao diferentes. Vena-nos no nosso prprio jogo.
7 Guarde nmeros seriais em locais improvveis, por exemplo como uma
propriedade de um campo de uma base de dados.
10 No utilize strings literais que informem o usurio que tempo de uso expirou.
Estas so as primeiras coisas procuradas. Gere strings dinmicas ou use
encriptao.
12 No use uma funo de validao. Cada vez que for necessrio validar, escreva
o cdigo de validao dentro do processo atual. Isto apenas vai dar mais trabalho
ao cracker.
13 Se usar chaves ou senhas "hard coded", faa com que tenham a aparncia de
cdigo de programa ou de chamada de funo (por exemplo, "73AF" ou
"GetWindowText"). Isto funciona muito bem e causa confuso em alguns
decompiladores.
www.mundohacker.com