Shell Code
Shell Code
Shell Code
1. Introdução
2. Registradores
EAX, AX, AH, AL - Estes registradores são chamados de acumuladores e podem ser
usados para operações aritméticas e de entrada e saida ou para executar chamadas
de interrupções. Veremos como é indispensavel o uso deles quando temos que
realizar chamadas dos sistema(system calls).
EBX, BX, BH, BL - Estes registradores são a base dos registradores e são usados
como
ponteiros base para o acesso a memória. Nós iremos usa-los para passar
argumentos
de chamada do sistema. Eles também são usados para guardar o valor de retorno
de uma
interrupção.
ECX, CX, CH, CL - Estes registradores são contadores.
EDX, DX, DH, DL - Estes são os registradores de dados, eles podem ser usados
para operações
aritméticas, chamadas de interrupções e algumas operações de input/output.
3. Introdução a linguagem Assembly
A linguagem assembly que vamos nos dirigir é chamada de "Inline Assembly" e
isso
adota a sintaxe do AT&T. O nome dos registradores são precedidos pelo simbolo
"%",
assim quando tivermos que usar o registrador eax, precisaremos digitar "%eax".
Se falarmos em constantes numéricas, esse valor deve ser precedido pelo simbolo
"$".
Vamos agora a uma breve analise das instruções mais usadas no assembly.
4. A fase de codificação
int main()
{
write(0,"WWW.FIREWALLS.COM.BR", 20);
exit(0);
}
/*
* This file contains the system call numbers.
*/
------
------
Agora o kernel ira tomar conta da aplicação e ira executar nossa rotina de
write(). A implementação de exit(0) é muito mais facil.
exit(0):
Saia e salve-o como asmcode.o, agora vamos torna-lo legivel para a máquina,
00000000 <.text>:
0: 31 c0 xor %eax,%eax
2: 31 db xor %ebx,%ebx
4: 31 d2 xor %edx,%edx
6: 50 push %eax
7: 68 4d 2e 42 52 push $0x52422e4d
c: 68 53 2e 43 4f push $0x4f432e53
11: 68 57 41 4c 4c push $0x4c4c4157
16: 68 46 49 52 45 push $0x45524946
1b: 68 57 57 57 2e push $0x2e575757
20: 89 e1 mov %esp,%ecx
22: b2 14 mov $0x14,%dl
24: b0 04 mov $0x4,%al
26: cd 80 int $0x80
28: 31 c0 xor %eax,%eax
2a: 31 db xor %ebx,%ebx
2c: b0 01 mov $0x1,%al
2e: cd 80 int $0x80
Bom, isto é claramente apenas uma introdução o que são e como fazer shellcodes.
Escrito por Luiz Fernando Camargo.
Gostaria de agradecer a duas pessoas muito importantes para a conclusão deste
trabalho que são, Adriano Lima e Rodrigo Rubira Branco, valeu mesmo :) !
Dúvidas/Contato: [email protected]