- 使用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
?
至此注入完成
?