01.01.2013 Views

Liber 000 - Astrum Argentum

Liber 000 - Astrum Argentum

Liber 000 - Astrum Argentum

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Vamos analisar o que fizemos e comparar com nossa pequena tabela.<br />

Vamos ver a função write() e exit() novamente:<br />

ssize_t write(int fd, const void *buf, size_t count);<br />

[%ebx], [ %ecx ] [ %edx ]<br />

void exit(int status);<br />

[ %ebx ]<br />

Quais conclusões que chegamos? Vimos que o número da system call<br />

sempre deverá ser passada para %eax. No caso de write(), o inteiro<br />

sempre deve ser passado para %ebx, a string para %ecx e o tamanho<br />

para %edx!!! Em exit() o mesmo raciocínio: System call em %eax, e o<br />

int para %ebx. Compare tudo isso no código novamente. Você verá que<br />

agora ele faz bem mais sentido. :)<br />

Com isso dá pra se chegar a conclusão que toda system call sempre irá<br />

para %eax; argumento 1 para %ebx; argumento 2 para %ecx; argumento<br />

3 para %edx; e assim vai... Mas de qualquer colarei a tabela para<br />

acompanharmos com clareza. Bem, agora que terminamos nosso<br />

protótipo em C e em ASM. Vamos logo pegar todos os opcodes<br />

(instruções válidas) em hexadecimal e finalizar nosso shellcode.<br />

Compile o asmwrite.c normalmente, execute-o para ter certeza de que<br />

funciona e vamos pegar os códigos hexadecimais no GDB.<br />

root@motdlabs:~/IP_FIX/shellcode# gcc -o asmwrite asmwrite.c<br />

root@motdlabs:~/IP_FIX/shellcode# ./asmwrite<br />

MOTDLabs<br />

root@motdlabs:~/IP_FIX/shellcode#<br />

Funciona perfeitamente.<br />

Agora precisamos debugá-lo para pegarmos os códigos em<br />

hexadecimal.<br />

root@motdlabs:~/IP_FIX/shellcode# gdb asmwrite<br />

GNU gdb 5.3<br />

Copyright 2002 Free Software Foundation, Inc.<br />

GDB is free software, covered by the GNU General Public License, and<br />

you are welcome to change it and/or distribute copies of it under<br />

certain conditions.<br />

Type "show copying" to see the conditions.<br />

There is absolutely no warranty for GDB. Type "show warranty" for<br />

details.<br />

This GDB was configured as "i386-slackware-linux"...<br />

(gdb)<br />

O gdb pra quem não conhece, é um GNU Debugger. Um excelente<br />

debugador livre muito completo. Não explicarei todos os comando que<br />

ele possui, mas explanarei os quais iremos usar. Voltando ao asmwrite<br />

vamos "disassembliar" o objeto e conferir seu código:<br />

65

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!