当前位置: 首页 > news >正文

SMC自修改代码一

 一,对SMC的通俗解释。

         就比方说,有一个游戏,一般来说游戏的规则是不变的,但是如果游戏规则能够根据你玩游戏的方式而改变,那么该游戏的难度是不是会增加。SMC与之类似,它会根据需要改变代码。

二,SMC的作用与功能

         

三,原理

        基本原理:是在编译可执行文件时,将需要加密的代码区段(如函数、代码块) 单独编译成一个section(段),并将其标记为可读,可写,不可执行,然后通过某种方法在程序运行的时候将section解密为可执行代码,并将其标记为可读、可执行、不可写。这样就不能直接在内存里面找到加密的代码,从而无法执行或修改加密的代码。(其加密过程一般采用异或等简单的加密算法,解密是通过相同的算法对密文进行解密。)

先标记为可读可写不可执行,后标记为可读可执行不可写的目的

1. 允许代码动态修改,但防止任意代码注入

  • RW- 阶段

    • 程序需要修改自身的代码段(例如动态生成指令、优化热代码路径或解密加密的代码)。

    • 此时内存必须可写(W),但不能执行(X),防止 CPU 意外执行未准备好的代码(可能包含恶意或未初始化的指令)。

  • RX- 阶段

    • 修改完成后,内存权限切换为可执行(X),但禁止写入(移除 W)。

    • 这确保修改后的代码可以安全执行,同时防止后续恶意篡改(如攻击者利用漏洞覆盖代码)。


2. 防御代码注入攻击(如 Shellcode)

  • 如果内存始终保持 RWX(可读可写可执行),攻击者可能利用缓冲区溢出等漏洞,向内存写入恶意代码并直接执行。

  • SMC 的权限切换策略(RW- → RX-) 遵循 W^X(Write XOR Execute) 原则:

    • 任何时候,内存页不能同时可写和可执行,从而阻断攻击者的代码注入途径。


3. 兼容现代 CPU 的安全特性

  • 现代 CPU(如 Intel NX、ARM XN)支持硬件级的内存执行保护。

  • 通过 RW- → RX- 切换:

    • 在修改阶段禁用执行(避免 CPU 误执行中间状态代码)。

    • 在执行阶段禁用写入(利用硬件机制锁定代码完整性)。


4. 避免自修改代码的竞争条件

  • 如果代码在修改过程中被意外执行,可能导致未定义行为(如指令解析错误或崩溃)。

  • RW- 阶段确保:

    • 只有明确的写入操作能修改代码,CPU 不会同时执行该区域。

  • RX- 阶段确保:

    • 代码一旦完成修改,立即变为只读,避免后续写入干扰执行流。

http://www.xdnf.cn/news/919063.html

相关文章:

  • JUC 串讲
  • redis分片集群架构
  • 部门档案在不同系统中的差异及整合思路
  • 【自然语言处理】大模型时代的数据标注(主动学习)
  • PostgreSQL 的扩展pageinspect
  • 【Java学习笔记】Math方法
  • Xilinx IP 解析之 Block Memory Generator v8.4 ——02-如何配置 IP(仅 Native 接口)
  • oracle 11g ADG备库报错ORA-00449 lgwr unexpectedly分析处理
  • AGV|无人叉车工业语音播报器|预警提示器LBE-LEX系列性能与接线说明
  • Python从Excel读取数据并生成图表的方法详解
  • Docker构建Vite项目内存溢出:从Heap Limit报错到完美解决的剖析
  • LINUX67 FTP 3客户服务系统;FTP 上传、下载测试调试
  • 14-Oracle 23ai Vector Search 向量索引和混合索引-实操
  • [Go]context上下文--使用要点--源码分析--Go核心--并发编程
  • go-zero微服务入门案例
  • 【Go语言基础【13】】函数、闭包、方法
  • 优化器 (torch.optim) 与学习率调度器 (lr_scheduler)
  • vite+tailwind封装组件库
  • Android LinearLayout、FrameLayout、RelativeLayout、ConstraintLayout大混战
  • Xela矩阵三轴触觉传感器的工作原理解析与应用场景
  • 一.设计模式的基本概念
  • Python分形几何可视化—— 复数迭代、L系统与生物分形模拟
  • Redis专题-基础篇
  • Vue具名插槽
  • Linux(13)——Ext系列文件系统
  • Now formdata是什么?如何使用
  • RT-Thread内核组成——内核移植
  • MySQL(61)如何进行数据库分区?
  • 锁的艺术:深入浅出讲解乐观锁与悲观锁
  • 计算机操作系统(十五)死锁的概念与死锁的处理方法