
Integración de consola IPython para IDA Pro
= IPyIDA
IPyIDA es una solución basada únicamente en Python para añadir una consola de IPython a IDA Pro. Usa <Shift-.> para abrir una ventana con una consola Qt integrada. Así podrás beneficiarte del autocompletado de IPython, la ayuda en línea, el campo de entrada con fuente monoespaciada, los gráficos, etc.
También puedes conectarte al kernel fuera de IDA usando ipython console --existing.
image::ipyida-screenshot.png[Captura de IPyIDA,width=100%]
== Instalación
IPyIDA debería ser compatible con IDA 6.6 y versiones posteriores en Windows, OS X y Linux. Se ha probado con IDA hasta la versión 9.2.
=== Instalación rápida y sencilla
Se proporciona un script para instalar IPyIDA y sus dependencias automágicamente desde la consola de IDA. Simplemente copia la siguiente línea en la consola de IDA.
En macOS, Python3.framework no proporciona un archivo CA de confianza. Puedes usar el archivo del sistema /etc/ssl/cert.pem.
El script hará lo siguiente:
pip si no está ya instaladoipyida desde https://pypi.org/project/ipyida/[PyPi]ipyida_plugin_stub.py al directorio plugins del usuarioPuedes inspeccionar el script link:install_from_ida.py[] si quieres ver exactamente lo que hace.
==== Actualización
Vuelve a ejecutar el script de instalación para actualizar a la última versión y reinicia IDA.
=== Instalarlo a la manera de IDA
Si prefieres gestionar las dependencias y las actualizaciones tú mismo, puedes copiar ipyida_plugin_stub.py y el directorio ipyida dentro del directorio plugins de IDA.
Este método requiere que gestiones las dependencias por tu cuenta. IPyIDA requiere los paquetes ipykernel y qtconsole, y el paquete qasync si se usa ipykernel versión 5 o superior.
== Integración con Jupyter Notebook
IPyIDA incluye un comando mágico, %open_notebook, para abrir un navegador con un notebook conectado a IPyIDA. El comando se encarga de instalar las dependencias en su primera ejecución y de iniciar un servidor Notebook si no hay uno ya en ejecución. Consulta la ayuda del comando (escribiendo %open_notebook?) para más opciones.
== Personalización de la consola de IPython
Por defecto, la consola no tiene ningún global disponible. Si quieres tener un módulo importado antes de que se abra la consola, IPyIDA leerá el archivo ipyidarc.py del directorio de usuario de IDA (idaapi.get_user_idadir()). Todo lo que importes en este archivo estará disponible en la consola de IPython.
Esto es similar al archivo idapythonrc.py.
=== Modo oscuro
Con un tema oscuro en IDA Pro, es más conveniente tener también un tema oscuro en la consola de IPython. Para activar el tema oscuro integrado en qtconsole, añade lo siguiente en tu ipyidarc.py:
== Integración con IDE
Una de las características notables de IPyIDA es la capacidad de integrarse con el IDE PyCharm. Esto permite funcionalidades como ejecutar el código paso a paso, resaltado de sintaxis, integración con Github CoPilot, etc. Para usar esta característica, simplemente lanza IDA y abre una base de datos, crea un Jupyter Notebook en PyCharm, añade algo de código y haz clic en ejecutar. IPyIDA hace toda la magia en segundo plano.
image::pycharm-screenshot.png[Captura de IPyIDA,width=100%]
== Advertencias
=== La consola externa no responde si la ventana de IDA está en segundo plano durante demasiado tiempo
Este problema es específico de la función App Nap de OS X en OS X 10.9 y versiones posteriores. Al ejecutar Deshabilitar App Nap para IDA Pro parece solucionar el problema, pero es un hack por ahora y consumirá más batería en un portátil; deberíamos encontrar una mejor solución.
Así es como se deshabilita App Nap para IDA Pro:
== Trabajos similares
@james91b también integró con éxito un kernel de IPython en IDA. Al ser un usuario de IDA que no usa Windows, necesitaba algo multiplataforma y adopté un enfoque exclusivamente Python para implementarlo. Aunque algunas de las ideas de implementación provienen de ese proyecto, IPyIDA fue escrito desde cero. Un reconocimiento a @james91b y a todos los contribuyentes de IDA_IPython. IDA_IPython está disponible en Github en https://github.com/james91b/ida_ipython.