首页
社区
课程
招聘
[原创] ida脚本开发环境配置idapython&idacpp三端环境(win,mac,linux)
发表于: 2023-12-7 14:11 14384

[原创] ida脚本开发环境配置idapython&idacpp三端环境(win,mac,linux)

2023-12-7 14:11
14384

写ida脚本也有一段时间了,一直有个痛点是找不到比较好的方法热重载脚本来实时改动生效,导致开发效率老慢了。固总结下比较友好的环境搭配

mac or linux 环境

图片描述

windows 环境

图片描述

选择cpp插件的原因肯定是性能了,毕竟开发起来麻烦,但是c++默认比py快20倍,在某些场景很难不用吧,比如一个混淆代码的块有上千个,测试用python的d810跑这种大型函数+单规则处理,耗时5分多钟,电脑cpu i9了

ida-win 7.7下载: https://bbs.kanxue.com/thread-276531.htm

//1.下载 ida-cmake
cd /path/to/ida/idasdk/plugins && git clone  https://github.com/0xeb/ida-cmake
//2.下载 ida-qscripts
cd /path/to/ida/idasdk/plugins && git clone https://github.com/0xeb/ida-qscripts
//3.下载idax
cd /path/to/ida/idasdk/plugins/ida-qscripts &&
git clone https://github.com/0xeb/idax
//1.下载 ida-cmake
cd /path/to/ida/idasdk/plugins && git clone  https://github.com/0xeb/ida-cmake
//2.下载 ida-qscripts
cd /path/to/ida/idasdk/plugins && git clone https://github.com/0xeb/ida-qscripts
//3.下载idax
cd /path/to/ida/idasdk/plugins/ida-qscripts &&
git clone https://github.com/0xeb/idax
//1.环境变量添加 IDASDK
//mac or linux
export IDASDK=/path/to/ida/idasdk
//2.clion 直接打开 ida-qscripts
//3.clion -- settings -- build,execution,deployment 中 新增配置,并设置 cmake ida插件变量(64位的需要)
//4.将编译出来的 qscripts.dylib qscripts64.dylib or qscripts.so qscripts.so 手动复制到 /path/to/ida/plugins 中,重启ida即生效
//1.环境变量添加 IDASDK
//mac or linux
export IDASDK=/path/to/ida/idasdk
//2.clion 直接打开 ida-qscripts
//3.clion -- settings -- build,execution,deployment 中 新增配置,并设置 cmake ida插件变量(64位的需要)
//4.将编译出来的 qscripts.dylib qscripts64.dylib or qscripts.so qscripts.so 手动复制到 /path/to/ida/plugins 中,重启ida即生效
//1.设置环境变量
setx IDASDK /path/to/ida/idasdk
//2.使用visual studio打开,测试环境为vs2022,打开后在cmakefile中看情况设置
//3.vs 点击 项目--> qscripts的 CMake设置,在下面设置才能编译64位的dll
//1.设置环境变量
setx IDASDK /path/to/ida/idasdk
//2.使用visual studio打开,测试环境为vs2022,打开后在cmakefile中看情况设置
//3.vs 点击 项目--> qscripts的 CMake设置,在下面设置才能编译64位的dll
//4.将 qscripts.dll qscripts64.dll 复制到 /path/to/ida/plugins
//4.将 qscripts.dll qscripts64.dll 复制到 /path/to/ida/plugins
#include <ida.hpp>
#include <idp.hpp>
#include <loader.hpp>
#include <kernwin.hpp>
 
plugmod_t *idaapi init(void)
{
  msg("Plugin initialized!\n");
  return PLUGIN_OK;
}
 
void idaapi term(void)
{
  msg("Plugin term()\n");
}
 
bool idaapi run(size_t arg)
{
  msg("Plugin run()\n");
  return true;
}
 
plugin_t PLUGIN =
{
  IDP_INTERFACE_VERSION,
  PLUGIN_UNL,    //需要这个标记,否则不触发qscripts
  init,
  term,
  run,
  "",
  "",
  "Sample plugin",
  ""
};
#include <ida.hpp>
#include <idp.hpp>
#include <loader.hpp>
#include <kernwin.hpp>
 
plugmod_t *idaapi init(void)
{
  msg("Plugin initialized!\n");
  return PLUGIN_OK;
}
 
void idaapi term(void)
{
  msg("Plugin term()\n");
}
 
bool idaapi run(size_t arg)
{
  msg("Plugin run()\n");
  return true;
}
 
plugin_t PLUGIN =
{
  IDP_INTERFACE_VERSION,
  PLUGIN_UNL,    //需要这个标记,否则不触发qscripts
  init,
  term,
  run,
  "",
  "",
  "Sample plugin",
  ""
};
//cmakefile 配置
cmake_minimum_required(VERSION 3.26)
project(ByeObf)
set(CMAKE_CXX_STANDARD 20)
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY /Applications/IDAPro8.3/ida.app/Contents/MacOS/plugins)
 
include_directories(/Applications/IDAPro/ida.app/Contents/MacOS/plugins/hexrays_sdk/include/)
include_directories(/Applications/IDAPro/ida.app/Contents/MacOS/idasdk_pro/include/)
 
 
#导入idaapi的目录
set(PLUGIN_NAME byeobf)
set(PLUGIN_SOURCES library.h library.cpp)
set(PLUGIN_OUTPUT_NAME ${PLUGIN_NAME})
set(PLUGIN_RUN_ARGS "-t")
 
include($ENV{IDASDK}/ida-cmake/addons.cmake)
//cmakefile 配置
cmake_minimum_required(VERSION 3.26)
project(ByeObf)
set(CMAKE_CXX_STANDARD 20)
#set(CMAKE_RUNTIME_OUTPUT_DIRECTORY /Applications/IDAPro8.3/ida.app/Contents/MacOS/plugins)
 
include_directories(/Applications/IDAPro/ida.app/Contents/MacOS/plugins/hexrays_sdk/include/)
include_directories(/Applications/IDAPro/ida.app/Contents/MacOS/idasdk_pro/include/)
 
 
#导入idaapi的目录
set(PLUGIN_NAME byeobf)
set(PLUGIN_SOURCES library.h library.cpp)
set(PLUGIN_OUTPUT_NAME ${PLUGIN_NAME})
set(PLUGIN_RUN_ARGS "-t")
 
include($ENV{IDASDK}/ida-cmake/addons.cmake)
编译64位插件定义EA64即可
编译64位插件定义EA64即可
import time
import idaapi
 
# Give the linker time to finish flushing the binary
time.sleep(1)
 
# Optionally clear the screen:
#idaapi.msg_clear()
 
# Load your plugin and pass any arg value you want
idaapi.load_and_run_plugin('byeobf', 0)
 
# Optionally, do post work, etc.
import time
import idaapi
 
# Give the linker time to finish flushing the binary
time.sleep(1)
 
# Optionally clear the screen:

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2023-12-26 11:06 被初恒编辑 ,原因: 1.修改clion 热重载的文件配置名,之前打错字了。2.验证了该插件在idacpp + clion开发的时候是可以热重载并且一直附加调试的,就是可以带着debug信息修改插件逻辑,而不是通过日志一直使劲猜,我没那么多头发可以掉。
收藏
免费 19
支持
分享
最新回复 (20)
雪    币: 748
活跃值: (1662)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
这敏感词到底是哪个噢
2023-12-7 14:51
0
雪    币: 120
活跃值: (1597)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2023-12-12 20:56
0
雪    币: 861
活跃值: (683)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
4
感谢,非常有用
2024-1-30 17:24
0
雪    币: 3004
活跃值: (30866)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2024-1-31 09:35
1
雪    币: 2159
活跃值: (4087)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
6
感谢分享
2024-1-31 09:48
0
雪    币: 18
活跃值: (941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7

用 pycharm 来调试 ida 脚本,在代码中插入下面代码连接 pycharm

```

if DEBUG:
    import pydevd_pycharm
    pydevd_pycharm.settrace('localhost', port=2222, stdoutToServer=True, stderrToServer=True)

```

就会显示这个

我明明是同一个文件,为啥会这样呢?

最后于 2024-2-27 16:10 被bullyxy编辑 ,原因:
2024-2-27 16:09
0
雪    币: 18
活跃值: (941)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
配置也是一样的
2024-2-27 16:11
0
雪    币: 748
活跃值: (1662)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
这个是python弹了异常,但是pycharm调试的时候跳不到源码那里吧,就弹这个错。 自己调试的时候记住触发这个错的那一行,不让他触发就好了。
2024-2-27 16:37
0
雪    币: 0
活跃值: (371)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
谢谢大佬分享 真棒
2024-9-15 09:57
0
雪    币: 27
活跃值: (1638)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
开发脚本的是大牛啊
2024-9-18 00:11
0
雪    币: 31
活跃值: (3254)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
这个发帖,我的天呀,真是极度精简, ida9.0 的适配, 在 Linux 下, 在 macOS 下, 基本跑通点点, 技术是专注练习出来的。
作者想说的话,只是够自己用, 或者懂开发的老手,一遍过,就知道怎么回事,经验丰富,

作为菜鸡, 想一想, 系统2天, 搞明白 2天, IDA 基础 2个月。 ---》 后续官方 cpp sdk 用多了,看外国人的教程多了就明白怎么回事了。
看了,Qscript 的 作者的原帖, 视频。结合 作者的文章, 真的漏了太多,太多。 满不在意,不过脑,就是笨。自学的路上多么的痛苦,但是有了自己解决和排错的能力,非常重要, 也得感谢现在的AI这么强,辅助学习。
所以, 老手说,我看了不下10遍, 每一遍都是一次收获。!! 
2024-10-31 11:46
0
雪    币: 31
活跃值: (3254)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
Native Plugins 开发看得老明白了。
Python Plugins 开发,真愣了3天。
为啥,巨佬一句话,小白要看3次,每次分别是一天, pycharm 调试 IDA 那么牛逼的功能,code自动补全, 调试py的变量下断监控修改,自动热重载,含糊其辞。作者太省略了,小白难懂啊。|
2024-10-31 22:10
0
雪    币: 748
活跃值: (1662)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
calleng Native Plugins 开发看得老明白了。 Python Plugins 开发,真愣了3天。[em_3] 为啥,巨佬一句话,小白要看3次,每次分别是一天, pycharm 调试 IDA 那么 ...
行吧我表达欠缺,考虑不周了
2024-11-1 22:17
0
雪    币: 1379
活跃值: (2796)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
感谢分享
2024-11-4 10:55
0
雪    币: 2069
活跃值: (2622)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
16
mac使用clion编译不出来,提示报错:
make[3]: *** No rule to make target `idasdk90/lib/x64_mac_clang_64/libida.dylib', needed by `idasdk90/bin/plugins/mysample.dylib'.  Stop.
make[3]: *** Waiting for unfinished jobs....
2024-11-4 11:45
0
雪    币: 748
活跃值: (1662)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
17
墨穹呢 mac使用clion编译不出来,提示报错: make[3]: *** No rule to make target `idasdk90/lib/x64_mac_clang_64/libida.dyl ...
使用ida 之前泄露的sdk进行编译试试,不要用正式版的泄露,看起来文件缺失了。
2024-11-4 18:53
0
雪    币: 31
活跃值: (3254)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
初恒 [em_52]行吧我表达欠缺,考虑不周了
没有那个意思,你是话中有话, 都写得明明白白的在截图里面躺着的。
就看有心人,能不明白作者的意图了。
对于只看文字的表述的人,走点,拖点,自以为是的人,就是这样,让他看不懂。
我就是被你降服之前的那个自以为是的那个YING。
2024-11-5 10:35
0
雪    币: 748
活跃值: (1662)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
calleng 没有那个意思,你是话中有话, 都写得明明白白的在截图里面躺着的。 就看有心人,能不明白作者的意图了。 对于只看文字的表述的人,走点,拖点,自以为是的人,就是这样,让他看不懂。 我就是被你降服之前 ...
哈哈,给你点个赞
2024-11-5 14:14
0
雪    币: 2069
活跃值: (2622)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
初恒 使用ida 之前泄露的sdk进行编译试试,不要用正式版的泄露,看起来文件缺失了。
用的就是泄露版里边的sdk,似乎是对mac的支持有限
2024-11-5 14:24
0
雪    币: 31
活跃值: (3254)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
看了那个老外的视屏,莫说了。基本是IDA砖家级别,果断订阅。
然后, 他的 Qscript的视屏看了10遍, Native 插件没想到先搞定了。
py插件,花了2天才看明白。
初恒是看雪的砖家级别了,如果花点心思,估计就是真砖家了。
2024-11-5 20:42
0
游客
登录 | 注册 方可回帖
返回
//