1. 程式人生 > >利用certutil.exe實現在批處理(bat)中嵌入可執行檔案或者各種媒體、圖片之類二進位制檔案的簡單方法

利用certutil.exe實現在批處理(bat)中嵌入可執行檔案或者各種媒體、圖片之類二進位制檔案的簡單方法

實際上利用certutil.exe 把二進位制檔案(包括各種檔案,exe可執行程式,圖片,聲音,mp3) 經過base64編碼為文字,可以實現把這些檔案嵌入到批處理程式碼中。

有什麼用?:
舉個例子,批處理經常需要依賴其它命令列工具實現自動化指令碼,如果把這些工具轉成文字嵌入到程式碼中,貼到網上就可以直接把可用的程式碼發出去了。不需要上傳附件。

缺點:
base64編碼後的文字比原檔案長1/3,加上如果依賴的檔案體積大,轉換出來的文字內容會非常長。這個缺點影響了這個玩法的實用性。
xp 中沒有certutil 這個工具,影響了適用範圍。
如果依賴多個檔案,需要用winrar 打包成exe 自解壓檔案,然後再編碼。

certutil 是一個證書工具,功能挺豐富的,引數非常多,我這裡只擷取和base64編碼相關的幫助資訊:

C:\Users\Administrator>certutil.exe /?

動詞:
  -dump             -- 轉儲配置資訊或檔案
  -asn              -- 分析 ASN.1 檔案

  -decodehex        -- 解碼十六進位制編碼的檔案
  -decode           -- 解碼 Base64 編碼的檔案
  -encode           -- 將檔案編碼為 Base64
。。。

用法如下:
我用一個小mp3檔案示範:

第一步,先cmd中執行certutil -encode 編碼檔案:

E:\Game\New Heroes3\Mp3>certutil -encode hello.mp3 hi.bat

↑↑↑上面的命令列執行完後,得到一個檔案hi.bat,用記事本能看到一大串,base64的字母。

第二步,用編輯器開啟hi.bat
不要修改檔案其中的內容,只在檔案頭部寫入你自己的批處理程式碼,用certutil -decode把文字還原成原檔案,
如果你把以下程式碼存為xx.bat 並執行,應該可以聽到這個MP3檔案的聲音。

@echo off
certutil -decode "%~f0"
hello.mp3 start hello.mp3 exit /b 1 -----BEGIN CERTIFICATE----- /+MgxAAUcQZgA0YYALhaemECCEECZNO7u7vGiIiI/7u7u6InxE57v+j+ifoBiz4g cDgYlHMLv+oH35QEP5TqB8//8HDgnB/g+D5d/8oc8v+UB+GJR3BCJw+XD/8u8EEA QAAUCgUCgUD/4yLECRWRPtJfjUAAoFAoFAe997lwJ35Twn+Wfemd/M3TCjiKAuH6 ThO2rqKA0MQ986vujKj97ehhiRAoIFAAKDH4Y9/0qdb/8utJp/nL/oh7w+go9H63 /8UVYYgEAna26X/FY2gtJAX/4yDEDheD7u4fxygDhs/mGECXznOHxh2850FA0Vv8 7ixf0cit7UuX60Mchn/Re+lUjdVexLlZE60OUz/sv///T/NVpaliArIZXXvXf/83 /dZNGrKRmK6v/RR2vceBkMxSptrrS/1hQf/jIsQLFZrm/j44RN4BJ/RRw02+AaEL 8jCEPgNCEL9hCEMHxCD/PNITPUVBka2KmaiI6dPT9Xrovun///R/dWS0UwMdwZAI DB0FRhpLf5XUxR1TDBqz9aFKyBQAHIG2N388oIIJItv9L//jIMQQGALW5X5SBJoG oR3PUwSaUaLjKf+bIFKv2lBp7vbtyjHO/1chDnf/hGVySE0JfRmIme9Gp79Eyf7f ////3kOc5zgY4QQQMCAEHO1dpPxI6wMZMo4aD7Hf6IEGASpG3Ab9SqUD/+MixAsW c771/ihFVoM39Dv+YSOHCfKUpBMU+GSHyFEFNDdcTCIAF5poYP+AHNETRkvzIxn9 powA9f/2nd7HawcwQIxlR0d15e9X2r7///2pedetTijkDMRG3D4hCAm0ko/2JDkG YFIG/+MgxA0XS7Lh9lHE+7Hh/5QMH/zAIBL/oPitv9Qqx23U44C3+p4ebuupxgjL /kI//IFbp9f+5Fb/t/kQopWR2SzBArt/p/6F/9v+jFnJMqqims6KwxGVxqvJCbjt 1YzIAh2KOv5gViP/4yLEChRZavV+CkRCMiX/DgRf5wMCAW/3K/9Smf+iobznoqP+ qFMKa0H0AZ6osaDpsHwuBCQdsFnHTV/8YKEE8FFVjDzWe7/W1zMXvLKBlhse9inq Ep/zEScFZExJVXsBIEwHQpPeyp3/4yDEFBQZLsgKaxKQiWVR2BEsnJNMDgwNzA7R IkTWdhNYqgERERJPUTSXjTT2E2nNDMh589ZFkamh4Kig5H////auJk////9VNQHv //3/FcFJ3lCEEhVP7kxQKjNfDDSQOgETipY2wP/jIsQeFECG1B5STIBwKhoMmToN JHAU6sNhJ9VA0VGgJbEstsSq/+zG8RQ6w2Gjx14amdV7P/sm7S/vLU/p/e8HbbbZ /mYX5Iugggyx1CxINsdGVQQ+hrasb9hJdI0CiocLm2H3yxCec//jIMQpFHDexB9Q KADMBeZDO1aiHAv2rFOqxOrHvIgZ7xXezcxdWJjKbZdtrWaWbtiufbotrZPTSObk 6nZFkDFOrmJKRrt1p39vw9asCwqiptI09RkRU1zxUiGKqjB8b0IRq8NIes/4/+Mi xDIXkXakAZhAAKk3F/n/c8SSIR0vfMyMIHuYyqtcRK//vsd1uenTpT2/7/P/3vRf Z+vov91a1QD3SEsiYyVJQPFTaKlxcsfn86WVZZVMRjEyqjnRyYFYZpZbswZNjFWG aOrQVQOu/+MgxC8fw2J8y5hAAGNVhmj/yQ9DkagKiZVdmn//GDyjxXVIVYZpVY// /u7huJmRUYzSqwzSqx///+cqipC050k5TSzarDXKrw3/////axNSTWrWUcoKlitX //4lEuXWCCAKAFCFBY7/4yLECxRq9kQXyBAAGirKKmrsx1Q1///KXK3Q3//lL/// /KX//0No/KXL//MbMbUpXl/5S0MZkMbKUu1DVLlKWhhQwGoKneJYKuEQcLfrO8Gv 8SpMQU1FMy45Ni4xqqqqqqqqqqqqqqr/4yDEFQAAA0gAAAAAqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqg== -----END CERTIFICATE-----

原理:
觀察可以知道,檔案中 從”—–BEGIN CERTIFICATE—–” 之後的內容是base64編碼,
而certutil 會忽略其它內容,這個標籤才開始解碼base64。