0%

IDA_v8.3指北

本文基于IDA_Pro_8.3版本,记录使用过程中的一些问题,以及一些关于IDA的基本操作

IDA配置

下载

IDA_Pro_v8.3

IDA Pro 8.3(x86,x86_64)_BGSPA.zip:这是一个压缩包,里面包含了IDA Pro 8.3的安装文件和一些插件和工具。_

IDA Pro 8.3_(x86_x64_ARM_ARM64_PPC_PPC64_MIPS)_P.Y.G_Team.zip:这也是一个压缩包,里面包含了IDA Pro 8.3的安装文件和一些插件和工具,但是支持不同的处理器架构。

IDA SDK and Tools.7z:这是一个压缩包,里面包含了IDA Pro的开发工具包(SDK),可以用来创建自己的插件和加载器。

ida_keygen.exe:这是一个程序,可以用来生成IDA Pro的密钥文件(ida.key),需要输入用户名和邮箱地址。

IDA_Pro_8.3-incl_kg-HexRaysDec-SDK-READ_NFO-BGSPA:这是一个压缩包,里面包含了IDA Pro 8.3的安装文件、HexRaysDec插件、SDK、README.txt和BGSPA密钥文件。HexRaysDec插件可以用来解密一些使用Hex-Rays加密技术的二进制文件。README.txt说明了如何使用这个密钥文件。BGSPA密钥文件是由BGSPA团队提供的,他们开发了一些游戏相关的反汇编工具。

Key生成与配置

这里利用网盘中下载下来的ida_keygen.exe程序,win+r输入cmd,进入ida_keygen.exe所在的文件目录,运行以下命令,生成ida.key文件,将ida.key移动到IDA_Pro_v8.3本体所在文件夹即可。

1
ida_keygen.exe -v 830 -u 用户名 -e 编一个邮箱 -t 3 -s 5169> ida.key

快速启动

可以将IDA所在的文件路径加入环境变量Path

将本体路径D:\1Reserve\IDA_Pro_v8.3\IDA Pro 8.3 (x86, x86_64)_BGSPA\IDA Pro 8.3 (x86, x86_64)加入到Path即可。(双击Path即可编辑值),不要点新建,变量名和原Path相同会将原Path覆盖。此后,在cmd里直接输入idaida64即可打开软件。

IDA-Debug

IDA启动时提示IDApython没有imp模块

我的python版本是python3.12.0

报错信息如下:

因为impPython 3.4 之后弃用了,所以可以使用 importlib 代替,具体操作如下:

修改D:\1Reserve\IDA_Pro_v8.3\IDA Pro 8.3 (x86, x86_64)_BGSPA\IDA Pro 8.3 (x86, x86_64)\python\3下的ida_idaapi.py文件。共有三处需要修改的地方

首先,将第96行的import imp注释掉,增加第97行import importlib

其次,将IDAPython_LoadProcMod函数修改成下面这个样子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
def IDAPython_LoadProcMod(path, g, print_error=True):
"""
加载处理器模块。
"""
pname = g['__name__'] if g and "__name__" in g else '__main__'
parent = sys.modules[pname]
path_dir, path_fname = os.path.split(path)
procmod_name = os.path.splitext(path_fname)[0]
procobj = None
PY_COMPILE_ERR = None

try:
spec = importlib.util.spec_from_file_location(procmod_name, path)
procmod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(procmod)

if parent:
setattr(parent, procmod_name, procmod)

# 从父模块导出属性到处理器模块
parent_attrs = getattr(parent, '__all__', (attr for attr in dir(parent) if not attr.startswith('_')))
for pa in parent_attrs:
setattr(procmod, pa, getattr(parent, pa))

# 实例化处理器对象
if getattr(procmod, 'PROCESSOR_ENTRY', None):
procobj = procmod.PROCESSOR_ENTRY()

except Exception as e:
PY_COMPILE_ERR = f"{str(e)}\n{traceback.format_exc()}"
if print_error:
print(PY_COMPILE_ERR)

return PY_COMPILE_ERR, procobj

最后,将下方的IDAPython_UnLoadProcMod函数修改成下面这个样子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
def IDAPython_UnLoadProcMod(script, g, print_error=True):
"""
卸载处理器模块。
"""
pname = g['__name__'] if g and "__name__" in g else '__main__'
parent = sys.modules[pname]

script_fname = os.path.split(script)[1]
procmod_name = os.path.splitext(script_fname)[0]

# 尝试从父模块的属性中移除处理器模块
if hasattr(parent, procmod_name):
delattr(parent, procmod_name)

# 尝试从 sys.modules 中移除处理器模块
try:
sys.modules.pop(procmod_name, None)
except Exception as e:
print(f"Error unloading module {procmod_name}: {str(e)}")

PY_COMPILE_ERR = None
return PY_COMPILE_ERR

保存后重新打开ida,发现警告消失,问题解决。

参考文档:IDA 8.3运行报错,如何解决?