在目標機器運行python工具
好多工具都是python寫的,如果目標機器是linux的話自帶python環境可以很方便的運行這些工具,但是windows下是不自帶python環境的,所以一種辦法是直接在目標環境安裝一個python,另外一種就是直接在內存加載python腳本。
而ironpython
可以將python腳本轉成.net
形式在內存中運行,兩個工具可以達到目的:
- 老版本的
silenttrinity
; - Zolom的小工具https://github.com/checkymander/Zolom;
Zolom編譯方式
利用git將代碼克隆到本地,然后使用vs2019
打開后,再解決方案右鍵-恢復NuGet
包。
代碼解讀
Main
函數開始,有兩種方式指定python
腳本內容:
--script
讀取的是明文形式的代碼,--b64script
讀取的是base64
加密的腳本內容,所以基本用法如下:
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庫加載到引擎當中:
看起來代碼很簡單,加載所有庫到內存之后運行代碼。
點1:Lib.zip通過什么方式打包到exe里
原本我以為,編譯之后的exe要和Lib.zip
一起放到目標機器里,后來發現想多了,Lib.zip
直接作為嵌入資源的形式打包到exe
里了。
點2:DLL如何打包到exe里
項目中使用的NuGet
包里除了IronPython
,還使用了Costura.Fody
和Fody
,把這兩個包卸載之后,重新編譯之后,會發現多出了一堆Dll
文件:
Uninstall-Package Costura.Fody
Uninstall-Package Fody
由此可知,Costura.Fody
可以很方便的將依賴嵌入到exe中。
還原成之前的樣子,需要先將兩個包安裝回去:
注意版本問題,版本太高的話會報錯的
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: