- 博客(90)
- 收藏
- 关注
原创 libevtx编译
官方的仓库 Clone 下来之后,需要配置很多额外的信息,才能开始编译. 这个仓库将官方所依赖的资源做了整合,使之可以更简单的 Clone 下来即可编译。按照说明使用git clone下来,或者直接下下来,执行powershell脚本,获取依赖库和生成编译文件。当然不想这么麻烦也有个更简单的库,大佬已经帮你配好的,下载下来直接编译就行,就是代码还是2022的。但是这里有个小坑,因为国内的网络环境需要使用代理,在。如果不想用dll可以将libevtx配置成。需要添加如下代理代码。配置的,需要自行添加。
2023-03-11 23:23:48
240
原创 CobaltStrike二次开发环境准备以及免杀
文章目录前言一、环境二、过程1.注册Idea2.原版CobaltStrike3.开始反编译4.新建项目5.配置项目6.去除暗桩7.免杀CobaltStrike免杀其他免杀profile file重写Stager和Beacon参考总结前言原版的CobaltStrike已经被各大杀毒软件给标记了,就算变换profile,stage和beacon也存在着许多特征,所以只能想办法来隐藏和去除,二次编译CobaltStrike就是一个很好的办法。一、环境win7_x64jdk-11.0.14Idea.2
2022-05-08 01:24:13
7355
5
原创 驱动漏洞利用的另一种思路
驱动漏洞利用的另一种思路前言Kernel Callback Routines项目参考前言之前在前面<cpu-z 驱动漏洞利用>中说了可以利用驱动漏洞绕过杀毒软件OBOperationRegistration保护获取进程的最高权限,下面这种又是一种新思路来绕过杀毒软件的保护Kernel Callback Routines当 Microsoft 在 2005 年推出内核补丁保护(PatchGuard)时,严重限制了杀毒软件和一些保护软件在驱动中使用内核hook(例如:sstdhook,I
2022-03-27 21:40:39
667
原创 NO_ACCESS Protection
NO_ACCESS Protection前言基本思路参考项目:前言这是原本开始是一位朋友研究后发现的一种对抗游戏外挂的思路,我看了一下发现其实可以扩散一下思路用于免杀对抗,说不定有意想不到的效果。基本思路将内存保护设置为 NO_ACCESS可以对抗杀毒软件的内存扫描,我们可以把容易被杀的部分加密保护起来。虽然思路简单,但是要做到完美运用这种机制来配合实现免杀目的,还是值得好好去研究一下的.参考项目:https://github.com/weak1337/NO_ACCESS_Protect
2022-03-27 12:51:18
469
原创 Dameware Mini Remote Control 本地储存密码分析
Dameware Mini Remote Control地储存密码分析前言环境分析过程总结:前言无意中看到一篇文章能恢复Dameware Mini Remote Control 连接记录,这就勾起了我的好奇心,于是分析了一下这个软件本地存储密码的方式https://blog.51cto.com/u_10868195/2069715环境windows 7Dameware Mini Remote Control分析过程首先查看软件结构,搜索关键字符串,如Decrpt和Encrypt然后
2022-03-26 19:54:27
2720
原创 cpu-z 驱动漏洞利用
cpu-z 驱动漏洞利用前言OBOperationRegistration参考项目前言其实这种利用大多数是用来做一些外挂的利用,但是我们可以转换思路来用来对抗杀毒软件的保护。不只是cup-z有这种漏洞,技嘉,戴尔,华硕…等一些大厂都有这种漏洞,并且有些驱动签名还没有失效。OBOperationRegistration当某些软件使用openprocess打开了杀毒软件的进程的时候,会触发这个回调,对openprocess的句柄进行降权操作.使得我们无法使用TerminateProcess、Wri
2022-03-26 19:12:37
815
原创 Obfuscate-Mimikatz
Obfuscate-Mimikatz前言环境脚本参考:前言这个脚本可以简单去除一些Mimikatz的特征,但是相对于现在的杀毒软件来说还是会被杀,还要另作处理环境Linux脚本https://gist.githubusercontent.com/S3cur3Th1sSh1t/08623de0c5cc67d36d4a235cec0f5333/raw/dafbd32d1307c4ebb512e4eb7c43c7e1292bcac9/ObfuscateMimi_First.sh参考:ht
2022-03-26 18:33:20
1422
原创 【反分析】清除PE文件上的Rich Headers
Rich Headers前言The Rich Header解密Rich Header格式解析@comp.id值其他参考项目参考文章前言Rich Header是PE文件DOS Header和NT Header之间的一个结构(在PE Header和DOS stub之间)。它包含链接库版本信息以及链接器版本。可以有效的帮助恶意软件分析人员溯源和关连攻击方The Rich HeaderRich Header是由微软编译器创建,通常看起来像如下:WSNPOEM Decryption Code analy
2022-03-26 17:18:22
769
原创 vs2019配置c++ boost库
vs2019配置c++ boost库前言环境过程一.安装Boost库前言安装编译Boost c++ library环境vs2019boost 1.77.0过程一.安装Boost库去官网进行下载:https://www.boost.org/我当前下载的版本是1.77.0下载完成后解压到自己指定的目录然后打开命令行编译工具Cd 到解压好的boost目录然后运行目录下的bootstrap.bat完成后会在目录下生成一个b2.exe使用 .\b2 --help 查看
2022-03-26 16:58:04
2030
原创 Sleep加密绕过内存查杀
Sleep加密绕过内存查杀前言参考:前言这个免杀思路不错,可以尝试一下参考:Shellcode有问题需要自己改https://github.com/SolomonSklash/SleepyCrypt提供的思路可以,根据自己的需求更改https://bbs.pediy.com/thread-267619.htm...
2022-03-26 16:41:22
507
原创 缩减openssl库体积
缩减openssl库体积前言环境过程:前言去除非必要库缩减体积环境strawberry-perl-5.32.1.1-64bitstrawberry-perl安装完成后都添加到环境变量Visual Studio 2015Openssl 1.1.1过程:开始 — 所有程序 — Visual Studio 2019 — Visual Studio Tools — 选择一个命令提示工具进入命令提示符,然后定位至OpenSSL的安装目录cd 到openssl目录下,使用命令:perl C
2022-03-26 16:32:53
718
原创 windows下OLLVM编译
windows下OLLVM编译前言环境集成编译环境:使用项目:编译时注意事项集成VS编译环境:使用时候的问题版本问题另一种办法参考:前言一天突发奇想,想尝试再vs环境下使用ollvm混淆一下程序,于是有了一下踩坑过程环境Vs2019CMakePython3Cmder集成编译环境:https://www.jianshu.com/p/ae524033f62a使用项目:https://github.com/qtfreet00/llvm-obfuscatorhttps://githu
2022-03-26 16:00:15
1172
原创 CVE-2020-0729 poc构造记录
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档CVE-2020-0729 poc构造记录前言环境构造过程后续参考前言提由于想找个样本 研究一下,网上搜索了一番并没有现成的样本,于是打算自己尝试构造一个试试环境windows 10构造过程先用这个方法构造一个正常的样本根据已知的漏洞函数我们对其进行分析触发流程函数首先读取2字节类型,并检查是否已设置VT_ARRAY(0x2000)然后该函数检查类型是否为VT_UI4(0x0013),如果不是,则输入swi.
2022-03-26 15:31:59
588
原创 域内HTTPS服务器搭建
域内HTTPS服务器搭建测试环境:过程:局域网内使用生成自签证书使用生成的证书文件apache的更改参考文章测试环境:JspStudyMkcertwindows Server 2012 r2过程:首先安装Mkcert和JspStudy集成环境使用命令:mkcert -install仅仅这么一条简单的命令,就帮助我们将 mkcert 使用的根证书加入了本地可信 CA 中,以后由该 CA 签发的证书在本地都是可信的。在 Windows 的可信 CA 列表可以找到该证书:局域网内使用有时
2022-03-26 15:17:03
2116
原创 Windows下使用C++操作SQLite
由于项目中要使用到SQLite数据库,所以特地学习记录下来首先先去官网下载源代码https://www.sqlite.org/download.html我下的是这个:然后将解压出来的四个文件新建VS项目编译成lib文件然后将lib文件和放入到要操作SQLite 的vs工程下加入如下代码:#include "sqlite3.h"#pragma comment( lib,"sqlite3.lib" )然后就可以开始增删改查了SQLite C/C++ TutorialC/C++ I
2021-03-07 17:56:38
359
1
原创 记一次VB和.nte逆向
这篇文章先要感谢我一位朋友,我对vb和.net不是很熟悉,分析在他的帮助下才完成了,真的非常感谢他的无私帮助起因有一天想找一款工具替代TeamViewer搜寻中发现了UltraViewer还挺好用的,所以来分析一下看能不能获取到用户保存的密码软件:UltraViewer6.02.008x过程下载下来,先查壳发现加了UPX的壳直接脱壳,UPX脱壳教程很多,这里不写了脱壳的时候明显的发现了VB程序的特征再查壳,确实为VB程序查看程序界面保存密码的地方使用VB.Decompiler
2021-03-07 17:25:23
509
原创 BadUSB利用以及免杀(测试bypass某数字卫士)
文章写了有一段时间了,本来打算投稿某网站的,但发现太菜了,索性算了系统:windows_7_64_专业版工具:cobalt strike3.14、Teensy++2.0关于利用方面我首先就想到了powershell,但是网上的免杀方法已经被杀得七七八八了但是天无绝人之路,再继续搜索下看到了白色键盘师傅的文章,经过测试可绕过文章发布最新的某数字卫士上线https://www.temp33.com/bypass%E7%B3%BB%E5%88%97-%E7%BB%95%E8%BF%87360%E6%
2021-03-03 21:42:17
1094
1
原创 [C++]用字符串作为switch的case子句
有一天突发奇想在switch用字符串,遂在网上查找一番,下面代码都是抄的,个人测试一下没目前还没发现问题原文链接:https://blog.csdn.net/yozidream/article/details/22789147实现1、定义一个hash函数,计算出字符串的hash值,将字符串转换为1个整数;typedef std::uint64_t hash_t; constexpr hash_t prime = 0x100000001B3ull;constexpr hash_t basis
2021-02-27 14:01:06
683
原创 使用vscode调试php
由于测试要使用到这个环境,之前没有做过这方面的工作,特此做个记录以免遗忘工具:vscodephpstudy配置PHP:由于我这里是集成开发环境,不用特地再下载xdebug了,如果不是的话建议先下载对应PHP版本的Xdebug,或者参考一下其他的文章.xdebug下载:https://xdebug.org/download如果是和我一样的环境的话,首先要把phpstudy里面的xdebug调试组件打开,端口默认是9000,然后重启apache服务器重启完成后PHP文件夹里的ext就有php
2021-02-10 20:44:12
171
原创 BadUSB制作基础(基于Teensy++2.0)
我这里用的Teensy++2.0的板子,因为看上了它的特点:Windows免驱动,某宝上有卖首先搭开发环境:windows7_64_专业版ARDUINO 1.8.12https://www.arduino.cc/en/main/OldSoftwareReleasesTeensyduino Version 1.53https://www.pjrc.com/teensy/td_download.html先装的 ARDUINO 再装 Teensyduino安装完成后在工具栏里选择对应的板,以及us
2021-01-01 16:43:07
846
原创 关于shellcode工具的一些收集
之前的C语言shellcode模板并不够便捷然后发现了个更加优秀的模板支持:x86/x64PIC_Bindshell:https://github.com/mattifestation/PIC_Bindshell下面这个是看雪大佬基于上面的工程改良过的模板,不过需要20块买个课程,里面有一些讲解优化的思路以及排除一些之前模板上的bug,个人感觉还是可以,有兴趣的师傅可以买来看看:https://www.kanxue.com/book-brief-40.htmC++模板:ShellcodeStd
2021-01-01 14:54:38
474
原创 [windows内核]分析MmIsAddressValid
如果有过驱动编程经验的人一定会了解这个函数MmIsAddressValid(),这个函数的作用简单来说就是验证一个地址可否使用,因为在驱动编程里稍有不慎就会导致BSOD,会在读取和写入数据的时候都要非常谨慎,做好充足的判断。这是MSDN中的解释https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/nf-ntddk-mmisaddressvalidIf no page fault would occur from r
2020-09-19 16:56:47
3106
原创 [windows内核]PWT&PCD
更多详细解释请看手册第三卷: 4.9 PAGING AND MEMORY TYPING手册第三卷: CHAPTER 11 MEMORY CACHE CONTROL在学习PDE与PTE的属性时,我们对两个位做只做了简单的说明,并没有说明其实际作用,那就是今天要学习的PWT位与PCD位CPU缓存描述:CPU缓存是位于CPU与物理内存之间的临时存储器,它的容量比内存小的多,但是交换速度(读写速度)比内存要快得多CPU缓存可以做的很大,有几K、几十K、几百K、甚至上M,这决定于CPU的版本
2020-09-06 21:43:55
610
原创 [windows内核]控制寄存器
更详细的内容请看手册中第三卷中的2.5 CONTROL REGISTERS更多参考《软件调试第二版:卷1硬件基础》 中的第2.44章 控制寄存器控制寄存器描述:控制寄存器有五个,分别是:Cr0 Cr1 Cr2 Cr3 和Cr4,在64位模式下还有个Cr8Control registers (CR0, CR1, CR2, CR3, and CR4; see Figure 2-7)Register CR8 is available in 64-bit mode only.控
2020-09-06 16:06:57
722
原创 [windows内核]中断与异常处理
详细解释在手册中的:CHAPTER 6INTERRUPT AND EXCEPTION HANDLING一、中断描述:中断通常是由CPU外部的输入输出设备(硬件)所触发的,供外部设备通知CPU“有事情需要处理”,因此又叫中断请求(Interrupt Request)中断请求的目的是希望CPU暂时停止执行当前正在执行的程序,转去执行中断请求所对应的中断处理例程(中断处理程序在哪有IDT表决定)80x86有两条中断请求线:可屏蔽中断线,称为INTR(Interrupt Requi
2020-09-05 23:56:12
1975
原创 [windows内核]TLB
地址解析当我们通过一个线性地址访问一个物理页(比如:MOV EAX,[0x12345678])时,实际上CPU未必只读了4个字节。10-10-12分页CPU先通过线性地址找到对应的PDE:4个字节CPU再通过PDE和线性地址找到PTE:4个字节最后再通过PTE找到对应物理页:4个字节一共访问了12个字节,如果跨页可能更多。2-9-9-12分页找到PDPTE:8个字节找到PDE:8个字节找到PTE:8个字节最后找到物理页:4个字节一共访问了20个字节,如果跨页可能更多。为了提高访问
2020-08-30 02:15:19
515
原创 [windows内核]2-9-9-12分页
回顾之前我们解了10-10-12分页方式,在这种分页方式下物理地址最多可达4GB。但随着硬件的发展,4GB的物理地址范围已经无法满足要求Intel在1996年就已经意识到这个问题了,所以设计了新的分页方式,也就是我们这次要说的2-9-9-12分页,又称为PAE(物理地址扩展)分页。具体细节可以再手册第3卷中的4.4 PAE PAGING查看10-10-12分页 原理Intel认为一张页的大小为4K是比较合理的,所以先确定页的大小为4K,4KB等于4096个字节,也就是2的12次方,所以32位
2020-08-17 02:02:06
764
原创 [windows内核]页目录表基址/页表基址
如果系统要保证某个线性地址是有效的,那么必须为其填充正确的PDE与PTE.如果我们想填充PDE与PTE,那么必须能够访问PDT与PTT,这样就存在2个问题:系统已经为我们访问PDT与PTT挂好了PDE与PTE,我们只用找到这个线性地址就可以了系统是怎么帮我们挂好PDE与PTE的?注意:CR3中存储的是物理地址,不能在程序中直接读取的。如果想读取,也要把Cr3的值挂到PDT和PTT中才能访问,那么怎么通过线性地址访问PDT和PTT呢?一.页目录表基址页目录表基址 = 线性地址:0xC0
2020-08-15 17:27:13
2556
原创 [windows内核]PDE&PTE
Cr3描述:在所有的寄存器中,只有Cr3存储的是物理地址,其它寄存器存的都是线性地址Cr3所存储的物理地址指向了一个页目录表(PDT)在Windows中,一个页的大小通常为4KB,即一个页可以存储1024个页目录表项(PDE)下面是手册中的描述在第3卷2.5 CONTROL REGISTERS物理页结构图:注意:但其实上面这种结构方式是错误的,这个以后再解释,先这样理解PDE(页目录表项)描述:页目录表(PDT)的每一项元素称为页目录表项(PDE)每个页目录表项指向一个页表(
2020-08-10 01:53:36
2239
原创 [windows内核]10-10-12分页
基本概念4GB内存空间我们都了解过每个进程都有独立的4GB空间4GB的虚拟内存结构:虚拟内存地址范围 描述0x00000000~0x0000FFFF 64kb大小的空指针区域,当然就不可以访问了0x00001000~0x7FFFFFFF 加上上述的空指针区域,低2GB的用户态空间0x80000000~0xFFFFFFFF 高2GB的内核态空间但这个4GB空间并不是完全都使用或者真实存在的。实际上,进程被分配到的“4GB内存空间”只是虚拟的的内存空间,并不是指真正意义上的物理内存,虚拟
2020-08-09 20:57:55
812
原创 [windows内核]任务门
任务门存在于IDT表中,下面是任务门的段描述符下图是任务门触发的时候的执行过程下面总体概述一下如何使用任务门来进行任务切换:1.当中断发生时,处理器用中断号乘以8作为索引访问中断描述符表。当它发现这是一个任务门描述符时,就知道应当发起任务切换。2.取出任务门描述符。3.从任务门描述符中取出新任务的TSS选择子;4.再用TSS选择子访问GDT,取出新任务的TSS描述符5.在执行新任务前,处理器会把当前任务状态保存起来。也就是将当前任务的状态保存到TR寄存器指向的TSS状态段。6.然后处理器
2020-08-02 20:22:08
424
原创 [windows内核]任务状态段
任务状态段(Task-state segment, TSS)之前讲到了,因为SS段的CPL必须与CS段的CPL一致,所以当使用调用门、中断门或陷阱门并产生权限切换时,必然会引起堆栈的切换。通过门描述符的学习可以知道CPL切换时,CS由门描述符决定,但是新的SS和ESP由何而来的呢?答案是 任务状态段(Task-state segment, TSS)任务状态段是一块大小为104字节的内存,它保存了一些重要的值图在手册中7.2.1 Task-State Segment (TSS)抽象成结构体就是下面这
2020-08-02 01:05:15
428
转载 通过PEB枚举进程模块_x86_x64
抄的,原文很详细的说明了原理作者:沉疴出处:https://www.cnblogs.com/lsh123/p/8295774.html.h#pragma once#include <windows.h>#include <winternl.h>#include <ntstatus.h>#include <TlHelp32.h>#include <Psapi.h>#include <vector>using name
2020-08-01 15:04:14
743
原创 [windows内核]陷阱门
陷阱门和中断门差不多,都是存在于IDT表中的下面是陷阱门的段描述符构造虽然陷阱门和中断门差不多,但是具体还是有区别的,区别如下6.12.1.2Flag Usage By Exception- or Interrupt-Handler ProcedureWhen accessing an exception or interrupt handler through either an interrupt gate or a trap gate, the processorclears the
2020-07-19 14:37:54
490
原创 [windows内核]中断门
要说中断门,不得不先说一个概念就是IDT表(中断描述符表),用来存放中断门描述符的地方,IDT也用来存放任务门,以及陷阱门描述符,具体在手册中第三卷:6.11 IDT DESCRIPTORS我们在windbg中可以使用如下指令查看idt表地址以及表的大小下图是中断门描述符的格式字段的具体含义如下现在我们了大概了解了中断门描述符,我们再来了解一下异常和中断处理大概意思是说处理器对异常和中断调用的处理方式与用 CALL 指令调用例程和任务的处理十分相近。响应异常和中断时,处理器将异常或中断
2020-07-12 22:58:28
671
原创 [windows内核]调用门
Windows系统并没有使用调用门,但是没用并不等于没有,所以我们这次主要是靠自己实现,来完成这次的探究关于调用门的说明在手册第三卷的5.83中下面是调用门的段描述符格式可以看到有些值是固定的,这是调用门特有的,我们来逐个看一下段描述符格式里的各个意思The segment selector field in a call gate specifies the code segment to be accessed. The offset field specifies theentry p
2020-07-05 16:54:23
692
原创 [windows内核]长调用与短调用
相信大家都不陌生call指令了,但除了常见的段内调用(CS当前指向的段)外,还有其他几种不同的调用,手册上说明是有4种,在第 2A 卷: 指令集参考(A-L)中的CALL—Call Procedure其中我们要说的另一种就是Far Call(段间调用),Far Call也分为两种类型,一种是特权级别相同的段间调用,一种是特权级别不同的段间调用我们先来看看段内调用和段间调用的区别,在手册中第 1 卷: 基本架构的6.31中共同点是都会改变Stack和EIP,不同点是Far Call还会改变CS并且
2020-06-22 00:31:48
496
原创 [windows内核]代码段跳转实验
本次实验是为了加深对跨段跳转流程的印象首先选一个已有的非一致代码段的段寄存器,将其复制过来,写入一个GDT表里无效的位置中,怎么区分段寄存器是否是代码段前面已经有了,这里不再重复成功写入之后打开R3调试器输入汇编指令修改JMP FAR 004B:0040130C4B是因为我们刚才修改GDT表里段寄存器的位置在第9个,RPL不变如果成功执行那么cs和eip都会改变我们单步一下可以看到成功执行了如果我们把我们修改的段寄存器DPL修改为0是否还能执行成功呢我们来尝试一下还是原来的位
2020-06-21 02:34:36
344
原创 [windows内核]代码段跳转流程
代码段间的跳转(非调用门之类的)段间跳转,有两种情况,要跳转的是一致代码段还是非一致代码段同时修改CS和EIP的指令JMP FAR / CALL FAR / RETF / INT / IRETD注意只改变EIP的指令JMP/CALL/JCC/RET关于代码段间跳转可以在手册中5.8和5.81中有详细解释那么我们就来简单的分析一下它的代码段间跳转执行流程举一个例子JMP FAR 指令格式:JMP 0x20:0x004183D71.段选择子拆分0x20会被拆分成 0000
2020-06-14 22:27:17
330
原创 [windows内核]段权限检查
之前我们有提到过RPL和DPL的概念,RPL在段选择子里,DPL在段描述符里可以看到在Intle32手册里是这样解释他们的,但是关于段权限还有一个新的概念要提,也就CPL(当前特权级)简单理解就是特指CS段选择子的第1和第二位描述了当前运行的进程的特权级,举一个简单的例子使用OD打开一个程序,查看CS的段选择子拆开就是00011011 后两位就是11=3 也就是特权级别为3我们再使用内核调试器,中断下来可以看到我们的cs是8 拆开也就是1000 后两位为00=0 也就是特权
2020-06-01 00:42:53
417
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人