社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何通过IDACode与IDA和VS Code联调IDAPython脚本

FreeBuf • 3 年前 • 369 次点击  

 关于IDACode 

IDACode是一款功能强大的代码执行和调试工具,该工具可以帮助广大研究人员在IDA环境中执行和调试Python脚本,而且无需频繁切换窗口,也无需离开Visual Studio Code。注意,该项目的VS code插件可以直接在官方插件市场中下载安装。

当前版本的IDACode仍处于前期开发阶段,因此可能会出现一些bug,不过别担心,我们的开发人员会在短时间内进行修复,也欢迎大家积极提交各种issue。

 功能介绍 

速度快:支持快速创建和执行脚本。

调试功能强大:可随时添加Python调试器。

兼容性:IDACode不要求我们以特定的方式修改脚本,所有脚本都可以在IDA中执行,无需做任何更改。

模块化:IDACode没有在线程同步中使用安全封装工具,这将允许我们在任何给定的时间从任何路径导入任何模块。而IDACode会将脚本执行线程与IDA主线程同步,以避免性能和其他意外问题。

同步:由于IDACode使用debugpy进行通信,它可以直接将输出窗口与VS Code的输出面板同步。

注意:IDACode同时支持Python 2和Python 3。

 工具安装 

首先,我们需要安装好DIA插件运行所需的依赖环境。确保使用了正确的Python版本,IDACode支持最新版本的的debugpy(v3.0.0),请确保环境完成升级。

python -m pip install --user debugpy tornado

接下来,访问该项目的【Releases页面】下载项目代码,或者使用下列命令将该项目源码克隆至本地:

git clone https://github.com/ioncodes/idacode.git

然后将ida.zip文件中的所有内容拷贝到IDA插件目录下。

下一步,就是要设置符合我们环境的配置文件了。根据你的实际情况编辑

idacode_utils/settings.py文件:

HOST:主机地址,一般为127.0.0.1,除非你使用了远程地址。

PORT:IDA需要监听的端口号,主要用于IDA和VS Code之间的Websocket通信。

DEBUG_PORT:需要监听的传入调试会话端口

PYTHON:IDA所使用的Python发行版安装绝对地址。

LOGGING:决定调试器是否将信息记录至文件中,当我们的代码遇到问题时,这个功能就非常有用了。日子文件地址位于你设备的临时目录中,Windows的话就是“%TEMP%”,日子文件命名规则为“debugpy.*.log”。

此时,你就可以在工具的插件菜单中点击“IDACode”来开启插件了。

 工具使用 

IDA

点击插件菜单中的“IDACode”,此时你将会看到如下所示的信息:

IDACode listening on 127.0.0.1:7065

VS Code

当前版本的IDACode支持默认开启“Execute on save”功能,VS Code将会自动在保存(比如说按下CTRL + S)了当前脚本文档之后在IDA中执行你的脚本代码。

工具提供了四个可用命令以供使用:

接下来,打开一个文件夹,把你的脚本放进去,然后连接IDA即可。请记住,在重新启动IDA之前,调试会话是永久存在的。一旦调试器启动,就不能更改工作区文件夹了。

因此,你需要确保工作区文件夹是主脚本所在的文件夹。一旦连接建立成功,就可以在IDA中选择执行脚本了。

 调试功能 

IDACode使用了VS Code的远程调试器连接到IDA,并支持VS Code的全部功能。但是,我们还需要使用到Python的内置功能来指定脚本的入口点,比如断点功能。这个功能可以告诉调试器暂停执行,如果没有调试器,它将忽略该功能。

IDACode还会导入一个名为dbg的辅助功能包,该包实现了一个名为bp的断点重载功能,并且支持日志记录和条件设置:

name = idc.get_segm_name(segment)
dbg.bp(name==".text", f"found {name} at {segment}")

项目地址

https://github.com/ioncodes/idacode

参考资

https://marketplace.visualstudio.com/items?itemName=Layle.idacode

https://github.com/ioncodes/idacode/releases

https://marketplace.visualstudio.com/items?itemName=Layle.idacode

https://github.com/ioncodes/idacode/tree/master/idacode#extension-settings



精彩推荐









Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/127858
 
369 次点击