python魔改窗口-builtins模块,实现企业级框架的跳板

Python沙箱逃逸:利用生成器gi_frame突破代码执行限制 Python沙箱是一种通过限制代码执行环境来隔离不可信代码的安全机制,常用于在线代码评测、CTF竞赛等场景。其核心原理是通过过滤危险函数、清理命名空间等方式,构建一个受限的执行环境。然而,Python语言的动态特性为沙箱逃逸提供了可能,其中生成器对象的gi_frame属性是一个关键突破口。gi_frame指向生成器暂停时的栈帧对象,其中包含了f_locals、f_globals等命名空间信息。通过访问这些命名空间,攻击者可以沿着对象引用链(如__dict__、__class__、__subclasses__ 阅读详情

builtins 模块是 Python 中非常核心且强大的一个模块,它包含了所有 内置函数、异常和对象(如 print(), len(), int, str, Exception 等)。你可以通过修改或替换这些内置对象来实现“魔改”运行时行为的目的。


🔍 一、什么是 builtins?

在 Python 启动后,所有的内置变量和函数都会被加载到 builtins 模块中。每个模块的全局命名空间中都有一个名为 __builtins__ 的引用,指向这个模块。

import builtins

print(builtins.print)  # <built-in function print>

🛠️ 二、如何“魔改” builtins?

在运行时动态地修改、替换甚至删除内置函数或对象,从而改变程序的行为。

✅ 示例 1:重写 print() 函数

import builtins

original_print = builtins.print

def my_print(*args, **kwargs):
    original_print("[LOG]", *args, **kwargs)

builtins.print = my_print

print("Hello World")  # 输出: [LOG] Hello World

这个技巧可以用于调试、日志记录、安全沙箱等场景。


✅ 示例 2:禁用某些内置函数

比如你想禁止用户调用 eval() 或 exec():

import builtins

# 方法一:直接删除
del builtins.eval
del builtins.exec

# 方法二:替换为抛出异常的函数
def restricted(*args, **kwargs):
    raise RuntimeError("Function not allowed")

builtins.eval = restricted
builtins.exec = restricted

注意:这种方式可能不适用于所有环境(例如嵌入式解释器或某些沙箱)。


✅ 示例 3:添加自定义内置函数或常量

import builtins

def hello():
    print("Hello from builtins!")

builtins.hello = hello

hello()  # 可以直接调用,无需导入

这相当于给整个 Python 环境注入了一个全局函数,任何模块都可以直接调用它。


📦 三、应用场景与项目实践

1. 调试/监控工具

  • 替换 input()、open()、print() 等函数进行日志记录或输入输出拦截。
  • 用于构建自动化测试框架或调试器。

2. 沙箱限制执行

  • 删除或替换危险函数(如 eval, exec, __import__)。
  • 示例项目:

3. 代码混淆/保护

  • 通过替换 __name__, __file__ 等魔法变量,隐藏真实模块信息。
  • 一些商业加密工具会利用此技术。

4. DSL 或领域语言扩展

  • 添加新的内置函数或语法糖。
  • 例如:宏系统、DSL 编程语言、脚本引擎。

⚠️ 四、注意事项与风险

风险说明
兼容性问题修改 builtins 可能导致第三方库行为异常。
作用域问题不同模块中的 __builtins__ 可能不同(尤其是多解释器环境)。
安全性不足单纯修改 builtins 并不能完全阻止恶意代码(如绕过 __builtins__ 获取原始函数)。
调试困难如果过度修改内置行为,可能导致调试困难,建议保留原函数备份。

🧪 五、进阶玩法

1. 使用 AST + builtins 构建 DSL

结合 AST 解析和 builtins 替换,你可以构建一个小型的领域特定语言(DSL):

import ast
import builtins

class MyTransformer(ast.NodeTransformer):
    def visit_Name(self, node):
        if node.id == 'println':
            return ast.Name(id='print', ctx=node.ctx)
        return node

code = "println('Hello DSL')"
tree = ast.parse(code)
new_tree = MyTransformer().visit(tree)
compiled = compile(new_tree, '<string>', 'exec')

exec(compiled, {'print': lambda x: builtins.print(f"[DSL] {x}")})

2. 安全访问原始 builtins(防止被覆盖)

有时候你希望即使别人替换了 print,你也能访问原始版本:

import builtins

real_print = getattr(builtins, '__dict__')['print']

def evil_print(*args):
    pass

builtins.print = evil_print

real_print("This will still work!")  # 原始 print

📚 六、推荐学习资源

  • 📘 《Fluent Python》第 9 章(关于魔法方法和 builtins)
  • 📘 《Python Cookbook》第 9 章(元编程相关)
  • GitHub 搜索关键词:
    • monkey patch builtins
    • replace print python
    • sandbox python builtins

✅ 总结

技术点描述
builtins 模块所有内置函数/对象的来源
替换函数如 print, input 等,可用于日志、调试
删除函数用于构建安全沙箱
注入新函数类似“全局函数”,任何模块都能访问
安全访问通过 __dict__ 获取原始函数避免被覆盖

MIT 6.S191深度学习课:从概念理解到端侧部署的完整闭环 深度学习入门常陷于‘学得懂公式却写不出代码、训得出模型却部署不了’的断层。本文聚焦MIT 6.S191这门广受工程界认可的实战型课程,解析其如何以问题驱动构建认知脚手架——从Excel手算感知机建立数值直觉,到NumPy手写反向传播破除自动微分黑箱,再到TensorFlow Lite在树莓派部署实现端侧推理。课程不堆砌前沿模型,而精选CNN、RNN、Transformer等核心架构,强调‘结构即思想’与‘约束即创新’,将可解释性(如Grad-CAM)、鲁棒性(如对抗样本)、硬件适配(量化/剪枝)融入每一环节 阅读详情

相关推荐

MCP-RAG实战:构建会思考中断的动态上下文智能体

动态上下文是大模型工程化落地的关键范式,其核心在于让LLM在生成过程中自主感知知识缺口并触发外部调用。这背后依赖模型对自身能力边界的元认知能力,以及标准化的工具交互协议——MCP(Model Context Protocol)正是为此而生。它通过JSON-RPC定义统一的tool call语法,解耦LLM与检索器、计算器、API等外部服务,实现‘按需加载’而非‘预加载’,显著提升上下文精度与系统可维护性。在RAG场景中,MCP支持条件检索、分步验证与意图纯净调用,使关键信息召回准确率提升37%。本文基于fa

weixin_30443731的博客 389

builtins内建模块

在Python中,是一个内置模块,它在Python解释器启动时自动加载,并包含了一组Python的内置函数、异常和常量。这意味着无需显式导入,你就可以在任何Python脚本或交互式环境中直接使用其中定义的函数和对象。 在没有使用特定IDE的情况下,Python 的内置模块通常被编译到 Python 解释器中,并且不是以单独的文件形式存在。这些内置函数和异常类是在 Python 解释器中直接实现的一部分,因此不需要单独的文件来存储。当您使用 Python 解释器时,这些内置功能会直接可用,无需单

Fddadd的博客 2104

STM32 MCU上部署AI模型:从选型到优化的实用指南

边缘AI正成为嵌入式开发的重要方向,让轻量化模型直接在MCU上完成推理,既降低了云端依赖,也满足了低延迟和隐私保护需求。在STM32这类Cortex-M内核的微控制器上,通过模型量化与工具链转换,可以将训练好的神经网络压缩为适合本地运行的C代码。结合X-CUBE-AI、TensorFlow Lite Micro等方案,开发者能实现振动检测、语音唤醒、图像分类等典型应用。实际部署中需重点关注内存分配、算子支持与性能调优,并处理好精度与速度的平衡。围绕STM32开发板上的AI软件轮子,可以形成从模型转换到嵌入式

weixin_30667649的博客 393

Python内置函数深度指南:builtins模块详解

本教程全面解析Python内置函数模块builtins,涵盖其核心功能与使用场景。内容包含:1) 输入输出函数(print/input);2) 类型转换函数(int/str/list等);3) 数学运算(abs/round/pow);4) 迭代与序列操作(range/enumerate/zip);5) 对象操作(type/getattr/id);6) 函数式编程工具(map/filter/reduce);7) 内置常量与异常处理机制;8) 高级技巧(动态调用/内存视图/命名空间操作)。教程强调最佳实践,包括

