使用Zolom内存解析运行python脚本(不落地)
在目标机器运行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:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?