Project Description
IDACSharp主要做两件事情:
1,C++/CLI编写IDA的IDACSharp插件,IDA启动插件时,IDACSharp启动一个CLR,然后调用C#编写的插件;
2,IDACSharp把IDA的SDK接口包装成为.Net接口,供C#插件调用。

新生命逆向分析团队唯一QQ群:1600800


**我不相信神话,我只相信汗水!我不相信命运,我只相信双手! **

NewLife的由来

NewLife是一个说不清的挂名组织,第一次提出这个名字是在2002年!
新生命开发团队是NewLife的主力,逆向分析是NewLife的一个分支(QQ群号1600800)。
一个成熟的开发团队,是很需要逆向分析支持的,比如第三方技术研究、程序Crash分析以及程序调试等。
当然,新生命开发团队也会尽其所能促进逆向分析的技术改进,编写这次IDACSharp插件就是其所擅长的东西。

13:46 2010/6/5

1,IDA常用函数封装完成
2,vb.c全部融入到VBKiller插件中
3,该版本仅为测试版,可能还有很多功能不够完善,希望大家能够向我提交BUG和各种VB格式资料
4,这次提供VBKiller的源代码,允许任何人修改,用于任何用途。注意:这只是开放源代码,而不是开源,我们不对任何后果负责!
5,强烈建议各位大大编写Delphi和MFC等各种格式的插件


三年磨一剑之IDACSharp

自2007年3月开始研究IDA以来,已3年有余!自认为对idc脚本比较熟悉,最大的成果就是重写老外的vb.idc为vb.c。期间还有其它大大小小的脚本。虽如此,仍感力不从心,idc脚本难以构建中大型应用(vb.c有2100多行)。
正如2005年我犹豫是否应该选择Java等高级语言以构建中大型应用,此时也在犹豫是否应该利用C++等高级语言编写IDA插件。
老外的一篇关于使用VB和C#编写IDA插件的文章点醒了我,除了C++,我们还有很多的选择。那时候开始,我选择了C#来做IDA插件,直到今天。
且不论使用C#来做IDA插件是否会成功,这研究的3年里,我得到了非常非常多的东西!

老外的思路是VB和C#做成COM,然后用C++包装,Easy,很容易做好一个插件。但是需要暴露IDA的接口给插件使用的时候,才发现那是一个登月工程。并且C#做成的COM,部署和调试都不方便。
后来向微软的大牛请教,得知一个新的方法,利用C++加载.Net运行时,从而启动C#插件。这下子漂亮多了,但是仍然解决不了暴露接口的问题。IDA的接口很多,大多数都是用不上的,其实只要实现了IDC中的几十个函数即可,于是我开始了登月工程,手工包装暴露接口,历时两年!
直到上个月,例行工作的时候,一时冲动,把包装项目改成CLR来编译,IDA居然还认!!!这可是巨大的发现,这意味着:可以直接使用C++/CLI实现IDA插件!
同时,看到网上更新了IDAPython,忍不住研究一下,看看它是如何实现的。原来它是通过SWIG做的包装,基本做到自动化。还发现,IDA接口本身就提供了对SWIG的支持。SWIG的资料不多,我想借助它来包装C#版本的时候,总是失败。想想算了,三年都过来了,也不在乎这一回,继续手工包装。因为是使用C++/CLI,工作量就大大减少了,同时有IDAPython在那里作为参考,找起接口函数来非常方便。
期间,还有一些小插曲,C++/CLI调用C#没有问题,C#调用C++/CLI编写的插件的时候就有问题了。原来C#类库项目引用C++/CLI项目失败,因为它的输出是plw,vs直接阻止。只好改名dll后调用。在使用的时候,还得用上dll的这一份拷贝,并且要放在IDA根目录才行。

一些额外的收获:
1,C#可以直接操作汇编(是Native Asm,不是IL)。通过委托,可以随意调用PE里面的任意函数,不管它共有私有,因为这个调用是汇编指令级的。
2,学习了.Net的核心机制,知道它是怎么工作的。
3,C#也可以给Native下钩子,结合第一点,就是爱怎么整就怎么整。
4,基本上,C++的开源项目,使用CLR编译后,都有办法供C#使用。
5,意志的磨练……

回到正题!
这是一个IDA插件,名为IDACSharp,同时又是C#插件管理器,它的作用就是充当IDA和C#的桥梁(双向)。
一共四个文件:
1,IDACSharp.plw是主插件,同时也是包装器,已经把常用的接口包装为.Net接口,该文件应该放在Plugins目录;
2,IDACSharp.dll跟IDACSharp.plw就是同一个东西,只是后缀不同而已,该文件应该放在IDA根目录;
3,CSharpLoader.dll是C#编写的插件管理器,放在CSharp目录下,IDACSharp.plw会找到并加载它;
4,IDATest.dll是C#编写的插件例子,列出当前IDA数据库前30个函数,双击跳转到函数所在位置,也是放在CSharp目录下。

IDACSharp尚未完工,CSharpLoader的插件管理还没有做,这块问题不大,重要的是,所包装的接口,绝大部分都还没有测试过,并且还有一些没有包装完成,打算在后面逐步完善!


大石头
nnhy(at)vip.qq.com
QQ群1600800
2010-05-06 03:19

Last edited Apr 17, 2011 at 3:40 AM by nnhy, version 3