YAnt的博客 1662

7查看模块:builtins内置方法

7查看模块:builtins内置方法 builtins模块提供对Python的所有“内置”标识符的直接访问;例如,builtins.open 是内置函数的全名 open() 。 dir()获得对象的方法 import builtins fun = dir(builtins) print(len(fun)) print(fun) 运行结果 153 ['ArithmeticError', 'Asse...

weixin_45958024的博客 2103

【雕爷学编程】MicroPython手册之内置模块 builtins

用户可以在控制台中输入姓名,并看到对应的输出结果。1、builtins模块包含了一些常用的内置函数,如print、len、range等,这些函数可以直接在代码中使用,无需导入其他模块。1、在使用builtins模块中的函数和异常类时,需要注意函数的参数和返回值的类型,以及异常类的用法和处理方式。3、自定义函数和类:通过使用builtins模块中的内置函数和异常类,可以更好地设计和实现自定义的函数和类。在这个例子中,我们使用builtins模块中的内置函数print和len,分别打印字符串和计算列表的长度。

雕爷学编程 389

python的builtins模块

python的builtins模块builtins模块详解1.介绍1.1 builtins: python内建模块1.2 builtins 与 __builtins__的区别.在__main__模块中.在非__main__模块中2.示例代码结果 builtins模块详解 1.介绍 1.1 builtins: python内建模块 内建模块就是在使用的时候不需要进行import, 在python启动之后,在没有执行程序员编写的任何代码之前,python会加载内建模块中函数到内存(python的内建函数,例如:

weixin_43118280的博客 4931

【万字长文】学习Armv8架构虚拟化一篇就够了

这里我们将介绍一些基础的Hypervisor和虚拟化的理论知识。如果你已经有一定的基础或是已经熟悉了这些概念,可以跳过这部分内容。我们用Hypervisor这个词来定义一种负责创建,管理以及调度虚拟机(Virtual Machines, VMs)的软件。Stage 2 转换允许Hypervisor控制虚拟机的内存视图。具体来说,其可以控制虚拟机是否可以访问特定的某一块物理内存,以及该内存块出现在虚拟机内存空间的位置。这种能力对于虚拟机的隔离和沙箱功能来说至关重要。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 5320

Python builtins 模块实现

是 Python 中一个强大且灵活的工具,广泛应用于类型检查、动态类型判断以及面向对象编程中。通过合理使用,我们可以编写出更加健壮和可维护的代码。

鸭梨的博客 496

微信小程序marker 上的自定义气泡cover-view字体丢失以及max-width不生效问题

微信小程序marker 上的自定义气泡cover-view字体丢失以及max-width不生效问题

weixin_42028275的博客 1502

第一届“龙信杯”电子数据取证竞赛Writeup

第一届“龙信杯”电子数据取证竞赛Writeup

toto的博客 1万+

Python 的 `builtins` 模块(通常无需显式导入,其函数和异常自动可用)包含了 Python 解释器启动时自动加载的内置函数、类型和异常

Python 的 `builtins` 模块(通常无需显式导入,其函数和异常自动可用)包含了 Python 解释器启动时自动加载的内置函数、类型和异常,例如 `print()`、`len()`、`int()`、`range()`、`TypeError`、`sum()`、`max()`、`input()` 等。这些“内置”能力渗透在日常编程与真实生活场景中,以下是一些贴近生活的典型案例:

[Blog][Domain] programb.blog.youkuaiyun.com 717

14、固态变压器(SST)供电的直流微电网控制策略解析

本文详细解析了基于固态变压器(SST)供电的直流微电网的分层功率管理与控制策略。重点介绍了二次控制和三次控制算法的原理及实现方式,探讨了将SST作为固态同步电机(SSSM)的控制概念及其频率调节方法。通过小型直流微电网的实验案例验证了控制策略的有效性,并对不同三次控制方法的优缺点进行了比较。最后,文章提出了未来控制策略的优化方向,包括通信技术提升、多目标优化和智能算法的应用,为直流微电网的可靠、高效运行提供了理论支持和实践指导。

star的博客 554

从零构建实用AI Agent:基于LangChain的智能体架构与工程实践

AI Agent(智能体)作为人工智能领域的关键技术,其核心在于构建一个能够自主感知、规划、决策和执行的软件系统。其工作原理通常遵循ReAct(推理-行动)范式,通过大语言模型(LLM)作为推理核心,结合规划模块、记忆模块和工具调用模块,形成闭环工作流。这一架构的技术价值在于将大模型的通用认知能力与专用工具的执行能力相结合,从而突破传统对话模型的局限,实现复杂任务的自动化处理。在实际应用场景中,智能体可广泛应用于自动化研究助手、业务流程自动化、数据分析与报告生成等领域。本文以LangChain框架和Open

weixin_30740295的博客 314

Sigrity Power DC Resitance Network Model Generation模式生成电阻SPICE模型操作指导

Sigrity Power DC Resitance Network Model Generation模式是用于提取负载每个pin电阻SPICE模型的,结果以spice网表形式展现,仍然以Motherboard.spd为例进行说明。目的是模拟实际情况,via的孔壁电镀1mil,中间是空心的,让via不完全被填充金属成为实心via。Upper/lower Tolerance:上下公差,设置为5%,也就是压降允许的范围。P/F Mode:通过/失败模式,选择Worst,最差的情况。

weixin_54787054的博客 419

YOLOv11改进 | 注意力篇 | YOLOv11引入24年最新的ELA注意力机制,并构建C2PSA_ELA

为了解决这些限制,本文介绍了一种高效的本地注意力(ELA)方法,实现了一个简单的结构,大幅度的性能改善。我们精心设计了ELA中的三个超参数,产生了四个不同的版本:ELA-T,ELAB,ELA-S和ELA-L,以满足不同视觉任务的具体要求,如图像分类,目标检测和语义分割。到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的,后期我会根据各种前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~

tsg6698的博客 1287

LLM代理安全实践:构建同意完整性机制,防范所见非所执行风险

在人工智能与软件工程领域,大语言模型(LLM)驱动的自主代理正成为自动化任务处理的重要工具。其核心原理在于将自然语言指令分解为可执行步骤,并通过调用外部工具完成复杂操作。然而,这一过程引入了显著的安全挑战:用户基于代理描述所批准的“意图”,与实际执行的操作之间可能存在偏差,即“所见非所执行”(WYSIWYS)问题。这直接关系到系统的“同意完整性”(Consent Integrity),是确保代理行为可信、可控的技术基石。从工程实践角度看,缺乏同意完整性意味着攻击者可利用参数篡改、工具功能滥用等手段,在用户批

weixin_33841722的博客 325

【OpenFOAM】-olaFlow-算例10-wavemakerTank

采用 Flap和Piston两种方式的动网格进行造波

ou_no的博客 2169

从SQL注入到容器逃逸:HackTheBox GoodGames靶机完整渗透实战解析

SQL注入(SQLi)和服务器端模板注入(SSTI)是Web应用安全中常见的高危漏洞,其原理在于应用程序未对用户输入进行充分验证和过滤,导致攻击者能够操纵数据库查询或模板引擎执行恶意代码。理解这些漏洞的成因与利用方式,对于构建安全的应用架构至关重要。在渗透测试和红队评估中,攻击者常利用SQLi获取初始访问权限,进而通过SSTI在服务器上实现代码执行,最终目标往往是突破应用边界,进行横向移动或权限提升。随着容器化技术的普及,Docker环境下的安全风险,特别是容器逃逸,成为新的攻防焦点。本文以HackTheB

weixin_33709590的博客 417

RK3588开发笔记-ES8311音频芯片调试记录

本篇博客主要记录如何在RK3588平台试ES8311音频芯片的过程。这包括硬件连接、内核配置、驱动程序调试和测试步骤。通过以上步骤,我们成功在RK3588平台上调试了ES8311音频芯片。这包括硬件连接、内核配置、设备树配置、驱动加载以及音频测试。希望这篇调试记录能为其他开发者提供一些帮助。如果你有任何问题或建议,欢迎留言讨上调论。

flypig has a dream! 3164

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

一种Python全局配置规范以及其魔改

專 欄❈丁果,Python中文社区作者。对django、pyqt、opencv、tornado感兴趣。GitHub:https://github.com/lidingke❈一、模块 or global很多初学者有个误区,就是在Python中需要配置一个全局的参数时,首先想到的是global关键字,而实际上global不是干这个事的,global的功能是在将局部作用域的变量声明为全局的,这样可以在局

Python中文社区 1693

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Python 库手册:builtins 核心内置模块

当我们在 Python 中直接调用如 print()、len()、int()、isinstance() 等函数时,其实都是从 builtins 模块中自动导入的。比如,abs()、print()、len()、range()、int()、str()、isinstance()、sum()、open()、input()、type() 等函数都来自于 builtins 模块。2、包含内置函数、内置类型(如 int、str)和异常(如 ValueError)。(1)查看或重写内置函数(如禁用 eval())。

qq_41176800的博客 826

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Python功能完美的宝库——内置的强大“武器库”builtins

builtins模块包含了Python所有的内置对象,本文将从语言学角度剖析Python中的builtins模块。笔记模板由python脚本于2025-03-19 08:16:27创建,本篇笔记适合喜欢探究python的coder翻阅。【学习的细节是欢悦的历程】在于输出,而不仅仅是。Python官网这里,才python前沿。英文原版,原汁原味,才是寻根溯源的正统。😎Free大咖免费“”秘笈不仅仅是基础那么简单……自学并不是什么神秘的东西。

m0_57158496的博客 2204

PyTorch如何修改模型(魔改)

对模型缝缝补补、修修改改,是我们必须要掌握的技能,本文详细介绍了如何修改PyTorch模型?也就是我们经常说的如何魔改。PyTorch 的模型是一个 torch.nn.Module 的某个子类的对象,修改模型实际就等价于修改某个类,对面向对象熟悉的同学应该知道,对类做修改有两个经典的方法:组合和继承。1.修改模型层(模型框架⭐)1.1通过继承修改模型1.2通过组合修改模型(重点学👀)1.3通过猴子补丁修改模型2.添加外部输入3.添加额外输出。

自己在学习过程中的总结 6075

MD5加密及Python源码魔改

MD5全称:message-digest algorithm 5 翻译过来就是:信息 摘要 算法 5 一、特点 1.长度固定: 不管多长的字符串,加密后长度都是一样长 作用:方便平时信息的统计和管理 详解:经过MD5加密生成一个固定长度为128bit的串。因为128位0和1的二进制串表达不友好,因此转化为了16进制,128/4 = 32位的16进制。将32位去掉前8位和后8位得到的是16位。因此会有MD5的32位 和16位加密说法 2.易计算: 字符串和文件加密的过程..

Codeooo 博客 1万+

python类方法@classmethod与@staticmethod

一、@classmethod 介绍 与普通的类方法有所不同的是,用@classmethod修饰的类方法不传入self实例本身,而是传入cls,代表这个类自身,可以来调用类的属性,类的方法,实例化对象等。 语法 使用的语法也非常简单,直接在类方法上加上装饰器@classmethod即可,另外传入cls参数作为方法的第一个参数。 class A(object): @classmethod def func(cls): pass 举例 ''' 遇到问题没人解答?小编创建了一个P

python学习者的博客 1792
上一篇: 用字典技术优化条件判断:更简洁的代码逻辑
下一篇: python企业级框架设计要点-staticmethod能继承不,论 python 的多态细节
旷野说
博客等级 码龄9年 361粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值