問 有關 windows 下,檔案被複製後的戳記 |
答題得分者是:P.D.
|
ANDY8C
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:114 回覆:582 積分:299 註冊:2006-10-29 發送簡訊給我 |
原始檔案 AA.EXE (1) , DELPHI 產生的 EXE 檔
若 AA.EXE(1) 被複製後,產生 複製-AA.EXE(2) 若 複製-AA.EXE(2) , 再被複製一次後,產生 複製-複製-AA.EXE(3) 請問 WINDOWS 有何戳記(存取時間或狀態) , 可以用 DELPHI 來判斷出 AA.EXE(1) , AA.EXE(2) , AA.EXE(3) 的不同嗎 ?? 也就是 AA.EXE 內部可以寫一段程式,可以讀取 AA.EXE 自己的 "某些記錄" ,告訴自己是不是被複製後的檔案或已被複製多少次. 目的 : 不允許被複製後的 EXE ,到處執行 !! 謝謝您
------
--------------------------------------- 偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩. |
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
如果是以Delphi寫的, 不管程式如何複製, 其 Form的 caption(Title)應該都是不會改變的,
所以不如換個角度來想, 把AA.EXE 鎖住只能執行一次, 那複製的程式, 也都是與AA一樣, 所以所有程式只能跑一支, 那複製下來的也沒有什麼作用了! ===================引 用 ANDY8C 文 章=================== 原始檔案 AA.EXE (1) , DELPHI 產生的 EXE 檔 若 AA.EXE(1) 被複製後,產生 複製-AA.EXE(2) 若 複製-AA.EXE(2) , 再被複製一次後,產生複製-複製-AA.EXE(3) 請問 WINDOWS 有何戳記(存取時間或狀態) , 可以用 DELPHI 來判斷出 AA.EXE(1) , AA.EXE(2) , AA.EXE(3) 的不同嗎 ?? 也就是 AA.EXE 內部可以寫一段程式,可以讀取 AA.EXE 自己的 "某些記錄" ,告訴自己是不是被複製後的檔案或已被複製多少次. 目的 : 不允許被複製後的 EXE ,到處執行 !! 謝謝您 |
Victor4022
中階會員 ![]() ![]() ![]() 發表:0 回覆:76 積分:90 註冊:2011-02-20 發送簡訊給我 |
您的需求可能比較難以程式邏輯實作, 因為"複製"的行為模式太多種,例如: 包括把檔案從 C:\ 剪下後貼到 D:\, 事實上File system 會發出以下動作:
1. C:\ 發出檔案刪除的 notify 2. D:\ 發出檔案新增的 notify 可是對操作的使用者而言, 我們的認知只是"檔案搬移", 並不是複製(其實可以把複製想成"新增") 另外, Windows copy file 只會變更 CreatedTime/ LastWriteTime/ LastAccesstime 的"LastAccesstime"這個時間戳記, 除非檔案本體有被修改或是搬移到不同磁區(才會改變CreatedTime 或 LastWriteTime) 小弟建議是: 1. 如果只是單純想讓這支程式同時只能執行一次, 可用 windows mutex 這個 kernel object 2. 如果不想讓程式到處"複製到他台電腦"執行, 可以考慮第一次執行此程式, 進行註冊的動作(寫 Registry/ 寫ini到 local/ 寫個觸發動作到網路上某個檔, 某個database engine, 某個網頁), 透過一些設計放行的流程, 讓有權的人決定哪些電腦能執行 3. 如果真的硬要限制"不允許被複製後的 EXE"這個需求達成的話, 可以考慮每一次開啟程式時, 讓程式把自己載入記憶體內, 每次執行都在檔案尾端寫入特徵值(例如當前時間戳記),並且在 Registry 或 ini 內也寫下同份特徵, 每次程式啟動時都同時檢查此兩項特徵, 再決定允不允許執行, 這篇 "TMemoryStream 如何執行 exe " http://delphi.ktop.com.tw/board.php?cid=30&fid=72&tid=101338 可以滿足這一點實作面的方式 不過第三點, 會被某些防毒軟體識為惡意程式(因為會更改本身程式的內容), 而且您的檔案如果有經過簽章, 就不適合這個方式 ===================引 用 ANDY8C 文 章=================== 原始檔案 AA.EXE (1) , DELPHI 產生的 EXE 檔 若 AA.EXE(1) 被複製後,產生 複製-AA.EXE(2) 若 複製-AA.EXE(2) , 再被複製一次後,產生複製-複製-AA.EXE(3) 請問 WINDOWS 有何戳記(存取時間或狀態) , 可以用 DELPHI 來判斷出 AA.EXE(1) , AA.EXE(2) , AA.EXE(3) 的不同嗎 ?? 也就是 AA.EXE 內部可以寫一段程式,可以讀取 AA.EXE 自己的 "某些記錄" ,告訴自己是不是被複製後的檔案或已被複製多少次. 目的 : 不允許被複製後的 EXE ,到處執行 !! 謝謝您 |
ANDY8C
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:114 回覆:582 積分:299 註冊:2006-10-29 發送簡訊給我 |
感謝 P.D. 及 VICTOR4022 前輩的回覆 ,
感覺答案似乎已經浮現,只差實作的過程 假設我幫 甲 客製化一支小軟體,僅有車馬費的收入 客戶也答應下次有同樣需求,會再找我,付另一次費用,聽了自我感覺良好......(賣軟體常會被客戶騙,也願意被騙...) 所以這次的售價,因客戶很 "柪" ,下次,下下次...,因業務經驗不夠,幻想真會賣出很多次, 所以軟體價格只能無情的被砍,說實在的,對軟體的開發及接案信心會打折... 因為我們....是做軟體的,所以業務能力,遠低於技術能力.... 至少我是如此 我問題的實務思考點很簡單, 當您某一天再去服務時,您會發現您的軟體會出現在不同的 PC, 因為寫的太好了,所以客戶安裝都可以 "自動化" ,不過心情不會很好... 所以我才會想 "客戶自己複製" 的時候,該複製後的 EXE 檔案,不能動作. 當然,也有人說可以掛 "尿袋" .... KEYPRO 的東西,我是想省下這部份的錢 想由簡單的檔案狀態, "整整" 客戶就好. 謝謝您
------
--------------------------------------- 偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩. |
Victor4022
中階會員 ![]() ![]() ![]() 發表:0 回覆:76 積分:90 註冊:2011-02-20 發送簡訊給我 |
再仔細看完您的需要,突然能體驗您的心情,小弟之前有幫忙公司購買外國一家元件 (LMD Innovative),
他們的做法小弟很喜歡,簡短的與您分享一下: 1. LMD Innovative 會對付款購買的客戶,提供一支專屬這個客戶的註冊程式。 2. 我們拿到此註冊程式後,在自己開發環境上安裝並進行註冊。 3. 註冊後,可以使用該註冊工具 (LMD RegUtility),瀏覽自己的購買產品資訊(包括Userid/ Password/ 版本別/ 產品下載網址)。 4. 可透過註冊工具,連到 LMD Innovative 官方客戶下載網站,可以瀏覽與下載自己曾經購買元件版本的更新版或Help。 5. 該網站上,登入後的首頁最上方,就有明確的登入資訊,清楚告訴我們以下資訊: a. 前次登入時間。 b. 總登入次數。 c. 總下載次數。 您可以把這想法,轉變成適合您的控管或"善意提醒使用者"的方式,來讓使用者知道他們使用的程式,必須被註冊、而且下載更新時會被記錄次數, 如果有公司或有其他人士刻意散佈註冊程式的話,官方其實很好調查是由哪一個當初購買的使用者散佈出去。 |
ANDY8C
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:114 回覆:582 積分:299 註冊:2006-10-29 發送簡訊給我 |
您這方法不錯 !! 應該是如此做...
但我的軟體是 win32 模式,非 Browser Base 或 Web Base 另外,有些客戶的 pc 是無法上 internet , 無法做遠端驗證 謝謝您 ===================引 用 Victor4022 文 章=================== 5. 該網站上,登入後的首頁最上方,就有明確的登入資訊,清楚告訴我們以下資訊: a. 前次登入時間。 b. 總登入次數。 c. 總下載次數。 您可以把這想法,轉變成適合您的控管或"善意提醒使用者"的方式,來讓使用者知道他們使用的程式,必須被註冊、而且下載更新時會被記錄次數, 如果有公司或有其他人士刻意散佈註冊程式的話,官方其實很好調查是由哪一個當初購買的使用者散佈出去。
------
--------------------------------------- 偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩. |
mitchellhu
一般會員 ![]() ![]() 發表:23 回覆:53 積分:15 註冊:2007-06-12 發送簡訊給我 |
之前幫客戶開發軟體也有類似的情況。不過是客戶的資訊㽞位要求,是否可以防止使用者自已copy exe拿到別的地方(競爭對手公司)使用。
後來討論出的方案是,exe執行時,會先檢查驗証作業,這個驗証用一個很笨的方法作的。 因為每部電腦的cpu id 都有各自的編號,我就取出編號後,用md5處理過。 這個md5的處理程式是放在資訊管制人員的手上。 使用者第一次執行exe檔時,會顯示一組字串(就是該部pc 的cup id),這時user就得將這能字串報給資訊管制人員。 資訊管制人員,就run md5的加密程式,產生一個ini檔,內有加密後的md5值。再將這個ini檔給user。 user將ini檔放置到該部電腦的特定位置,這時再執行一次exe檔時,程式會比較md5加密值是否相同,相同exe才會續執行,不同則無法使用。 細部的寫法我記不太清楚了,有需求請告訴我。希望 能幫到你。 |
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
ANDY8C
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:114 回覆:582 積分:299 註冊:2006-10-29 發送簡訊給我 |
就是如此啦 !
那是 一支 B.EXE 就好,還是 A.EXE B.EXE 各一支 可以全都的動作,在一支程式中全部完成嗎 ? ? ===================引 用 P.D. 文 章=================== 經過你的說明, 我曾經做過一支程式 把要執行的程式(A)放在這支程式(B) 然後到客戶那邊安裝(就是執行 B), 這時B程式就會把A解出來(利用TMemoryStream), 不僅如此, 我會在A的尾端加入當時存入時間做識別, 這有點像駭客(可能會遭部份防毒視為狀況, 但卡巴沒有問題) 而在A程式中會去檢查這個外加的時間註記與該檔的日期時間 是否match, 如果不match就認定是不合法, 這樣是否是你想要的?
------
--------------------------------------- 偶爾才來 KTOP ,交流條碼問題,在 FB [條碼標籤達人] 社團留言,感恩. |
Victor4022
中階會員 ![]() ![]() ![]() 發表:0 回覆:76 積分:90 註冊:2011-02-20 發送簡訊給我 |
可以的, 小弟就是參考之前 P.D. 大提問的內容, 才想到有這招 :) 如下
>> 3. 如果真的硬要限制"不允許被複製後的 EXE"這個需求達成的話, 可以考慮每一次開啟程式時, 讓程式把自己載入記憶體內, 每次執行都在檔案尾端寫入特徵值(例>> 如當前時間戳記),並且在 Registry 或 ini 內也寫下同份特徵, 每次程式啟動時都同時檢查此兩項特徵, 再決定允不允許執行, 這篇 >> "TMemoryStream 如何執行 exe " http://delphi.ktop.com.tw/board.php?cid=30&fid=72&tid=101338 可以滿足這一點實作面的方式 >> >> 不過第三點, 會被某些防毒軟體識為惡意程式(因為會更改本身程式的內容), 而且您的檔案如果有經過簽章, 就不適合這個方式 ===================引 用 ANDY8C 文 章=================== 就是如此啦 ! 那是 一支 B.EXE 就好,還是 A.EXE B.EXE 各一支 可以全都的動作,在一支程式中全部完成嗎 ? ? ===================引 用 P.D. 文 章=================== 經過你的說明, 我曾經做過一支程式 把要執行的程式(A)放在這支程式(B) 然後到客戶那邊安裝(就是執行 B), 這時B程式就會把A解出來(利用TMemoryStream), 不僅如此, 我會在A的尾端加入當時存入時間做識別, 這有點像駭客(可能會遭部份防毒視為狀況, 但卡巴沒有問題) 而在A程式中會去檢查這個外加的時間註記與該檔的日期時間 是否match, 如果不match就認定是不合法, 這樣是否是你想要的? |
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
說是兩支也可以, 說一支也行, 因為是 B 包 A, 但是B不能發給客戶, 而是由我們親自到客戶那邊, 透過 B 來做出 A,
而A才是我們真的要給客戶的, 但已被B包入變成B.EXE, 再透過 TMemoryStream解出來, 所以是B對A進行動手腳 的勾當(就是說, 你要對A做什麼樣的加密或加殼, 都是寫在B中, 但這有一個限制, 就是 A不能太大, 你不能說把一個 A.EXE可能是10多M的檔給包進來, 這可能會引發TMemoryStream解不開, 不過極限到那裡, 我也沒有測過, 一般 我做的多半是1M多的檔, 還是ok的) ===================引 用 ANDY8C 文 章=================== 就是如此啦 ! 那是 一支 B.EXE 就好,還是 A.EXE B.EXE 各一支 可以全都的動作,在一支程式中全部完成嗎 ? ? ===================引 用 P.D. 文 章=================== 經過你的說明, 我曾經做過一支程式 把要執行的程式(A)放在這支程式(B) 然後到客戶那邊安裝(就是執行 B), 這時B程式就會把A解出來(利用TMemoryStream), 不僅如此, 我會在A的尾端加入當時存入時間做識別, 這有點像駭客(可能會遭部份防毒視為狀況, 但卡巴沒有問題) 而在A程式中會去檢查這個外加的時間註記與該檔的日期時間 是否match, 如果不match就認定是不合法, 這樣是否是你想要的?
編輯記錄
P.D. 重新編輯於 2011-09-02 10:44:32, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |