使用Zolom内存解析运行python脚本(不落地)

在目标机器运行python工具

好多工具都是python写的,如果目标机器是linux的话自带python环境可以很方便的运行这些工具,但是windows下是不自带python环境的,所以一种办法是直接在目标环境安装一个python,另外一种就是直接在内存加载python脚本。

ironpython可以将python脚本转成.net形式在内存中运行,两个工具可以达到目的:

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.FodyFody,把这两个包卸载之后,重新编译之后,会发现多出了一堆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:

posted @ 2020-08-18 00:18  cxccc  阅读(487)  评论(2编辑  收藏  举报