- 使用ILSpy或Reflector 反编译N3000并导出解决方案,便于搜索方法代码
-
使用ILDASM生成中间代码D:\app\WG\AccessControl\IL\N3000.il
操作如下:(可参考)
打开目录C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin
运行ildasm.exe
通过IL DASM的界面,打开N3000.EXE文件
在文件菜单中使用转储,转储IL文件为D:\app\WG\AccessControl\IL\N3000.IL
-
用NOTEPAD++打开IL文件
-
公开wgconfig类
- 搜索beforefieldinit WG3000_COMM.Core.wgAppConfig
-
- 修改private为public
-
公开icPrivilege
- 搜索beforefieldinit WG3000_COMM.DataOper.icPrivilege
- 修改private为public
-
公开icConsumerShare
- 搜索beforefieldinit WG3000_COMM.DataOper.icConsumerShare
- 修改private为public
-
公开icConsumer
- 搜索beforefieldinit WG3000_COMM.DataOper.icConsumer
- 修改private为public
-
公开icControllerConfigureFromDB
- 搜索beforefieldinit WG3000_COMM.DataOper.icControllerConfigureFromDB
- 修改private为public
此时agent项目应该能编译通过,编译前会调用C:\Windows\Microsoft.NET\Framework\v2.0.50727\ilasm.exe将N3000.IL文件编译为N3000.EXE,代表项目会调用N3000.EXE中的方法
C:\Windows\Microsoft.NET\Framework\v2.0.50727\ilasm.exe n3000.il /exe /output=n3000.exe
-
注入QGate.Spy.DLL
- 搜索void Main(string[] cmdArgs)
- 查看反编译出来的 N3000.EXE的源码中的入口代码,寻找合理的注入位置,一般选择在登录后,主窗体加载前
- 从void Main开始搜索frmADCT3000,在IL文件中找到相应位置
- 添加新行,注意行号要根据上下文确定
IL_07c2: call void [QGate.Spy]QGate.Spy.ClassSpy::Start()
- 保存,重新编译N3000.EXE
至此注入完成