none
將程式案裝在ProgramFiles(X86)之下 form 無法收到 sendmessage 的資訊 RRS feed

  • 問題

  • 大家好!

    請教各位前輩! 

    我有一支程式, 會接收另一支程式傳來的訊息! (用 sendmessage)

    這支程式在VS裏編譯正常, 執行也正常!

    接著我用installer 16.6.1 將它封裝成一個案裝檔!

    然後, 我如果正常裝我的程式安裝在預設的 ProgramFiles(X86) 之下時, 它可以執行, 但收不到訊號!

    如果安裝 C:\ 之下, 就可以正常收到訊號!

    我知道在 ProgramFiles & ProgramFiles(X86) 有權限的問題! 我之前因為程式需要記錄"設定檔"時也發現在這個問, 所以, 程式必需使用 "管理者權限" 執行, 才能正常寫入設定檔.

    但這次, 我只是單純接收訊而已! 為何會無法收到訊號呢? 而且, 我已使用 "管理者權限" 執行了!

    謝謝!

    ( 我的系統是Windows 10)
    • 已編輯 GaryChiang 2019年12月19日 上午 02:24
    2019年12月19日 上午 02:24

解答

  • 終於找到原因了!

    使用者介面特權隔離(User Interface Privilege Isolation,簡稱UIPI),是從Windows NT 6.0開始引入的技術。其目的在於防止粉碎視窗攻擊。通過結合強制完整性控制,使用者介面特權隔離阻止較低等完整性級別(Integrity level)的處理程序向較高等完整性級別處理程序的視窗傳送訊息,但也有一些訊息不被阻止。 Windows訊息是一種處理程序間通信機制,可被低等完整性級別的惡意軟體利用,在較高等完整性級別的處理程序上下文裡執行任意程式碼,可能允許特權提升。

    使用者介面特權隔離和強制完整性控制都不是安全邊界,它並不能完全抵擋粉碎視窗攻擊。使用者介面輔助功能程式可以通過在它們的應用程式清單(manifest)檔案中將「uiAccess」設為TRUE來繞過使用者介面特權隔離。這些程式必須位於Program Files或Windows資料夾中,且必須擁有有效的數位簽章。此外,一些訊息仍然被允許,例如WM_KEYDOWN,以便低完整性級別的程式傳送輸入到提升後的命令提示字元。最後,函式ChangeWindowMessageFilter允許中完整性級別的處理程序改變高完整性級別的處理程序能從低完整性級別的處理程序接收什麼訊息。



    • 已編輯 GaryChiang 2019年12月24日 上午 02:17
    • 已標示為解答 GaryChiang 2019年12月24日 上午 02:17
    2019年12月24日 上午 02:16

所有回覆

  • 是收不到訊息? 還是收到訊息後執行處理動作失敗?
    2019年12月20日 上午 12:27
  • 經過測試! 

    protected override void WndProc(ref Message m)

    這個函式還是有收到很多訊息! 如message code 32,132,512,675,4960等

    但, 74 (0X004A) 就收不到! 

    2019年12月20日 上午 06:41
  • 經過測試! 

    目前得到結果如下:

    1. 程式需要管理者權限, 是因為引用的dll會在程式目錄之下記錄log及資料檔, 因此dll無法更改, 所以, 只能 A. 安裝在其它目錄, 如 C:\ 之下, 或 B. 使用管理者權限執行程式!

    2. 程式使用了管理者權限, 為何收不到另一個程式傳送的訊息? 因為, 這二個程式必需要有相同的權限! 不同的權限無法傳送資料....這點, 我還不清楚為什麼會這樣! 只是實測之後, 發現的現像!

    2019年12月23日 下午 12:05
  • 終於找到原因了!

    使用者介面特權隔離(User Interface Privilege Isolation,簡稱UIPI),是從Windows NT 6.0開始引入的技術。其目的在於防止粉碎視窗攻擊。通過結合強制完整性控制,使用者介面特權隔離阻止較低等完整性級別(Integrity level)的處理程序向較高等完整性級別處理程序的視窗傳送訊息,但也有一些訊息不被阻止。 Windows訊息是一種處理程序間通信機制,可被低等完整性級別的惡意軟體利用,在較高等完整性級別的處理程序上下文裡執行任意程式碼,可能允許特權提升。

    使用者介面特權隔離和強制完整性控制都不是安全邊界,它並不能完全抵擋粉碎視窗攻擊。使用者介面輔助功能程式可以通過在它們的應用程式清單(manifest)檔案中將「uiAccess」設為TRUE來繞過使用者介面特權隔離。這些程式必須位於Program Files或Windows資料夾中,且必須擁有有效的數位簽章。此外,一些訊息仍然被允許,例如WM_KEYDOWN,以便低完整性級別的程式傳送輸入到提升後的命令提示字元。最後,函式ChangeWindowMessageFilter允許中完整性級別的處理程序改變高完整性級別的處理程序能從低完整性級別的處理程序接收什麼訊息。



    • 已編輯 GaryChiang 2019年12月24日 上午 02:17
    • 已標示為解答 GaryChiang 2019年12月24日 上午 02:17
    2019年12月24日 上午 02:16