星期五, 3月 27, 2015

判別 .NET dll「能在哪用」

安裝 .NET Framework SDK 後,有個名叫 corflags.exe 的命令列程式能列出(甚至修改)類似以下的結果:
  • PE: PE32
  • ILONLY: 1
  • 32BIT: 1
解讀也是需要點技巧的:
  • anycpu: PE = PE32 / 32BIT = 0
  • x86: PE = PE32 / 32BIT = 1
  • x64: PE = PE32+ / 32BIT = 0
主要參考這篇文章

星期一, 3月 23, 2015

PostgreSQL 接受遠端連入

這真的是很淺的問題,但沒有經驗就是能卡很久。pg_hba.conf 要修改,加上紅字的部份範例如下:
  • host all all 127.0.0.1/32 md5
  • host all all 172.16.0.1/16 md5

星期五, 3月 13, 2015

增加機碼的副作用一例

使用 SmartPackager 錄製任務前後的快照相比,得知新增「近端區域網路」會異動兩種看似重複的機碼:
  • HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\contoso.com\www
    • http (REG_DWORD: 1)
  • HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMapKey
    • http://www.contoso.com (REG_SZ: 1)
後者是不需要的,而且若留著會有嚴重的副作用:鎖住使用者手動編輯的功能。

用機碼新增近端區域的網站,擋我者死?

需求是:內部使用者都要在「政府組態基準」環境,上一個新的網路應用程式(假設在 http(s)://www.contoso.com)工作,而且必須用到一個已簽署、安全的 ActiveX,所以重點是 IE 要知道這不是網際網路區域,而是「近端內部網路」。

(錯的)做法:在每部電腦上增加以下機碼
  • HKLM\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Domains\contoso.com\www
    • http (REG_DWORD: 1)
    • https (REG_DWORD: 1)
表面上這是可以達成需求的,但使用者實際測試後反映,他們原先各自設了一些屬於近端內部網路的位址都不見了!所以這個太過霸道的作法並不可行。後來研究的結果,把紅字部份刪掉,這個新的機碼位置就既可以增加新位址,又保留個人設定。

一段後話:透過瀏覽器的設定,使用者並不會看到 http(s)://www.contoso.com,所以變成有點難判別他是否做過了這件事。

已簽署的 ActiveX 未出現下載安裝提示

整理目前遇過的幾種可能與解決方法:
  • 已在瀏覽器的「管理附加元件」清單,但被停用或限制在特定的網站才能使用。
  • 瀏覽器設定被改過,可以全部恢復成預設值、重啟電腦來解決。
  • 使用者帳戶控制(UAC)被關閉,可以恢復成預設值、重啟電腦來解決。
  • 部署在近端(例如 http://machineName/index.html),也啟用了預設是關閉的近端區域,雖然不會提示,但是會直接下載安裝。
  • 相同的程式名稱與 Class GUID 已註冊,可以用這兩種搜尋條件分別找一次,刪去相關的機碼。
  • 在 Windows Server 等級的作業系統,瀏覽器與一般不同,雖是能調整,但應該想想這種環境本來就不太對。

製作 *.msi 安裝執行檔

為了「安裝」這件事,過去常用 NSIS 將檔案、指令包成 *.exe,目的是能達成,但有點陽春。最近被逼著要 *.msi,主要是為了兩個好處:派送、反安裝。
搭配的工具是 Smart Packager,用法大致是:錄下安裝的所有工作(複製檔案到定點、執行批次檔、編輯群組原則或註冊機碼等),再過濾掉一些雜訊,測試,存成 msi。
光是這樣給使用者還不夠,因為「發行者不明」,可以用 signtool 外覆一個數位簽署。

星期二, 3月 10, 2015

已簽署的 ActiveX 出現怪異的資訊列提示

這可說是我測試過這麼多 ActiveX 下載、安裝、啟用過程中最討厭,也是最搞不懂的結果了。如今終於確認其中一種(不敢說是唯一)成因,有幾個要件:
  • InstallScope = machine
  • 檔案所在目錄的賦予某些人的權限不足,例如 User1: RW, User2: RO, User3: None。權限不足的使用者就會看到這個資訊列提示。
  • 註冊機碼沒有問題

星期四, 3月 05, 2015

當網際網路區域已簽署的 ActiveX 遇上政府組態基準(GCB)

簡單來說,即使是已簽署的 ActiveX 控制項,只要遇上套用「政府組態基準」的電腦,就無法下載安裝執行。在此將整個測試環境與解決步驟列出來:
  • 安裝 Windows 7,內建的瀏覽器是 IE 8。這是目前「政府組態基準」唯一允許的用戶端電腦環境。
  • 在網管眼中,要讓多部電腦套用「政府組態基準」,應該透過群組原則派送比較有效率,但這裏只是做驗證,所以能改到一部電腦上就夠了。請到行政院國家資通安全會報技術中心下載「LocalGPO 安裝程式」(工具)、「政府組態基準內容」(規則集,分別針對作業系統、防火牆、瀏覽器)。
  • 把 LocalGPO 安裝好,用系統管理權限執行,會出現命令列視窗。
  • 政府組態基準內容共有七個以 GUID 為名的目錄,在上述命令列視窗逐一執行 cscript LocalGPO.wsf /Path:"<PATH_TO_GUID>"。
  • 重啟電腦,此時便完成「政府組態基準」的套用。
  • 以系統管理身分登入,執行 gpedit.msc 群組原則編輯,找到 Computer Configuration -> Administrative Templates -> Windows Components -> Internet Explorer -> Internet Control Panel -> Security Page -> Site to Zone Assignment List,先設為 Enabled,並在此新增一筆資料,名稱是含有 ActiveX 網頁的協定與完整網域名稱(例如 http://abc.com),值是 1(代表近端內部網路)。
  • 改完後,這個 FQDN 就不再屬「網際網路區域」,當首次造訪,網頁上的 ActiveX 就會直接提示使用者允許下載安裝,連「資訊列提示」步驟都跳過,而且管理附加元件的相關狀態是「啟用」,代表執行也應該沒問題。