当前位置: 首页 >  法制聚焦  >   >  正文

环球滚动:驱动开发:内核扫描SSDT挂钩状态

  • 2023-06-06 08:23:38 来源:博客园


【资料图】

在笔者上一篇文章《驱动开发:内核实现SSDT挂钩与摘钩》中介绍了如何对SSDT函数进行Hook挂钩与摘钩的,本章将继续实现一个新功能,如何检测SSDT函数是否挂钩,要实现检测挂钩状态有两种方式,第一种方式则是类似于《驱动开发:摘除InlineHook内核钩子》文章中所演示的通过读取函数的前16个字节与原始字节做对比来判断挂钩状态,另一种方式则是通过对比函数的当前地址起源地址进行判断,为了提高检测准确性本章将采用两种方式混合检测。

具体原理,通过解析内核文件PE结构找到导出表,依次计算出每一个内核函数的RVA相对偏移,通过与内核模块基址相加此相对偏移得到函数的原始地址,然后再动态获取函数当前地址,两者作比较即可得知指定内核函数是否被挂钩。

在实现这个功能之前我们需要解决两个问题,第一个问题是如何得到特定内核模块的内存模块基址此处我们需要封装一个GetOsBaseAddress()用户只需要传入指定的内核模块即可得到该模块基址,如此简单的代码没有任何解释的必要;

// 署名权// right to sign one"s name on a piece of work// PowerBy: LyShark// Email: me@lyshark.com#include #include #include typedef struct _LDR_DATA_TABLE_ENTRY{LIST_ENTRY InLoadOrderLinks;LIST_ENTRY InMemoryOrderLinks;LIST_ENTRY InInitializationOrderLinks;PVOID DllBase;PVOID EntryPoint;ULONG SizeOfImage;UNICODE_STRING FullDllName;UNICODE_STRING BaseDllName;ULONG Flags;USHORT LoadCount;USHORT TlsIndex;LIST_ENTRY HashLinks;ULONG TimeDateStamp;} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;// 得到内核模块基址ULONGLONG GetOsBaseAddress(PDRIVER_OBJECT pDriverObject, WCHAR *wzData){UNICODE_STRING osName = { 0 };// WCHAR wzData[0x100] = L"ntoskrnl.exe";RtlInitUnicodeString(&osName, wzData);LDR_DATA_TABLE_ENTRY *pDataTableEntry, *pTempDataTableEntry;//双循环链表定义PLIST_ENTRY    pList;//指向驱动对象的DriverSectionpDataTableEntry = (LDR_DATA_TABLE_ENTRY*)pDriverObject->DriverSection;//判断是否为空if (!pDataTableEntry){return 0;}//得到链表地址pList = pDataTableEntry->InLoadOrderLinks.Flink;// 判断是否等于头部while (pList != &pDataTableEntry->InLoadOrderLinks){pTempDataTableEntry = (LDR_DATA_TABLE_ENTRY *)pList;if (RtlEqualUnicodeString(&pTempDataTableEntry->BaseDllName, &osName, TRUE)){return (ULONGLONG)pTempDataTableEntry->DllBase;}pList = pList->Flink;}return 0;}VOID UnDriver(PDRIVER_OBJECT driver){DbgPrint("驱动卸载 \n");}NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath){DbgPrint("Hello LyShark.com \n");ULONGLONG kernel_base = GetOsBaseAddress(Driver, L"ntoskrnl.exe");DbgPrint("ntoskrnl.exe => 模块基址: %p \n", kernel_base);ULONGLONG hal_base = GetOsBaseAddress(Driver, L"hal.dll");DbgPrint("hal.dll => 模块基址: %p \n", hal_base);Driver->DriverUnload = UnDriver;return STATUS_SUCCESS;}

如上直接编译并运行,即可输出ntoskrnl.exe以及hal.dll两个内核模块的基址;

其次我们还需要实现另一个功能,此时想像一下当我告诉你一个内存地址,我想要查该内存地址属于哪个模块该如何实现,其实很简单只需要拿到这个地址依次去判断其是否大于等于该模块的基地址,并小于等于该模块的结束地址,那么我们就认为该地址落在了此模块上,在这个思路下LyShark实现了以下代码片段。

// 署名权// right to sign one"s name on a piece of work// PowerBy: LyShark// Email: me@lyshark.com#include #include #include typedef struct _LDR_DATA_TABLE_ENTRY{LIST_ENTRY InLoadOrderLinks;LIST_ENTRY InMemoryOrderLinks;LIST_ENTRY InInitializationOrderLinks;PVOID DllBase;PVOID EntryPoint;ULONG SizeOfImage;UNICODE_STRING FullDllName;UNICODE_STRING BaseDllName;ULONG Flags;USHORT LoadCount;USHORT TlsIndex;LIST_ENTRY HashLinks;ULONG TimeDateStamp;} LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY;// 扫描指定地址是否在某个模块内VOID ScanKernelModuleBase(PDRIVER_OBJECT pDriverObject, ULONGLONG address){LDR_DATA_TABLE_ENTRY *pDataTableEntry, *pTempDataTableEntry;PLIST_ENTRY pList;pDataTableEntry = (LDR_DATA_TABLE_ENTRY*)pDriverObject->DriverSection;if (!pDataTableEntry){return;}// 得到链表地址pList = pDataTableEntry->InLoadOrderLinks.Flink;// 判断是否等于头部while (pList != &pDataTableEntry->InLoadOrderLinks){pTempDataTableEntry = (LDR_DATA_TABLE_ENTRY *)pList;ULONGLONG start_address = (ULONGLONG)pTempDataTableEntry->DllBase;ULONGLONG end_address = start_address + (ULONG)pTempDataTableEntry->SizeOfImage;// 判断区间// DbgPrint("起始地址 [ %p ] 结束地址 [ %p ] \n",start_address,end_address);if (address >= start_address && address <= end_address){DbgPrint("[LyShark] 当前函数所在模块 [ %ws ] \n", (CHAR *)pTempDataTableEntry->FullDllName.Buffer);}pList = pList->Flink;}}VOID UnDriver(PDRIVER_OBJECT driver){DbgPrint("驱动卸载 \n");}NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath){DbgPrint("Hello LyShark.com \n");ScanKernelModuleBase(Driver, 0xFFFFF8051AF5D030);Driver->DriverUnload = UnDriver;return STATUS_SUCCESS;}

我们以0xFFFFF8051AF5D030地址为例对其进行判断可看到输出了如下结果,此地址被落在了hal.dll模块上;

为了能读入磁盘PE文件到内存此时我们还需要封装一个LoadKernelFile()函数,该函数的作用是读入一个内核文件到内存空间中,此处如果您使用前一篇《驱动开发:内核解析PE结构导出表》文章中的内存映射函数来读写则会蓝屏,原因很简单KernelMapFile()是映射而映射一定无法一次性完整装载其次此方法本质上还在占用原文件,而LoadKernelFile()则是读取磁盘文件并将其完整拷贝一份,这是两者的本质区别,如下代码则是实现完整拷贝的实现;

