在运行时阻止客户端应用程序中的WCF消息记录

时间:2014-05-22 00:08:52

标签: c# .net wcf

我已经看到很多方法可以启用WCF消息日志记录,但我想阻止在客户端桌面应用程序(WPF或WinForms)中记录WCF消息?我担心一些高级用户会弄清楚如何通过编辑配置文件打开日志记录,并有办法存储我的应用程序发送到远程服务的敏感信息。如果用户知道他们正在做什么,它似乎对消息记录具有令人难以置信的控制。我搜遍了SO和MSDN,寻找一种方法来保护这个设置,并且无法通过编辑配置文件找到任何无法覆盖的内容。

1 个答案:

答案 0 :(得分:1)

计算机可以做的任何事情,用户都可以做。这是一个不可逃避的不可改变的法律。这就是为什么有Keygens,这就是为什么软件破解的原因,这就是为什么你的程序不可能生成消息,但不允许用户看到它。

你可以通过一个看门狗来检查是否启用了日志记录,然后抛出错误,让他们变得更难,但下面只是一个简短的列表,列出了他们可以做些什么来篡夺这种表面上试图逃避用户的行为。 ; s访问消息:

  • Fiddler / Proxy Server
  • MITM with self-signed certificate
  • Hook on SChannel functions exported from secur32.dll
  • 反编译在其计算机上运行的应用程序,可能会修改它以删除您包含的任何障碍物。这听起来很难,但比您想象的要容易得多。一些nop以及用于检测用户记录消息的所有聪明代码都已消失。
  • 在构建邮件的过程中进行内存转储。消息文本将在内存中等待重用,在发送后长(> 200ms)。
  • 使用调试器运行并在某些WCF函数上放置断点
  • 等...

忽略限制

在检查是否启用了跟踪方面,您可以使用如下构造:

private static bool IsWcfTracingEnabled()
{
    TraceSource ts = new TraceSource("System.ServiceModel.MessageLogging");
    return ts.Listeners.Count > 0;
}

将返回false

<system.diagnostics>
  <sources>
    <source name="System.ServiceModel.MessageLogging">
      <listeners>
        <clear />
      </listeners>
    </source>
  </sources>
</system.diagnostics>

true代表:

<system.diagnostics>
  <sources>
    <source name="System.ServiceModel.MessageLogging">
      <listeners>
        <clear />
        <add name="messages"
          type="System.Diagnostics.XmlWriterTraceListener"
          initializeData="c:\logs\messages.svclog" />
      </listeners>
    </source>
  </sources>
</system.diagnostics>

或者:

<system.diagnostics>
  <sources>
    <source name="System.ServiceModel.MessageLogging" />
  </sources>
</system.diagnostics>