OffenSive Csharp Development Part5 && 星球来袭

本文是offensive csharp development的第五篇文章,主要讲解如何使用c#进行amsi bypass。

首先我们先来看一下什么是amsi。

AMSI的全称是反恶意软件扫描接口(Anti-Malware Scan Interface),是从Windows 10开始引入的一种机制。AMSI是应用程序和服务能够使用的一种接口,程序和服务可以将“数据”发送到安装在系统上的反恶意软件服务(如Windows Defender)。

服务和应用程序可以通过AMSI来与系统中已安装的反恶意软件通信。

AMSI为终端安全供应商提供了丰富的接口以帮助他们更好地对目标组件进行内存缓冲区安全扫描,或选择需要扫描的内容。根据微软提供的信息,AMSI支持的组件有如下几种:

1、用户账户控制(UAC)

2、PowerShell(脚本、交互使用和动态代码计算)

3、Windows脚本主机(wscript.exe和cscript.exe)

4、JavaScript和VBScript

5、Office VBA宏

AMSI的整体架构如下:

OffenSive Csharp Development Part5 && 星球来袭

我们可以使用windbg来查看具体信息:

代码语言:javascript代码运行次数:0运行复制

x amsi!Amsi*
OffenSive Csharp Development Part5 && 星球来袭

主要就是AmsiScanBuffer与AmsiScanString这两个函数的作用。查看详细

听脑AI 听脑AI

听脑AI语音,一款专注于音视频内容的工作学习助手,为用户提供便捷的音视频内容记录、整理与分析功能。

听脑AI 745 查看详情 听脑AI 代码语言:javascript代码运行次数:0运行复制

u amsi!AmsiScanString L60
OffenSive Csharp Development Part5 && 星球来袭

因为AmsiScanString会调用AmsiScanBuffer,所以我们一般patch掉AmsiScanBuffer来进行bypass amsi。

常用方法如下:

代码语言:javascript代码运行次数:0运行复制

xor eax, eaxret

剩下的就是来编写代码了。

patch前后:

代码语言:javascript代码运行次数:0运行复制

amsi!AmsiScanBuffer:00007ffb`dd183310 4c8bdc          mov     r11,rsp00007ffb`dd183313 49895b08        mov     qword ptr [r11+8],rbx00007ffb`dd183317 49896b10        mov     qword ptr [r11+10h],rbp00007ffb`dd18331b 49897318        mov     qword ptr [r11+18h],rsiamsi!AmsiScanBuffer:00007ffb`dd183310 b857000780      mov     eax,80070057h00007ffb`dd183315 c3              ret00007ffb`dd183316 084989          or      byte ptr [rcx-77h],cl00007ffb`dd183319 6b1049          imul    edx,dword ptr [rax],49h00007ffb`dd18331c 897318          mov     dword ptr [rbx+18h],esi

效果:

OffenSive Csharp Development Part5 && 星球来袭

之后

OffenSive Csharp Development Part5 && 星球来袭

代码地址:https://github.com/lengjibo/OffenSiveCSharp/tree/master/AmsiBypass

此篇也是该系列的最后一篇文章了,希望对大家有所帮助。

关于星球

之前后台一直有粉丝留言想要个星球或者群之类的交流之所,很可惜群很难有一个交流氛围,于是便和0xAxSDD老哥筹建了一个Redteamspace知识星球,此星球是主要是为了探讨前沿的红队技术,以及一些不为人所知的骚姿势,营造一个良好的学习氛围,如果你与我们一样热爱技术,善于分享,那么请加入我们吧!

以上就是OffenSive Csharp Development Part5 && 星球来袭的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/736054.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月25日 13:00:42
下一篇 2025年11月25日 13:01:04

相关推荐

  • C++ 函数在并发编程中如何提升性能?

    c++++ 中提升并发编程性能的方法包括:并行执行:使用 std::thread 创建并行执行任务的线程。锁操作:使用 std::mutex 保护共享数据,避免并发访问。条件变量:使用 std::condition_variable 和 std::mutex 实现线程之间的同步。原子操作:使用 st…

    2025年12月18日
    000
  • 如何用 C++ 函数实现异步编程?

    摘要: c++++ 中的异步编程允许多任务处理,无需等待耗时操作。使用函数指针创建指向函数的指针。回调函数在异步操作完成时被调用。boost::asio 等库提供异步编程支持。实战案例演示了如何使用函数指针和 boost::asio 实现异步网络请求。 用 C++ 函数实现异步编程 简介 异步编程是…

    2025年12月18日
    000
  • C++ 函数在网络编程中如何建立和管理客户端端套接字?

    在 c++++ 中建立和管理客户端端套接字需要遵循以下步骤:使用 socket() 函数创建套接字。使用 connect() 函数将套接字连接到服务器。使用 send() 和 recv() 函数与服务器交换数据。 C++ 函数在网络编程中建立和管理客户端端套接字 建立和管理客户端套接字是网络编程中的…

    2025年12月18日
    000
  • C++ 函数在网络编程中如何实现流式 I/O?

    答案: c++++ 中流式 i/o 函数可用于与网络套接字进行读写操作,就像操作文件一样。描述:使用 std::cout 和 std::cin 函数写入和读取流。使用 std::fstream 函数打开文件或套接字的输入/输出流。通过 std::socket_stream 适配器将网络套接字转换为流…

    2025年12月18日
    000
  • C++ 函数重载中的异常处理如何进行?

    c++++ 中重载函数的异常处理遵循单一异常处理点原则。noexcept 规范符用于指定函数是否引发异常:noexcept(true) 表示不引发,noexcept(false) 则表示可能引发。异常处理代码只能出现在一个函数版本中,通常位于最高的作用域中,以确保所有异常情况都能得到处理。 C++ …

    2025年12月18日
    000
  • C++ 函数在网络编程中如何处理网络协议?

    c++++ 标准库提供以下函数处理网络协议:socket(): 创建新的网络套接字描述符。connect(): 将套接字连接到远程地址和端口。send()/recv(): 发送或接收数据包。listen(): 在指定端口上侦听传入连接。accept(): 接受传入连接并创建新的套接字描述符。 C++…

    2025年12月18日
    000
  • C++ 函数在构建现代化、响应式 GUI 界面中的重要性是什么?

    c++++ 函数在 gui 构建中至关重要,因为它提供:封装性,隐藏实现细节并提高组织性。重用性,消除冗余代码并简化维护。可测试性,便于单元测试和调试。 C++ 函数在构建现代化、响应式 GUI 界面中的重要性 简介 用户界面 (GUI) 是程序员与最终用户交互的门户。随着技术的发展,GUI 变得越…

    2025年12月18日
    000
  • C++ 函数参数详解:变量捕获与函数指针的安全性考虑

    函数参数在 c++++ 中允许函数访问外部变量。变量捕获涉及捕获引用或指针以在函数返回后访问外部变量,这可能导致问题。函数指针的安全性考虑涉及函数指针捕获变量引用时修改外部变量的风险。为了避免这些问题,建议谨慎使用引用和指针,在函数返回前妥善处理它们,清除函数指针,并遵循健壮的编程实践。 C++ 函…

    2025年12月18日
    000
  • C++ 函数重载与函数模板有什么异同?

    函数重载和函数模板在目的和实现方式上不同。函数重载创建同名但参数不同的函数,而函数模板描述了可根据类型参数生成函数实例的函数族。函数重载在编译时生成特定函数,函数模板在运行时生成,且效率可能较低。 C++ 函数重载与函数模板 C++ 中的函数重载与函数模板是两个密切相关的概念,但具有不同的目的和实现…

    2025年12月18日
    000
  • C++ 函数参数详解:高阶函数中参数传递的范例

    c++++ 中有两种参数传递机制:传值传递和传址传递。传址传递将对象的内存地址传递给函数,而传值传递将值的副本传递给函数。高阶函数是接受函数作为参数的函数,其参数传递需要特别注意,因为传递的函数可能具有不同的参数签名和返回类型。示例中,std::sort 函数是一个高阶函数,它接受一个比较函数作为参…

    2025年12月18日
    000
  • C++ 函数参数详解:并行编程中参数传递的性能优化

    多线程环境中,函数参数传递方式不同,性能差异显著:按值传递:复制参数值,安全,但大型对象开销大。按引用传递:传递引用,效率高,但函数修改会影响调用者。按常量引用传递:传递常量引用,安全,但限制函数对参数操作。按指针传递:传递指针,灵活,但指针管理复杂,可能出现悬垂指针或内存泄漏。并行求和中,按引用传…

    2025年12月18日
    000
  • C++ 函数在网络编程中如何实现非阻塞 I/O?

    c++++中使用非阻塞i/o 进行网络编程可以显著提升应用程序的响应能力和吞吐量。原理:使用异步i/o操作,应用程序在发出i/o请求后继续执行,内核完成操作后生成事件通知应用程序。实现:可使用boost.asio库,它提供了实现异步i/o所需的功能。实战案例:非阻塞i/o广泛应用于对吞吐量和响应性有…

    2025年12月18日
    000
  • C++ 函数在网络编程中如何实现数据传输?

    c++++ 的网络数据传输函数包括 recv() 和 send(),用于服务器端接收和发送数据。以下步骤演示了使用 recv() 和 send() 创建回显服务器的过程:1. 创建套接字;2. 设置服务器地址信息;3. 绑定套接字到服务器地址;4. 监听连接;5. 在循环中接受连接、接收数据并将其发…

    2025年12月18日
    000
  • C++ 函数在网络编程中如何处理网络事件?

    c++++ 中使用 select() 函数处理网络事件的方法如下:使用 fd_set 声明文件描述符集合,并初始化它们设置超时时间使用 select() 函数监控文件描述符的事件检查 select() 的返回值:-1 表示错误,0 表示超时,正值表示有事件发生根据文件描述符集合中的内容处理事件(例如…

    2025年12月18日
    000
  • C++ 函数在网络编程中如何处理 DNS 查询?

    c++++ 标准库提供了函数来处理网络编程中的 dns 查询:gethostbyname(): 根据主机名查找主机信息。gethostbyaddr(): 根据 ip 地址查找主机信息。dns_lookup(): 异步解析 dns。 C++ 函数在网络编程中的 DNS 查询处理 在网络编程中,域名系统…

    2025年12月18日
    000
  • C++ 函数在网络编程中如何处理多线程?

    c++++ 的线程库能方便地在网络编程中创建和管理线程,从而实现多线程处理。通过使用互斥量、条件变量和信号量等同步原语,多线程能安全地访问共享资源,避免数据竞争和死锁。在实际应用中,线程池可用于并发处理来自多个客户端的连接,提高服务器效率。 C++ 函数在网络编程中的多线程处理 在网络编程中,多线程…

    2025年12月18日
    000
  • C++ 函数参数详解:不同指针类型的传参方式对比

    c++++ 中指针参数的传参方式有三种:传值、传引用和传地址。传值复制指针,不影响原始指针;传引用允许函数修改原始指针;传地址允许函数修改指针指向的值。根据需要选择合适的传参方式。 C++ 函数参数详解:不同指针类型的传参方式对比 函数参数传递是 C++ 中一种至关重要的编程概念,它允许在函数调用时…

    2025年12月18日
    000
  • C++ 函数参数详解:传入机制的底层原理与应用场景

    c++++ 函数参数传递机制:值传递:创建传递值副本,原始变量不受影响。引用传递:直接操作原始变量,允许修改。指针传递:通过地址访问变量,可修改指向变量或指向其他变量。应用场景:值传递:不修改数据的函数,如打印、计算。引用传递:修改数据的函数,如更新、交换。指针传递:间接访问变量、分配内存。 C++…

    2025年12月18日
    000
  • C++ 函数在基于云的 GUI 应用程序中的作用是什么?

    c++++ 函数在云端 gui 应用程序中发挥着关键作用,包括:创建和操作 gui 组件,如按钮、窗口等;管理和处理数据,如验证输入、更新云端数据;处理网络通信,如发送 http 请求、接收服务器响应;使用多线程和并发,后台执行任务,提高应用程序响应速度。 C++ 函数在基于云的 GUI 应用程序中…

    2025年12月18日
    000
  • C++ 函数模板详解:揭秘泛型算法背后的原理

    回答: 函数模板用于编写可用于不同类型数据的通用函数,增强代码可重用性和效率。详细描述:语法: template returntype func++tionname(t arg1, t arg2, …) { … }原理: 利用编译时多态性,为不同数据类型生成专门函数。优点: …

    2025年12月18日
    000

发表回复

登录后才能评论
关注微信