
Integração de console IPython para IDA Pro
= IPyIDA
IPyIDA é uma solução exclusivamente em Python para adicionar um console IPython ao IDA Pro. Use
<Shift-.> para abrir uma janela com um console Qt embutido. Você pode então
se beneficiar do autocompletar do IPython, ajuda online, campo de entrada de texto
com fonte monoespaçada, gráficos e muito mais.
Você também pode conectar-se ao kernel fora do IDA usando ipython console --existing.
image::ipyida-screenshot.png[IPyIDA screenshot,width=100%]
== Instalação
O IPyIDA deve ser compatível com IDA 6.6 e versões posteriores no Windows, OS X e Linux. Foi testado no IDA até a versão 9.2.
=== Instalação rápida e fácil
Um script é fornecido para instalar o IPyIDA e suas dependências automaticamente a partir do console do IDA. Basta copiar a seguinte linha para o console do IDA.
No macOS, o Python3.framework não fornece um arquivo CA confiável. Você pode usar
o arquivo do sistema /etc/ssl/cert.pem.
O script fará o seguinte:
pip se ainda não estiver instaladoipyida do https://pypi.org/project/ipyida/[PyPi]ipyida_plugin_stub.py para o diretório plugins do usuárioVocê pode inspecionar o script link:install_from_ida.py[] se desejar ver exatamente o que ele faz.
==== Atualização
Execute o script de instalação novamente para atualizar para a versão mais recente e reinicie o IDA.
=== Instale do jeito do IDA
Se você preferir gerenciar as dependências e atualizações por conta própria, você pode
copiar ipyida_plugin_stub.py e o diretório ipyida para dentro do diretório
plugins do IDA.
Este método exige que você gerencie as dependências por conta própria. O IPyIDA requer
os pacotes ipykernel e qtconsole, e o pacote qasync se estiver usando
ipykernel versão 5 ou mais recente.
== Integração com Jupyter Notebook
O IPyIDA inclui um comando mágico, %open_notebook, para abrir um navegador com um
notebook anexado ao IPyIDA. O comando cuida da instalação das dependências
na primeira execução e inicia um servidor Notebook, a menos que um já esteja em execução.
Consulte a ajuda do comando (digitando %open_notebook?) para outras opções.
== Personalizando o console IPython
Por padrão, o console não possui nenhum global disponível. Se você quiser
ter um módulo importado antes de o console ser aberto, o IPyIDA lerá o
arquivo ipyidarc.py do diretório do usuário do IDA (idaapi.get_user_idadir()).
Qualquer coisa que você importar neste arquivo estará disponível no console IPython.
Isso é semelhante ao arquivo idapythonrc.py.
=== Modo escuro
Com um tema escuro no IDA Pro, é mais conveniente ter também um tema escuro no
console IPython. Para ativar o tema escuro embutido no qtconsole, adicione o
seguinte no seu ipyidarc.py:
== Integração com IDE
Uma das características notáveis do iPyIDA é a capacidade de integrá-lo com o IDE PyCharm. Isso permite recursos como percorrer o código passo a passo, realce de sintaxe, integração com Github CoPilot, etc. Para usar este recurso, basta iniciar o IDA e abrir um banco de dados, criar um Jupyter Notebook no PyCharm, adicionar algum código e clicar em executar. O IPyIDA faz toda a mágica em segundo plano.
image::pycharm-screenshot.png[IPyIDA screenshot,width=100%]
== Ressalvas
=== Console externo não responde se a janela do IDA ficar em segundo plano por muito tempo
Este problema é específico do recurso App Nap do OS X no OS X 10.9 e superiores. Quando executar... Desativar o App Nap para o IDA Pro parece corrigir o problema, mas é um paliativo por enquanto e usará mais bateria em um laptop; devemos encontrar uma solução melhor.
Veja como desativar o App Nap para o IDA Pro:
== Trabalhos semelhantes
@james91b também integrou com sucesso um kernel IPython no IDA. Sendo um usuário de IDA fora do Windows, eu precisava de algo multiplataforma e adotei uma abordagem somente em Python para implementá-lo. Embora algumas das ideias de implementação venham desse projeto, o IPyIDA foi escrito do zero. Meus cumprimentos a @james91b e a todos os contribuidores do IDA_IPython. O IDA_IPython está disponível no Github em https://github.com/james91b/ida_ipython.