好多工具都是python寫的,若是目標機器是linux的話自帶python環境能夠很方便的運行這些工具,可是windows下是不自帶python環境的,因此一種辦法是直接在目標環境安裝一個python,另一種就是直接在內存加載python腳本。python
而ironpython
能夠將python腳本轉成.net
形式在內存中運行,兩個工具能夠達到目的:linux
silenttrinity
;利用git將代碼克隆到本地,而後使用vs2019
打開後,再解決方案右鍵-恢復NuGet
包。git
Main
函數開始,有兩種方式指定python
腳本內容:github
--script
讀取的是明文形式的代碼,--b64script
讀取的是base64
加密的腳本內容,因此基本用法以下:windows
zolom.exe --script:"from random import seed; from random import random; seed(1); print 'getting random number'; print random();" zolom.exe --b64script:"ZnJvbSByYW5kb20gaW1wb3J0IHNlZWQ7IGZyb20gcmFuZG9tIGltcG9ydCByYW5kb207IHNlZWQoMSk7IHByaW50ICdnZXR0aW5nIHJhbmRvbSBudW1iZXInOyBwcmludCByYW5kb20oKTs="
以後建立腳本引擎,而後將Lib.zip
做爲python庫加載到引擎當中:dom
看起來代碼很簡單,加載全部庫到內存以後運行代碼。函數
本來我覺得,編譯以後的exe要和Lib.zip
一塊兒放到目標機器裏,後來發現想多了,Lib.zip
直接做爲嵌入資源的形式打包到exe
裏了。工具
項目中使用的NuGet
包裏除了IronPython
,還使用了Costura.Fody
和Fody
,把這兩個包卸載以後,從新編譯以後,會發現多出了一堆Dll
文件:加密
Uninstall-Package Costura.Fody Uninstall-Package Fody
由此可知,Costura.Fody
能夠很方便的將依賴嵌入到exe中。.net
還原成以前的樣子,須要先將兩個包安裝回去:
注意版本問題,版本過高的話會報錯的
Install-Package Fody -Version 2.0.0 Install-Package Costura.Fody -Version 1.6.2
修改FodyWeavers.xml
:
<?xml version="1.0" encoding="utf-8"?> <Weavers> <Costura /> </Weavers>
從新編譯以後,生成的文件又變成了單個的exe: