none
有關執行檔案加密 RRS feed

  • 問題

  • 開發工具:Visual Basic 2005

    我之前有做過用DES加密文字檔,可是如果想要加密一個執行檔可能嗎?

    因為我想要把檔案放在網路讓方便使用者更新,可是這樣的話如果沒有加密,會被別人直接下載,因此我想說加密以後,寫個額外程式把他下載到本機上,解密後,覆蓋掉主程式,然後把主程式打開,關閉額外程式這樣

    現在其他的部分都會了,只剩下執行檔加密的問題,請問執行檔有辦法加密嗎?(我之前是寫一個加密字串的,這個好像不能用在執行檔上耶)

    麻煩高手告訴我吧~謝謝!

    2007年2月6日 上午 04:20

解答

所有回覆

  • 檔案的加密是使用 FileStream 的方式,先把檔案讀進來,
    接著將讀寫模式打開成 FileAccess.Write,取得檔案的 Length 之後,
    使用 System.Security.Principal 底下的 SymmetricAlgorithm,定義好 .Key 跟 .IV,
    再用 System.Security.Cryptography 底下的 ICryptoTransform,
    CryptoStream 等物件來進行 Stream 的加密..

    不過,如果只是要讓原本的執行檔無法執行,
    您也可以考慮直接加入自行定義的檔頭,
    等到下載到 Client 端之後再以程式將自定檔頭移除就行..

    2007年2月6日 上午 04:52
  • 謝謝!

    我將檔案用二進位讀到byt() as byte裡面然後CryptoStream.Write(byt, 0, byt.Length)

    然後把byt用二進位存回檔案

    這樣對嗎?

    還有:

    "不過,如果只是要讓原本的執行檔無法執行,
    您也可以考慮直接加入自行定義的檔頭,
    等到下載到 Client 端之後再以程式將自定檔頭移除就行.."

    這個的意思是不是在檔案的頭寫入一些數據,讓他變成沒辦法讀取的執行檔,然後Client端再把他那個開頭的數據移除掉啊?

     

    2007年2月6日 上午 05:20
  • 意思是只要讓 Windows 無法辨識為執行檔就可以了。

    不過這樣的話,我倒是覺得用 .Net 2.0 內建的壓縮功能直接壓縮,就無法執行了,這樣在網路上傳輸還會更小。

    2007年2月6日 上午 05:40
    版主
  • > 這個的意思是不是在檔案的頭寫入一些數據,讓他變成沒辦法讀取的執行檔,
    > 然後Client端再把他那個開頭的數據移除掉啊?

    是的,就是這樣,

    璉大寫的方法也可以參考!

    2007年2月6日 上午 05:52
  • 謝謝!

    嗯!我試試看找一下壓縮的方法,如果有問題再請教您!

    如果是先加密後壓縮來省空間這樣會不會比較好啊?

    (因為程式如果不加密只是壓縮的話,應該還是可以解壓縮,這樣還是有可能被別人下載以後使用)

    2007年2月6日 上午 06:07
  • 如果你仍然要加密,請先壓縮後加密。

    加密過的檔案編碼已被擾亂,不利於壓縮,壓縮過的檔案再加密,就沒這困擾,跟原先加密以每 8 bytes 為單位相同。

    所以不要先加密後壓縮。

    2007年2月6日 上午 06:13
    版主
  • 喔~謝謝提醒~

    只是我剛剛找了一下,好像找不到跟壓縮相關的文件

    要用什麼關鍵字查詢比較好呢?

    VB 2005有支援ZIP壓縮嗎?

    2007年2月6日 上午 06:20
  • 沒有支援 Zip (RFC 1950) ,有支援 GZip (RFC 1952) 跟 Deflate (RFC 1951)

    在 System.IO.Compression 類別下。

    我自己用的程式碼:

    檔案處理:http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Module&Module=16

    DES:http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Module&Module=33

    GZip:http://tlcheng.twbbs.org/TLCheng/Net/NetList.aspx?Action=Module&Module=35

    所以可以變成:

    假設 desKey, desIV, strSource, strTarget 已知,

    執行檔壓縮、加密:

    MySaveBinaryFile(MyDESEncryptBytes(MyGZipCompressBytes(MyGetBinaryFile(fileSource))), fileTarget)

    解密、解壓縮回執行檔:

    MySaveBinaryFile(MyGZipDeCompressBytes(MyDESDecryptBytes(MyGetBinaryFile(fileSource))), fileTarget)

    2007年2月6日 上午 07:00
    版主
  • 謝謝啦!!

    原來您已經寫成了函數了,這樣用起來真的很方便,順便研究一下裡面的寫法吧~

    您的網站的資源好多喔!

    謝謝你們的幫助!我已經知道怎麼寫了!!

    2007年2月6日 下午 05:05