Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
Hackering:
Liberação de senhas / proteções /seriais
Lei 9809/98
Violar direitos de autor de programa de computador
6 meses a 2 anos de detenção + multa
Ou assim ...
Metodologias para ER
Programa
Fonte
Compilador
Programa
Assembly
Prog
Montador
Objeto
Continuando ...
Programa
Programa Programa
Objeto
Objeto Objeto
Linker
Programa
Binário Execução
Executável
Packer
Programa
Loader
Binário
Executável
Um compilador típico
Código Código
Fonte Front End Back End Alvo
caracteres IR IR
Scanner Gerador Seletor de Instruções
tokens de IR IR
x86
FORTRAN
x64
ARM-32
C++
ARM-64
C#
IA-64
Separação: Back End / Front End
x86
FORTRAN
x64
c
ARM-32
IR
C++
ARM-64
C#
IA-64
IR = Representação Intermediária
Geração da Rep. Intermediária
LOAD t1, _C
LOAD t2, _D
MUL t2, t1, t2
A=B+C*D LOAD t3, _B
ADD t3,t2, t3
STORE _A, t3
<<Condição>>
If (condicao) {
Comando JNE L1
}
<<Comando>>
L1:
Geração de RI – Comando if-else
<<Condição>>
If (condicao) { JNE L1
Comando1;
}
<<Comando1>>
Else {
JMP L2
Comando2;
}
L1:
<< Comando2>>
L2:
Geração de RI – Comando while
L1:
<<Condição>>
L2:
Geração de RI – Comando call
LOAD t1, _B
LOAD t2, _A
C = f (A, B) PARAM t2
PARAM t1
CALL _F, t3
STORE _C, t3
Variáveis Locais
bp bp´
void main() {
func (1,2,3); End Retorno
}
0x1
A instrução “ENTER n, 0” no x86
0x2
PUSH EBP 0x3
MOV EBP, ESP ....
SUB ESP, n
Otimização de código
Parser &
Parser &
Análise
Análise Semântica
Semântica
Scanner
Scanner Gerador de RI
Tabela de
Símbolos
Fluxo de Controle
Fluxo de Dados
Compilador vs Interpretador
Compilador
Traduz código para execução posterior
Interpretador
Lê um comando no programa fonte (pode ser de baixo nível)
Executa o código diretamente, usando insts no seu próprio
espaço de endereçamento
Repete o processo até que um comando de parada seja
encontrado no programa fonte.
Java Bytecode ou MSIL (MS Interm Lang)
Compilação + interpretação de baixo nível
Assembler
relocação
Tabela de
relocação func4
Tabela de
relocação
func5
A tabela de relocação
O linker necessita:
Reagrupar os vários módulos
Mudanças de endereços acontecem
Há, portanto, relocação de endereços
É necessária a atualização dos uso dos endereços (fixups)
Estática:
Linker resolve completamente as referências
Semi-dinâmica:
Linker resolve parte das referências
Loader resolve outras (DLLs)
Dinâmica:
Algumas referências são tratadas pelo programador
LoadLibrary + GetProcessAddress
Os packers
Comprime e protegem o
código executável Programa
Programa
Análise estática impossível Executável
Executável
(Dados)
dificultadas
Usados em malware (90%)
Packer
Decompiladores