使用IDAPython开发复制RVA的插件

在逆向的过程中经常遇到一个问题,由于ASLR的原因,IDA中代码的基地址跟x64dbg等调试器中的对应不起来。一般情况下大家都会选择禁用掉ASLR或者修改IDA中的镜像基地址,但是这两种方式都缺点,禁用ASLR可能对dll没有用,改IDA中的基地址的话需要每次调试都要重新改一下。我一直比较纳闷IDA为什么没有直接加一个复制RVA和跳转到RVA的功能(但是却有个跳转到文件偏移的功能),网上找了一下也没有发现有啥插件能实现这个功能,没办法只能自己动手丰衣足食了,同时简单记录一下开发过程。搭建开发环境比较简单,IDE选择的是VSCode+Python插件,想要VSC能识别到IDAPython的接口,需要在启动前先设置PYTHONPATH环境变量指向IDA目录下的“python\3”这个目录,然后就可以正常的开发IDAPython代码了,对IDAPython的模块也可以有代码提示。然后是找IDAPython的API,这个官网上的文档非常粗糙,基本上就是把注释弄出来搞成了个文档,还不如直接看API的注释。后来发现了这个repo:,有一定的帮助,但是没有找到获取光标所在位置的地址的方法。后来想到中有用到这个功能,于是去翻了一下代码:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 # handler for Patcher menu def patcher( self ):      # be sure that this arch is supported by Keystone      if self .kp_asm.arch is None :          warning( “ERROR: Keypatch cannot handle this architecture (unsupported by Keystone), quit!” )          return        selection, addr_begin, addr_end = read_range_selection()      if selection:          # call Fill Range function on this selected code          return self .fill_range()        address = get_screen_ea()        if self .opts is None :          self .load_configuration()        init_assembly = None      while True :          f = Keypatch_Patcher( self .kp_asm, address, assembly = init_assembly, opts = self .opts)          ok = f.Execute()

这个get_screen_ea()就是获取光标位置地址的方法。除此之外怎样在右键菜单中添加菜单项的代码也有了,基本上照着写就行。完成后的基本功能有三个,可以在反汇编界面和F5界面直接右键复制当前位置的VA、RVA、x64dbg格式的RVA,也就是RVA开头加了个“:$”。 完整代码地址:,直接下载zip然后把XCopy.py放到IDA的plugins目录即可。


比丘资源网 » 使用IDAPython开发复制RVA的插件

发表回复

提供最优质的资源集合

立即查看 了解详情