// 署名权// right to sign one"s name on a piece of work// PowerBy: LyShark// Email: me@lyshark.com#include #include #include // 将内核文件装载入内存(磁盘)PVOID LoadKernelFile(WCHAR *wzFileName){NTSTATUS Status;HANDLE FileHandle;IO_STATUS_BLOCK ioStatus;FILE_STANDARD_INFORMATION FileInformation;// 设置路径UNICODE_STRING uniFileName;RtlInitUnicodeString(&uniFileName, wzFileName);// 初始化打开文件的属性OBJECT_ATTRIBUTES objectAttributes;InitializeObjectAttributes(&objectAttributes, &uniFileName, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, NULL, NULL);// 打开文件Status = IoCreateFile(&FileHandle, FILE_READ_ATTRIBUTES | SYNCHRONIZE, &objectAttributes, &ioStatus, 0, FILE_READ_ATTRIBUTES, FILE_SHARE_READ, FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0, CreateFileTypeNone, NULL, IO_NO_PARAMETER_CHECKING);if (!NT_SUCCESS(Status)){return 0;}// 获取文件信息Status = ZwQueryInformationFile(FileHandle, &ioStatus, &FileInformation, sizeof(FILE_STANDARD_INFORMATION), FileStandardInformation);if (!NT_SUCCESS(Status)){ZwClose(FileHandle);return 0;}// 判断文件大小是否过大if (FileInformation.EndOfFile.HighPart != 0){ZwClose(FileHandle);return 0;}// 取文件大小ULONG64 uFileSize = FileInformation.EndOfFile.LowPart;// 分配内存PVOID pBuffer = ExAllocatePoolWithTag(NonPagedPool, uFileSize + 0x100, (ULONG)"LyShark");if (pBuffer == NULL){ZwClose(FileHandle);return 0;}// 从头开始读取文件LARGE_INTEGER byteOffset;byteOffset.LowPart = 0;byteOffset.HighPart = 0;Status = ZwReadFile(FileHandle, NULL, NULL, NULL, &ioStatus, pBuffer, uFileSize, &byteOffset, NULL);if (!NT_SUCCESS(Status)){ZwClose(FileHandle);return 0;}// ExFreePoolWithTag(pBuffer, (ULONG)"LyShark");ZwClose(FileHandle);return pBuffer;}VOID UnDriver(PDRIVER_OBJECT driver){DbgPrint("驱动卸载 \n");}NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath){// 加载内核模块PVOID BaseAddress = LoadKernelFile(L"\\SystemRoot\\system32\\ntoskrnl.exe");DbgPrint("BaseAddress = %p\n", BaseAddress);// 解析PE头PIMAGE_DOS_HEADER pDosHeader;PIMAGE_NT_HEADERS pNtHeaders;// DLL内存数据转成DOS头结构pDosHeader = (PIMAGE_DOS_HEADER)BaseAddress;// 取出PE头结构pNtHeaders = (PIMAGE_NT_HEADERS)((ULONGLONG)BaseAddress + pDosHeader->e_lfanew);DbgPrint("[LyShark] => 映像基址: %p \n", pNtHeaders->OptionalHeader.ImageBase);// 结束后释放内存ExFreePoolWithTag(BaseAddress, (ULONG)"LyShark");Driver->DriverUnload = UnDriver;return STATUS_SUCCESS;}

运行如上这段程序,则会将ntoskrnl.exe文件载入到内存,并读取出其中的OptionalHeader.ImageBase映像基址,如下图所示;

有了上述方法,最后一步就是组合并实现判断即可,如下代码通过对导出表的解析,并过滤出所有的Nt开头的系列函数,然后依次对比起源地址与原地址是否一致,得出是否被挂钩,完整代码如下所示;

// 署名权// right to sign one"s name on a piece of work// PowerBy: LyShark// Email: me@lyshark.comULONGLONG ntoskrnl_base = 0;NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath){DbgPrint("Hello LyShark.com \n");// 加载内核模块PVOID BaseAddress = LoadKernelFile(L"\\SystemRoot\\system32\\ntoskrnl.exe");DbgPrint("BaseAddress = %p\n", BaseAddress);// 获取内核模块地址ntoskrnl_base = GetOsBaseAddress(Driver, L"ntoskrnl.exe");// 取出导出表PIMAGE_DOS_HEADER pDosHeader;PIMAGE_NT_HEADERS pNtHeaders;PIMAGE_SECTION_HEADER pSectionHeader;ULONGLONG FileOffset;PIMAGE_EXPORT_DIRECTORY pExportDirectory;// DLL内存数据转成DOS头结构pDosHeader = (PIMAGE_DOS_HEADER)BaseAddress;// 取出PE头结构pNtHeaders = (PIMAGE_NT_HEADERS)((ULONGLONG)BaseAddress + pDosHeader->e_lfanew);// 判断PE头导出表表是否为空if (pNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress == 0){return 0;}// 取出导出表偏移FileOffset = pNtHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress;// 取出节头结构pSectionHeader = (PIMAGE_SECTION_HEADER)((ULONGLONG)pNtHeaders + sizeof(IMAGE_NT_HEADERS));PIMAGE_SECTION_HEADER pOldSectionHeader = pSectionHeader;// 遍历节结构进行地址运算for (UINT16 Index = 0; Index < pNtHeaders->FileHeader.NumberOfSections; Index++, pSectionHeader++){if (pSectionHeader->VirtualAddress <= FileOffset && FileOffset <= pSectionHeader->VirtualAddress + pSectionHeader->SizeOfRawData){FileOffset = FileOffset - pSectionHeader->VirtualAddress + pSectionHeader->PointerToRawData;}}// 导出表地址pExportDirectory = (PIMAGE_EXPORT_DIRECTORY)((ULONGLONG)BaseAddress + FileOffset);// 取出导出表函数地址PULONG AddressOfFunctions;FileOffset = pExportDirectory->AddressOfFunctions;// 遍历节结构进行地址运算pSectionHeader = pOldSectionHeader;for (UINT16 Index = 0; Index < pNtHeaders->FileHeader.NumberOfSections; Index++, pSectionHeader++){if (pSectionHeader->VirtualAddress <= FileOffset && FileOffset <= pSectionHeader->VirtualAddress + pSectionHeader->SizeOfRawData){FileOffset = FileOffset - pSectionHeader->VirtualAddress + pSectionHeader->PointerToRawData;}}// 这里注意一下foa和rvaAddressOfFunctions = (PULONG)((ULONGLONG)BaseAddress + FileOffset);// 取出导出表函数名字PUSHORT AddressOfNameOrdinals;FileOffset = pExportDirectory->AddressOfNameOrdinals;// 遍历节结构进行地址运算pSectionHeader = pOldSectionHeader;for (UINT16 Index = 0; Index < pNtHeaders->FileHeader.NumberOfSections; Index++, pSectionHeader++){if (pSectionHeader->VirtualAddress <= FileOffset && FileOffset <= pSectionHeader->VirtualAddress + pSectionHeader->SizeOfRawData){FileOffset = FileOffset - pSectionHeader->VirtualAddress + pSectionHeader->PointerToRawData;}}// 注意一下foa和rvaAddressOfNameOrdinals = (PUSHORT)((ULONGLONG)BaseAddress + FileOffset);// 取出导出表函数序号PULONG AddressOfNames;FileOffset = pExportDirectory->AddressOfNames;// 遍历节结构进行地址运算pSectionHeader = pOldSectionHeader;for (UINT16 Index = 0; Index < pNtHeaders->FileHeader.NumberOfSections; Index++, pSectionHeader++){if (pSectionHeader->VirtualAddress <= FileOffset && FileOffset <= pSectionHeader->VirtualAddress + pSectionHeader->SizeOfRawData){FileOffset = FileOffset - pSectionHeader->VirtualAddress + pSectionHeader->PointerToRawData;}}// 注意一下foa和rvaAddressOfNames = (PULONG)((ULONGLONG)BaseAddress + FileOffset);// 分析导出表ULONG uOffset;LPSTR FunName;ULONG uAddressOfNames;ULONG TargetOff = 0;for (ULONG uIndex = 0; uIndex < pExportDirectory->NumberOfNames; uIndex++, AddressOfNames++, AddressOfNameOrdinals++){uAddressOfNames = *AddressOfNames;pSectionHeader = pOldSectionHeader;for (UINT16 Index = 0; Index < pNtHeaders->FileHeader.NumberOfSections; Index++, pSectionHeader++){if (pSectionHeader->VirtualAddress <= uAddressOfNames && uAddressOfNames <= pSectionHeader->VirtualAddress + pSectionHeader->SizeOfRawData){uOffset = uAddressOfNames - pSectionHeader->VirtualAddress + pSectionHeader->PointerToRawData;}}FunName = (LPSTR)((ULONGLONG)BaseAddress + uOffset);if (FunName[0] == "N" && FunName[1] == "t"){// 得到相对RVATargetOff = (ULONG)AddressOfFunctions[*AddressOfNameOrdinals];// LPSTR -> UNCODE// 先转成ANSI 然后在转成 UNCODEANSI_STRING ansi = { 0 };UNICODE_STRING uncode = { 0 };RtlInitAnsiString(&ansi, FunName);RtlAnsiStringToUnicodeString(&uncode, &ansi, TRUE);// 得到当前地址PULONGLONG local_address = MmGetSystemRoutineAddress(&uncode);/*// 读入内核函数前6个字节unsigned char local_opcode[6] = { 0 };unsigned char this_opcode[6] = { 0 };RtlCopyMemory(local_opcode, (void *)local_address, 6);RtlCopyMemory(this_opcode, (void *)(ntoskrnl_base + TargetOff), 6);// 当前机器码for (int x = 0; x < 6; x++){DbgPrint("当前 [ %d ] 机器码 [ %x ] ", x, local_opcode[x]);}// 起源机器码for (int y = 0; y < 6; y++){DbgPrint("起源 [ %d ] 机器码 [ %x ] ", y, this_opcode[y]);}*/// 检测是否被挂钩 [不相等则说明被挂钩了]if (local_address != (ntoskrnl_base + TargetOff)){DbgPrint("索引 [ %d ] RVA [ %p ] \n --> 起源地址 [ %p ] | 当前地址 [ %p ] | 函数名 [ %s ] \n\n",*AddressOfNameOrdinals, TargetOff, ntoskrnl_base + TargetOff, local_address, FunName);}// 检查当前地址所在模块// ScanKernelModuleBase(Driver, (PULONGLONG)local_address);}}// 结束后释放内存ExFreePoolWithTag(BaseAddress, (ULONG)"LyShark");Driver->DriverUnload = UnDriver;return STATUS_SUCCESS;}

使用ARK工具手动改写几个Nt开头的函数,并运行这段代码,观察是否可以输出被挂钩的函数详情;

标签:

最新推荐

环球滚动:驱动开发:内核扫描SSDT挂钩状态

在笔者上一篇文章`《驱动开发:内核实现SSDT挂钩与摘钩》`中介绍了如何

环球热讯:郑振瑶:离开前已经遗忘丨逝者

郑振瑶(1936-2023)安徽,演员对于年轻观众而言,郑振瑶这个名字,就

南阳市四中官网_南阳市四中_环球精选

1、南阳市联合街东段过了解放路和联合街十字口往东路南,金汉丰附近,新

国家自然博物馆揭牌

6月5日,国家自然博物馆在北京正式揭牌,标志着我国自然博物馆发展历程

世界观焦点:房子_fz

1、fz是意大利语forzando的简写,意思是“加强的”,是一个音乐力度术

孝慎成皇后宫殿(孝慎成皇后)

1、太祖爱新觉罗努尔哈赤孝慈高皇后阿巴亥太宗爱新觉罗皇太极孝端文皇

天天视讯!李婧个人简历_李婧副市长丈夫是谁

1、百度了一下,你说的两个人分别是陕西省委宣传部副部长刘伟和西安市

环球时讯:深圳校招对口院校排名 有哪些途径可以报名2016招商银行深圳分行校园招聘的...

今天,大学路小编为大家带来了深圳校招对口院校排名有哪些途径可以报名

废物利用手工作品做法_如何废物利用手工作品

1、多余的矿泉水瓶可以有多种用途。矿泉水瓶的头部大多是圆锥形的,可

为博女友欢心,男子不惜铤而走险帮诈骗团伙“洗钱”_世界速看

为博女友欢心,男子不惜铤而走险帮诈骗团伙“洗钱”---安徽男子洪某为

尚太科技:就目前市场情况来看 公司二季度销售有回暖趋势-全球讯息

尚太科技:就目前市场情况来看公司二季度销售有回暖趋势

海南依法打击处置一批违规“涉考”自媒体账号[图] 精选

海南省网信办结合近期开展的“清朗·从严整治‘自媒体’乱象”专项行动

每日热点:全省国家级科技企业孵化器达67家

全省国家级科技企业孵化器达67家

阿房宫股东夏陆一减持14.52万股 权益变动后直接持股比例为7%

阿房宫股东夏陆一减持14 52万股权益变动后直接持股比例为7%2023 6 520:

经典国漫IP改编《龙神八部之西行纪》今日公测_天天新视野

由经典国漫IP《西行纪》正版授权,恺英网络独代发行的国漫卡牌新游《龙

捷邦科技:公司具备向大客户提供MR设备的精密功能件研发、制造能力|今日报

捷邦科技(301326)06月05日在投资者关系平台上答复了投资者关心的问题。

全球热消息:北京:高考送考车辆轻微违法不作现场处罚

本报讯(记者安然)今年高考将于6月7日至10日(周三至周六)进行,6 5

文章姚笛又凑到一起去了?网传两人复合,女方小腹有隆起迹象

在被拍到的照片中,文章身边的卷发美女,从脸部轮廓来看,的确跟姚笛相

【环球新视野】自然数的定义包括小数吗_自然数包括小数和分数

1、自然数包括0和正整数小数和分数不是自然数希望我的回答能帮助你,如

热点聚焦:衣服血洗掉妙招(衣服血洗掉妙招有哪些)

1、使用牙膏清洗。这种方法最好只用在那些可以放进洗衣机清洗或可以用

世界热头条丨爱了恨了伤了痛了是哪首歌的歌词_爱了恨了伤了痛了

1、是不是周传雄的割舍啊没有玫瑰花没有说情话只能为你默默的牵挂想你

苹果后面闪光怎么设置呢?如何设置苹果后面闪光?

演示机型:Iphone12系统版本:IOS15 4APP版本:null苹果后面闪

顺丰寄香港几天能到_顺丰寄香港

1、首重1KG20元,续重1KG10元(人民币)是按照重量计算的。2、大约2-3

天天通讯!2023年第1号预警!事关在校学生→

同学们注意了!!教育部全国学生资助管理中心日前发布了2023年第1号预

环球微资讯!河北新乐:芒种将至农事忙

6月4日,新乐市贾庄村峻业农场农民正在给葡萄蔬果。芒种将至,田野处处

天天讯息:港股开盘 | 恒指高开0.34% 科网股表现分化 机构:三大因素支撑港股反弹

恒指高开0 34%,科网股表现分化,光大证券:美加息预期下降等三大因素

策展的能量与引擎作用

近日,“策展在中国”论坛于首届武汉双年展落下帷幕前得以举办,这次的主题是“策展与文化赋能”。作为...

中信证券:科技大厂进军机器人产业 推动技术创新与落地进程加速

中信证券:科技大厂进军机器人产业推动技术创新与落地进程加速

戒烟其实不是一个生理问题,而是一个心理问题|环球速看

我抽了三十年烟,一天基本两包半!前年的某一天,我看着手上的烟,青烟缭绕,忽然感觉这烟对于我来说有什么

揭秘大漠寻“舱”神器:是谁听到神舟冲出“黑障”后的第一声

6月4日,神舟十五号载人飞船返回舱沐浴着清晨的艳阳,护送“太空出差”6个月之久的神舟十五号飞行乘组返...

13年前今天,国足1-0力挫世界杯冠军法国男足,出场球员今何在?

全场比赛中,法国男足在场面上占据压倒性优势,控球率高达68 7%,射门数20比3,几乎是中国男足的7倍,10次

汨罗市邮政编码414401_1 4401_快播报

1、1 4401属于奥氏体不锈钢对应标准为欧洲EN标准为EN10028-7:2000还有别的几个标准。2、德国标准为D

重庆比较好的美容院在哪里

重庆静心SPA养身馆环境非常干净,舒适伏蠢产品用的是法国顶级进口Florial精油,芳疗师可以根据每位宾客的身

汇银大厦_关于汇银大厦简述|世界新视野

1、汇银大厦属于静安区写字楼,汇银大厦轨道交通地铁11号沿线,属于南京西路商圈写字楼,汇银大厦原名博爱大厦

罗德里戈告别本泽马:你是榜样,是我个人和生涯梦想的一部分 全球新资讯

直播吧6月4日讯在社交媒体中,罗德里戈发文告别了本泽马。罗德里戈写道:“KB9!!!非常感谢我们能在一起

全南县气象台更新雷电黄色预警信号【III级/较重】【2023-06-04】

全南县气象台2023年06月04日20时12分继续发布雷电黄色预警信号:预计未来6小时内,我县所有乡镇的部分地区

全球今日讯!自我介绍演讲稿怎么写 自我介绍演讲稿

1、高中生自我介绍范文  尊敬的老师,同学们,你们好。2、  我叫超超,这名字可能有人听说过,也许有人

姜战林今何在(姜战林) 焦点滚动

姜战林今何在,姜战林这个很多人还不知道,现在让我们一起来看看吧!1、如履薄冰、如临深渊、如坐针毡、生不

环球最新:面包诱惑的正确吃法_面包诱惑的做法

1、一条面包2、配料准备好了3、把面包切成片,装盘。4、菠萝丁5、面包片上浇有蜂蜜和酸奶。6、菠萝撒在上面

黄土高坡在哪里呀_黄土高坡在哪里

1、黄土高坡——黄土高原家在东北——东北平原。本文分享完毕,希望对大家有所帮助。

摊丁入亩是什么意思_摊丁入亩究竟是什么意思 当前报道

想必现在有很多小伙伴对于摊丁入亩究竟是什么意思方面的知识都比较想要了解,那么今天小好小编就为大家收集

上海医都医院项目举行数字化安全演练|环球快消息

原标题:上海医都医院项目举行数字化安全演练日前,中建科技“安全生产月”启动仪式暨2023年“智慧大安...

中国女篮的希望!李梦持球突破一挑三上篮造犯规,身体对抗太强了-环球聚看点

WNBA常规赛继续进行,中国球员李梦的机会越来越多,表现看起来也越来越好。我们都知道WNBA对抗强度很大,尤

我国自主设计建造超大集装箱船多项指标均居世界最高水平-世界要闻

央视网消息:近日,我国自主研制的超大型集装箱船“地中海米歇尔卡佩里尼”轮首航。该轮首站停靠宁波舟...

缴纳的公积金什么时候能到账户

一、缴纳的公积金什么时候能到账户缴纳的公积金在提取手续后三个工作日后能到账户。单位在到建设银行住房公

全球视讯!带人的四字成语_带人字的四字成语

大家好,小石来为大家解答以上问题。带人的四字成语,带人字的四字成语这个很多人还不太了解,现在一起来瞧

世界微速讯:在bios中u盘识别不了怎么办(在bios中u盘识别不了怎么办)

有用户制作好启动盘后重装系统电脑不能识别到U盘启动盘,这是怎么回事呢?下面给跟大家聊聊可能的原因以及解

《原神》新调查问卷:询问各类探索“载具”意见 环球视讯

近日,《原神》米哈游官方面向广大玩家发起“世界探索体验调研问卷”,收集大家对《原神》未来新增内容...

100㎡ 现代风格气质出众的极简之家

设计需求按1人设计意式极简,不需要强调传统的住家温馨氛围尽可能大胆一些房子位于深圳中心地段,天气晴朗

X 广告
X 广告

精彩放送

2023北京西城私立小升初入学条件及方式有哪些? 焦点日报

中国烟草网上订货平台登录(汉中烟草网上订货)-讯息

兄弟萌,你们近期想看那个假面骑士或奥特曼或光影铠甲都可以留言给我哟,我会尽力更新

巴格尼亚:冲刺赛是我现在仍然领先积分榜的原因

【环球新视野】我国首次在载人飞船返回任务中新增后弹道返回搜救区域

当前资讯!一平方等于多少尺换算 一平方等于多少尺

网络的作用都有哪些(网络的作用)

当前观察:综艺节目《少年行》举行开放日活动

百余名香港新入职教师来汉学习|全球微资讯

中国代表团:美国不断虚化掏空一个中国原则_微资讯

快看:5月销量14,300台 比亚迪海鸥首月成绩发布

中超联赛积分榜!北京国安跻身前五,浙江队3连胜距前五3分

市场监管总局:全国范围内部署开展儿童和学生用品安全守护行动

微动态丨专访:应对气候变化需要全球协作——访世界可持续发展工商理事会主席彼得·巴克

天天最资讯丨三星笔记本电脑系统重装步骤_三星笔记本电脑系统重装

环球今热点:红薯凉粉的制作方法

网友激动坏了?上海迪士尼辟谣乐园将落户武汉:假消息 完全不会去

出道即巅峰?入门级仿赛卷出新高度,RC250标配TCS、单摇臂!-世界热文

幻灯机和投影仪的原理_幻灯机和投影仪的区别

焦点精选!前4月北京市新增减税降费及退税缓费173.9亿元

天天速递!微软总裁将会见英国财政大臣 或考虑将动暴撤出英国

健身房如何减肥_在健身房减肥方法

世界观焦点:宏发股份(600885):6月2日北向资金增持20.84万股

当前速递!波罗的海干散货运价指数周五继续下跌,已连续第十五个交易日下跌,周线创1月初以来最大跌幅

莱万:和梅西在一起踢球会很容易,我们希望他能够重返巴萨-全球播报

全球新动态:5月1688平台GMV提升超20% 新买家数提升近40%

罚单丢了怎么交罚款(罚款单丢了怎么找编号)-简讯

广东梅州可提供海尔燃气灶维修服务地址在哪

韩国庆熙大学官网中文_韩国庆熙大学官网

环球观天下!非农喜忧参半!美国5月新增就业33.9万人远超预期 但失业率创2022年10月来新高

世界简讯:跨界联动!内马尔与中国F1车手周冠宇合影

全球实时:泸州老窖:公司股东人数在定期报告中进行披露,请您关注公司定期报告

胜通能源:一季度国内需求不及预期,价格回落,导致营业收入下降

世界今热点:2023苏州中国银行×京东618数字人民红包金额

2023佛山市整形医院已经更新啦-每日热门

环球播报:温州大学瓯江学院是几本的分数线

基金经理要失业了?有私募将AI用于全部在管基金,回应来了:暂时不会独立管理|全球观天下

四川乐山在蓉推广“探秘金口河”第四届“转转花”文旅季 当前观点

贵州省黔南布依族苗族自治州福泉市2023-06-02 04:08发布雷电黄色预警 当前观察

宿命的对决周芷若 宿命的对决-世界微资讯

今日热门!乡村湿地生态美 鹭鸟翩跹“度夏”来

法网:斯瓦泰克谈对阵王欣瑜,我记得她,技术好,力量大

【原】活到这个岁数,还是简单最好

周边均价超4万+!408套新中式湖景房,内卷沙湖豪宅市场

燃烧的蔬菜1下载手机版 燃烧的蔬菜1|今日热文

京东白条可以用微信还款吗?使用后还不上怎么办?_世界新资讯

速讯:AI热潮太疯狂!高盛对冲基金ETF跑赢标普500

港股强势反弹,港股科技ETF(513020)涨超2.4%,明源云涨超5.9%

今年T恤也开始内卷起来!这3款“夏T恤”必不可少,时髦又显瘦_今日热闻

安全鞋标准-焦点日报

Copyright ©  2015-2023 港澳律师网版权所有  备案号:京ICP备2023022245号-31   联系邮箱:435 226 40 @qq.com