在目标机器运行 python 工具

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

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

Zolom 编译方式

利用 git 将代码克隆到本地,然后使用 vs2019 打开后,再解决方案右键 - 恢复 NuGet 包。

代码解读

Main 函数开始,有两种方式指定 python 脚本内容:

--script读取的是明文形式的代码,--b64script读取的是 base64 加密的脚本内容,所以基本用法如下:

1
2
3
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 文件:

1
2
Uninstall-Package Costura.Fody
Uninstall-Package Fody

由此可知,Costura.Fody可以很方便的将依赖嵌入到 exe 中。

还原成之前的样子,需要先将两个包安装回去:
注意版本问题,版本太高的话会报错的

1
2
Install-Package Fody -Version 2.0.0
Install-Package Costura.Fody -Version 1.6.2

修改FodyWeavers.xml:

1
2
3
4
<?xml version="1.0" encoding="utf-8"?>
<Weavers>
<Costura />
</Weavers>

重新编译之后,生成的文件又变成了单个的 exe:




root@kali ~# cat 重要声明
本博客所有原创文章,作者皆保留权利。> 转载必须包含本声明,保持文本完整,并以超链接形式注明出处【[Techliu](https://scriptboy.cn)】。查看和编写文> 章评论都需翻墙,为了更方便地获取文章信息,可订阅[RSS](https://feeds2.feedburner.com/techliu),如果您还没有 一款喜爱的阅读器,不妨试试[Inoreader.](https://www.inoreader.com)。
r oot@kali ~# Thankyou!

⬆︎TOP