利用句柄表实现反调试
白帽子社区
共 5690字,需浏览 12分钟
· 2021-04-27
作者:Evan 编辑:白帽子社区运营团队
"白帽子社区在线CTF靶场BMZCTF,欢迎各位在这里练习、学习,BMZCTF全身心为网络安全赛手提供优质学习环境,链接(http://www.bmzclub.cn/)
"
ntdll!_HANDLE_TABLE
+0x000 TableCode : Uint4B
+0x004 QuotaProcess : Ptr32 _EPROCESS
+0x008 UniqueProcessId : Ptr32 Void
+0x00c HandleTableLock : [4] _EX_PUSH_LOCK
+0x01c HandleTableList : _LIST_ENTRY
+0x024 HandleContentionEvent : _EX_PUSH_LOCK
+0x028 DebugInfo : Ptr32 _HANDLE_TRACE_DEBUG_INFO
+0x02c ExtraInfoPages : Int4B
+0x030 FirstFree : Uint4B
+0x034 LastFree : Uint4B
+0x038 NextHandleNeedingPool : Uint4B
+0x03c HandleCount : Int4B
+0x040 Flags : Uint4B
+0x040 StrictFIFO : Pos 0, 1 Bit
#include <ntddk.h>
#include <ntstatus.h>
ULONG GetProcessEprocess(char* ProcessName)
{
PEPROCESSpEprocess,pCurEProcess;
//获取进程的EProcess
__asm
{
moveax,fs:[0x124]
moveax,[eax+0x220]
movpEprocess,eax
}
pCurEProcess=pEprocess;
do
{
PCHARImageFileName=(PCHAR)pCurEProcess+0x174;
if(strcmp(ImageFileName,ProcessName)==0)
{
return (ULONG)pCurEProcess;
}
pCurEProcess=(PEPROCESS)(*(PULONG)((ULONG)pCurEProcess+0x88)-0x88);
}while(pCurEProcess!=pEprocess);
return0;
}
BOOLEAN CheckProcessDebug(ULONG CheckedProcess)
{
PEPROCESSpEprocess,pCurEProcess;
PULONG table;
PEPROCESS eps;
ULONG ObTable;
int i,j,k;
//获取进程的EProcess
__asm
{
moveax,fs:[0x124]
moveax,[eax+0x220]
movpEprocess,eax
}
DbgPrint("开始检查\n");
pCurEProcess=pEprocess;
do
{
PCHARImageFileName=(PCHAR)pCurEProcess+0x174;
ULONGObjectTable=*(PULONG)((ULONG)pCurEProcess+0xc4);
if(ObjectTable!=0)
{
DbgPrint("[%s]\t[%s]\t[%x]\t[%x]\n",ImageFileName,((PCHAR)CheckedProcess+0x174),ObjectTable,CheckedProcess);
ObTable=(ULONG)ObjectTable;
switch(ObTable&0x3)
{
case0:
table=(PULONG)((*(PULONG)ObTable)&0xfffffffc);
for(i=0;i<512;i+=2)
{
eps=(PEPROCESS)((table[i]&0xfffffff8)+0x18);
//DbgPrint("程序正在被 [%x] 检查!\n", (ULONG)eps);
if(strcmp(ImageFileName,"csrss.exe")!=0&&eps==(PEPROCESS)CheckedProcess)
{
DbgPrint("程序正在被 [%s] 调试!\n", ImageFileName);
return TRUE;
}
}
break;
case1:
for(i=0;i<1024;i++)
{
table=(PULONG)(*(PULONG)ObTable)+i;
if(MmIsAddressValid((PVOID)table))
for(j=0;j<512;j++)
{
eps=(PEPROCESS)((ULONG)(table+j*2)&0xfffffff8+0x18);
DbgPrint("程序正在被 [%s] 检查!\n", (PCHAR)eps+0x174);
if(eps==(PEPROCESS)CheckedProcess)
{
DbgPrint("程序正在被 [%s] 调试!\n", ImageFileName);
return TRUE;
}
}
}
break;
case2:
for(i=0;i<1024;i++)
{
table=(PULONG)(*(PULONG)ObTable)+i;
if(MmIsAddressValid((PVOID)table))
for(j=0;j<1024;j++)
{
table=(PULONG)(*(PULONG)ObTable)+j;
if(MmIsAddressValid((PVOID)table))
for(k=0;k<512;k++)
{
eps=(PEPROCESS)((ULONG)(table+k*2)&0xfffffff8+0x18);
DbgPrint("程序正在被 [%s] 检查!\n", (PCHAR)eps+0x174);
if(eps==(PEPROCESS)CheckedProcess)
{
DbgPrint("程序正在被 [%s] 调试!\n", ImageFileName);
return TRUE;
}
}
}
}
break;
default:
DbgPrint("NoPass");
}
}
pCurEProcess=(PEPROCESS)(*(PULONG)((ULONG)pCurEProcess+0x88)-0x88);
}while(pCurEProcess!=pEprocess);
DbgPrint("Processing is not debug");
return FALSE;
}
VOID DriverUnload(PDRIVER_OBJECT pDriver)
{
DbgPrint("Driver unloaded.\n");
}
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver,PUNICODE_STRING reg_path)
{
ULONG addr;
pDriver->DriverUnload = DriverUnload;
//获取需要保护的进程的EProcess
addr=GetProcessEprocess("notepad.exe");
DbgPrint("程序正在被 [%d] 调试!\n", addr);
CheckProcessDebug(addr);
return STATUS_SUCCESS;
}
评论
5000w+ 的大表如何拆?亿级别大表拆分实战复盘
前言笔者是在两年前接手公司的财务系统的开发和维护工作。在系统移交的初期,笔者和团队就发现,系统内有一张5000W+的大表。跟踪代码发现,该表是用于存储资金流水的表格,关联着众多功能点,同时也有众多的下游系统在使用这张表的数据。进一步的观察发现,这张表还在以每月600W+的数据持续增长,也就是说,不超
码农编程进阶笔记
0
15种时间序列预测方法总结(包含多种方法代码实现)
向AI转型的程序员都关注了这个号👇👇👇在这篇文章中,我们将深入探讨时间序列预测的基本概念和方法。我们将首先介绍单元预测和多元预测的概念,然后详细介绍各种深度学习和传统机器学习方法如何应用于时间序列预测,包括循环神经网络(RNN)、一维卷积神经网络(1D-CNN)、Transformer、自回归模型(
机器学习AI算法工程
0
Vite 4.3 为何性能爆表?
大厂技术 高级前端 Node进阶点击上方 程序员成长指北,关注公众号回复1,加入高级Node交流群Vite 4.3 相比 Vite 4.2 取得了惊人的性能提升,下面和大家分享一下 Vite 4.3 性能大幅提升的幕后技术细节,深度阅读,全程高能
程序员成长指北
0
SpringBoot 实现图片防盗链功能
程序员的成长之路互联网/程序员/技术/资料共享 关注阅读本文大概需要 4 分钟。来自:blog.csdn.net/weixin_46157208/article/details/138051737前言出于安全考虑,我们需要后端返回的图片只允许在某个网站内展示,不想被爬虫拿到图片地
程序员的成长之路
0
一站式解决方案:基于 Arthas 实现服务发现和权限控制
来源:juejin.cn/post/7281849496983994383👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦, 演示链接
小哈学Java
0
用 Shader 实现旗帜飘扬动画效果
我觉得对于刚入门 3D 编程的朋友来说,如果能够完成代码创建模型数据->创建材质->编写Shader动画这一系列,想必会有满满的成就感。今天就用 Cocos Creator 的 utils.MeshUtils.createMesh 接口,带大家感受一下这个流程。这个流程不仅可以用于新手学
COCOS
2
字节员工:35岁以后被裁员的,后来都走了哪条路?现在2-2,要不要利用最后一年拼命上个岸。
架构师大咖
架构师大咖,打造有价值的架构师交流平台。分享架构师干货、教程、课程、资讯。架构师大咖,每日推送。
公众号该公众号已被封禁在当今竞争激烈的职场环境中,年龄并不总是一个决定性
源码共读
0
分库分表,可能真的要退出历史舞台了!
来源:https://www.jianshu.com/p/9131edd8fd2c👉 欢迎加入小哈的星球 ,你将获得: 专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 2.0 版本完结啦,
小哈学Java
1