簡體   English   中英

在運行時阻止客戶端應用程序中的WCF消息記錄

[英]Block WCF message logging in client application at run time

我已經看到很多方法可以打開WCF消息日志記錄,但我想阻止在客戶端桌面應用程序(WPF或WinForms)中記錄WCF消息? 我擔心一些高級用戶會弄清楚如何通過編輯配置文件打開日志記錄,並有辦法存儲我的應用程序發送到遠程服務的敏感信息。 如果用戶知道他們正在做什么,它似乎對消息記錄具有令人難以置信的控制。 我搜遍了所有SO和MSDN,尋找一種方法來保護這個設置,並且只能通過編輯配置文件找不到任何無法覆蓋的內容。

計算機可以做的任何事情,用戶都可以做。 這是一個不可逃避的不可改變的法律。 這就是為什么有Keygens,這就是為什么軟件破解的原因,這就是為什么程序不能生成消息,但不允許用戶看到它。

你可以通過監視器檢查是否啟用了日志記錄並拋出錯誤來使它們變得更難,但下面只是一個簡短的列表,列出了他們可以做些什么來篡奪這種表面上試圖逃避用戶對消息的訪問:

  • 提琴手/代理服務器
  • MITM帶有自簽名證書
  • 掛鈎從secur32.dll導出的SChannel函數
  • 反編譯在其計算機上運行的應用程序,可能會對其進行修改以刪除您包含的任何障礙物
    這聽起來很難,但比你想象的容易得多。 用於檢測用戶記錄消息的一些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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM