使用Zolom内存解析运行python脚本(不落地)
时间:2022-07-23
本文章向大家介绍使用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:
- Maven Compilation error [package org.testng.annotations does not exist]
- 查看jar包的jdk版本并降级
- ejb3: message drive bean(MDB)示例
- java提示找不到或无法加载主类
- 学Java有什么好方法?刻苦学技术让我最终成为自信的码农
- expect+scp传输文件发现文件丢失
- IBM WebSphere MQ 7.5基本用法
- QPS的计算
- Django----中间件详解
- linux 添加用户到sudo中
- 机器学习之白话adaboost元算法
- 查看占用内存多的进程
- jboss EAP 6.2 + Message Drive Bean(MDB) 整合IBM Webshpere MQ 7.5
- 通过jenkins API去build一个job
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 性能测试必备知识(7)- 深入理解“CPU 使用率”
- Jmeter 常用函数(31)- 详解 __iterationNum
- Jmeter 常用函数(30)- 详解 __if
- Jmeter 常用函数(29)- 详解 __eval
- Jmeter 常用函数(28)- 详解 __FileToString
- Jmeter 常用函数(26)- 详解 __chooseRandom
- Jmeter 常用函数(25)- 详解 __V
- Java8新特性
- 线程池基础
- 多线程基础
- 02 Spring Boot整合JDBC
- 01 Spring Boot 入门
- Spring——单例Bean中使用多例Bean
- DI——手动注入
- bean scope——bean的作用域及注意点