Novatec
Copyright 2015 by Justin Seitz. Title of English-language original: Black Hat Python, ISBN 978-159327-590-7, published by No Starch Press. Portuguese-language edition copyright 2015 by Novatec
Editora Ltda. All rights reserved.
Copyright 2015 by Justin Seitz. Ttulo original em Ingls: Black Hat Python, ISBN 978-1-59327-590-7,
publicado pela No Starch Press. Edio em Portugus copyright 2015 pela Novatec Editora Ltda.
Todos os direitos reservados.
Copyright 2015 da Novatec Editora Ltda.
Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. proibida a reproduo desta
obra, mesmo parcial, por qualquer processo, sem prvia autorizao, por escrito, do autor e da Editora.
Editor: Rubens Prates
Reviso gramatical: Patrizia Zagni
Editorao eletrnica: Carolina Kuwabata
Assistente editorial: Priscila A. Yoshimatsu
ISBN: 978-85-7522-420-5 OG20150223
Histrico de impresses:
Maro/2015
Primeira edio
captulo 1
Embora seja crucial, essa a parte menos divertida do livro, em que descrevemos
a configurao de um ambiente no qual poderemos escrever e testar o Python.
Faremos um curso rpido de configurao de uma VM (Virtual Machine, ou
mquina virtual) Kali Linux e de instalao de um bom IDE para que voc possa
ter tudo o que for necessrio para desenvolver cdigos. No final deste captulo,
voc dever estar pronto para enfrentar os exerccios e os exemplos de cdigo do
restante do livro.
Antes de comear, baixe e instale o VMWare Player1. Tambm recomendo que voc
tenha algumas mquinas virtuais Windows prontas, incluindo o Windows XP e
o Windows 7, de preferncia na verso 32 bits em ambos os casos.
14
15
A primeira tarefa ser garantir que a verso correta do Python esteja instalada.
No livro todo, usaremos o Python 2.7. No shell (Applications > Accessories > Terminal, ou
Aplicaes > Acessrios > Terminal), execute o seguinte:
root@kali:~# python --version
Python 2.7.3
root@kali:~#
16
Voc dever ver uma sada em seu terminal indicando que a biblioteca est sendo
baixada e instalada.
Em seguida, acesse um shell Python e confira se a instalao foi feita corretamente:
root@kali:~#: python
Python 2.7.3 (default, Mar 14 2014, 11:57:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import github3
>>> exit()
WingIDE
Embora, normalmente, eu no defenda produtos de software comerciais, o WingIDE
o melhor IDE que j usei nos ltimos sete anos na Immunity. O WingIDE oferece todas
as funcionalidades bsicas de um IDE como preenchimento automtico e explicao
sobre parmetros de funo, porm so seus recursos de debugging que o destacam
em relao aos demais IDEs. Farei uma apresentao rpida da verso comercial do
WingIDE, mas claro que voc dever escolher aquela que lhe for mais conveniente3.
3 Para ver uma comparao das funcionalidades entre as verses, veja https://wingware.com/wingide/features/.
17
Isso dever corrigir qualquer dependncia que esteja faltando e instalar o WingIDE. Para conferir se ele foi devidamente instalado, certifique-se de que possvel
acess-lo (Figura 1.2).
18
Inicie o WingIDE e abra um novo arquivo Python vazio. Em seguida, acompanhe-me enquanto fao uma descrio rpida de alguns recursos teis. Para comear,
sua tela dever ter uma aparncia como aquela mostrada na figura 1.3, com a rea
principal para edio de cdigo na parte superior esquerda e um conjunto de
abas na parte inferior.
Vamos criar um cdigo simples para demonstrar algumas das funes teis do
WingIDE, incluindo as abas Debug Probe (Sonda de depurao) e Stack Data
(Dados de pilha). Digite o cdigo a seguir no editor:
def sum(number_one,number_two):
number_one_int = convert_integer(number_one)
number_two_int = convert_integer(number_two)
result = number_one_int + number_two_int
return result
19
def convert_integer(number_string):
converted_integer = int(number_string)
return converted_integer
answer = sum("1","2")
20
Isso pode ser feito ao clicar na margem esquerda ou pressionando a tecla F9. Voc
ver um pequeno ponto vermelho aparecer na margem. Agora, execute o script
teclando F5; a execuo dever ser interrompida em seu breakpoint. Clique na
aba Stack Data (Dados de pilha) e voc dever ver uma tela como a que est sendo
mostrada na figura 1.5.
Figura 1.5 Visualizando os dados de pilha depois que um breakpoint foi atingido.
A aba Stack Data ir mostrar algumas informaes teis, como o estado de quaisquer variveis local e global no momento em que nosso breakpoint foi atingido.
Isso nos permite depurar cdigos mais avanados, sendo necessrio inspecionar
variveis durante a execuo com o intuito de localizar bugs. Se clicar na barra
suspensa, voc poder ver tambm a pilha corrente de chamadas, que informa
qual funo chamou a funo em que voc est no momento. D uma olhada na
figura 1.6 para ver o trace da pilha.
21
Podemos ver que convert_integer foi chamado a partir da funo sum na linha 3 de
nosso script Python. Isso ser bastante til se voc tiver chamadas recursivas de
funo ou uma funo chamada de vrios locais em potencial. Usar a aba Stack
Data ser muito prtico em sua carreira de desenvolvimento em Python!
O prximo recurso importante a aba Debug Probe, a qual permite acessar um shell
Python que est executando no contexto atual do exato instante em que seu breakpoint foi atingido. Isso permite inspecionar e modificar variveis, assim como
escrever pequenos trechos de cdigo de teste para experimentar novas ideias ou
resolver problemas. A figura 1.7 mostra como inspecionar a varivel converted_integer
e alterar o seu valor.
22
Figura 1.7 Usando Debug Probe para inspecionar e modificar variveis locais.
Aps ter feito algumas modificaes, a execuo do script poder ser retomada
ao teclar F5.
Embora seja bem simples, esse exemplo demonstra alguns dos recursos mais teis
do WingIDE para desenvolvimento e depurao de scripts Python4.
tudo de que precisamos para comear a desenvolver cdigos para o restante
deste livro. No se esquea de deixar as mquinas virtuais prontas como computadores-alvo para os captulos especficos do Windows, mas claro que no
haver nenhum problema se um hardware nativo for usado.
Agora vamos realmente dar incio nossa diverso!
4 Se voc j usa um IDE com recursos comparveis aos do WingIDE, por favor, envie-me um email
ou um tute, pois adoraria saber disso!