2023-06-24 13:56:26來(lái)源:博客園
(相關(guān)資料圖)
在筆者上一篇文章《驅(qū)動(dòng)開(kāi)發(fā):內(nèi)核層InlineHook掛鉤函數(shù)》
中介紹了通過(guò)替換函數(shù)
頭部代碼的方式實(shí)現(xiàn)Hook
掛鉤,對(duì)于ARK工具來(lái)說(shuō)實(shí)現(xiàn)掃描與摘除InlineHook
鉤子也是最基本的功能,此類(lèi)功能的實(shí)現(xiàn)一般可在應(yīng)用層進(jìn)行,而驅(qū)動(dòng)層只需要保留一個(gè)讀寫(xiě)字節(jié)
的函數(shù)即可,將復(fù)雜的流程放在應(yīng)用層實(shí)現(xiàn)是一個(gè)非常明智的選擇,與《驅(qū)動(dòng)開(kāi)發(fā):內(nèi)核實(shí)現(xiàn)進(jìn)程反匯編》
中所使用的讀寫(xiě)驅(qū)動(dòng)基本一致,本篇文章中的驅(qū)動(dòng)只保留兩個(gè)功能,控制信號(hào)IOCTL_GET_CUR_CODE
用于讀取函數(shù)的前16個(gè)字節(jié)的內(nèi)存,信號(hào)IOCTL_SET_ORI_CODE
則用于設(shè)置前16個(gè)字節(jié)的內(nèi)存。
之所以是前16個(gè)字節(jié)是因?yàn)橐话愕?code>內(nèi)聯(lián)Hook只需要使用兩條指令就可實(shí)現(xiàn)劫持,如下是通用ARK工具掃描到的被掛鉤函數(shù)的樣子。
首先將內(nèi)核驅(qū)動(dòng)程序代碼放到如下,內(nèi)核驅(qū)動(dòng)程序沒(méi)有任何特別的,僅僅只是一個(gè)通用驅(qū)動(dòng)模板,在其基礎(chǔ)上使用CR3讀寫(xiě),如果不理解CR3讀寫(xiě)的原理您可以去看《驅(qū)動(dòng)開(kāi)發(fā):內(nèi)核CR3切換讀寫(xiě)內(nèi)存》
這一篇中的詳細(xì)介紹。
// 署名權(quán)// right to sign one"s name on a piece of work// PowerBy: LyShark// Email: me@lyshark.com#include #include #include #defineDEVICE_NAMEL"\\Device\\WinDDK"#define LINK_NAMEL"\\DosDevices\\WinDDK"#define LINK_GLOBAL_NAMEL"\\DosDevices\\Global\\WinDDK"http:// 控制信號(hào) IOCTL_GET_CUR_CODE 用于讀 | IOCTL_SET_ORI_CODE 用于寫(xiě)#define IOCTL_GET_CUR_CODECTL_CODE(FILE_DEVICE_UNKNOWN, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS)#define IOCTL_SET_ORI_CODECTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS)// 引用__readcr0等函數(shù)必須增加#pragma intrinsic(_disable)#pragma intrinsic(_enable)// 定義讀寫(xiě)結(jié)構(gòu)體typedef struct{PVOID Address;ULONG64 Length;UCHAR data[256];} KF_DATA, *PKF_DATA;KIRQL g_irql;// 關(guān)閉寫(xiě)保護(hù)void WPOFFx64(){ULONG64 cr0;g_irql = KeRaiseIrqlToDpcLevel();cr0 = __readcr0();cr0 &= 0xfffffffffffeffff;__writecr0(cr0);_disable();}// 開(kāi)啟寫(xiě)保護(hù)void WPONx64(){ULONG64 cr0;cr0 = __readcr0();cr0 |= 0x10000;_enable();__writecr0(cr0);KeLowerIrql(g_irql);}// 設(shè)備創(chuàng)建時(shí)觸發(fā)NTSTATUS DispatchCreate(PDEVICE_OBJECT pDevObj, PIRP pIrp){pIrp->IoStatus.Status = STATUS_SUCCESS;pIrp->IoStatus.Information = 0;DbgPrint("[LyShark] 設(shè)備已創(chuàng)建 \n");IoCompleteRequest(pIrp, IO_NO_INCREMENT);return STATUS_SUCCESS;}// 設(shè)備關(guān)閉時(shí)觸發(fā)NTSTATUS DispatchClose(PDEVICE_OBJECT pDevObj, PIRP pIrp){pIrp->IoStatus.Status = STATUS_SUCCESS;pIrp->IoStatus.Information = 0;DbgPrint("[LyShark] 設(shè)備已關(guān)閉 \n");IoCompleteRequest(pIrp, IO_NO_INCREMENT);return STATUS_SUCCESS;}// 主派遣函數(shù)NTSTATUS DispatchIoctl(PDEVICE_OBJECT pDevObj, PIRP pIrp){NTSTATUS status = STATUS_INVALID_DEVICE_REQUEST;PIO_STACK_LOCATION pIrpStack;ULONG uIoControlCode;PVOID pIoBuffer;ULONG uInSize;ULONG uOutSize;// 獲取當(dāng)前設(shè)備棧pIrpStack = IoGetCurrentIrpStackLocation(pIrp);uIoControlCode = pIrpStack->Parameters.DeviceIoControl.IoControlCode;// 獲取緩沖區(qū)pIoBuffer = pIrp->AssociatedIrp.SystemBuffer;// 獲取緩沖區(qū)長(zhǎng)度uInSize = pIrpStack->Parameters.DeviceIoControl.InputBufferLength;// 輸出緩沖區(qū)長(zhǎng)度uOutSize = pIrpStack->Parameters.DeviceIoControl.OutputBufferLength;switch (uIoControlCode){// 讀內(nèi)存case IOCTL_GET_CUR_CODE:{KF_DATA dat = { 0 };// 將緩沖區(qū)格式化為KF_DATA結(jié)構(gòu)體RtlCopyMemory(&dat, pIoBuffer, 16);WPOFFx64();// 將數(shù)據(jù)寫(xiě)回到緩沖區(qū)RtlCopyMemory(pIoBuffer, dat.Address, dat.Length);WPONx64();status = STATUS_SUCCESS;break;}// 寫(xiě)內(nèi)存case IOCTL_SET_ORI_CODE:{KF_DATA dat = { 0 };// 將緩沖區(qū)格式化為KF_DATA結(jié)構(gòu)體RtlCopyMemory(&dat, pIoBuffer, sizeof(KF_DATA));WPOFFx64();// 將數(shù)據(jù)寫(xiě)回到緩沖區(qū)RtlCopyMemory(dat.Address, dat.data, dat.Length);WPONx64();status = STATUS_SUCCESS;break;}}if (status == STATUS_SUCCESS)pIrp->IoStatus.Information = uOutSize;elsepIrp->IoStatus.Information = 0;pIrp->IoStatus.Status = status;IoCompleteRequest(pIrp, IO_NO_INCREMENT);return status;}// 驅(qū)動(dòng)卸載VOID DriverUnload(PDRIVER_OBJECT pDriverObj){UNICODE_STRING strLink;// 刪除符號(hào)鏈接卸載設(shè)備RtlInitUnicodeString(&strLink, LINK_NAME);IoDeleteSymbolicLink(&strLink);IoDeleteDevice(pDriverObj->DeviceObject);}// 驅(qū)動(dòng)程序入口NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryString){NTSTATUS status = STATUS_SUCCESS;UNICODE_STRING ustrLinkName;UNICODE_STRING ustrDevName;PDEVICE_OBJECT pDevObj;// 初始化派遣函數(shù)pDriverObj->MajorFunction[IRP_MJ_CREATE] = DispatchCreate;pDriverObj->MajorFunction[IRP_MJ_CLOSE] = DispatchClose;pDriverObj->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchIoctl;DbgPrint("hello lysahrk.com \n");// 初始化設(shè)備名RtlInitUnicodeString(&ustrDevName, DEVICE_NAME);// 創(chuàng)建設(shè)備status = IoCreateDevice(pDriverObj, 0, &ustrDevName, FILE_DEVICE_UNKNOWN, 0, FALSE, &pDevObj);if (!NT_SUCCESS(status)){return status;}// 創(chuàng)建符號(hào)鏈接RtlInitUnicodeString(&ustrLinkName, LINK_NAME);status = IoCreateSymbolicLink(&ustrLinkName, &ustrDevName);if (!NT_SUCCESS(status)){IoDeleteDevice(pDevObj);return status;}pDriverObj->DriverUnload = DriverUnload;return STATUS_SUCCESS;}
接著來(lái)分析下應(yīng)用層做了什么,首先GetKernelBase64
函數(shù)的作用,該函數(shù)內(nèi)部通過(guò)GetProcAddress()
函數(shù)動(dòng)態(tài)尋找到ZwQuerySystemInformation()
函數(shù)的內(nèi)存地址(此函數(shù)未被到處所以只能動(dòng)態(tài)找到),找到后調(diào)用ZwQuerySystemInformation()
直接拿到系統(tǒng)中的所有模塊信息,通過(guò)pSystemModuleInformation->Module[0].Base
得到系統(tǒng)中第一個(gè)模塊的基地址,此模塊就是ntoskrnl.exe
,該模塊也是系統(tǒng)運(yùn)行后的第一個(gè)啟動(dòng)的,此時(shí)我們即可拿到KernelBase
也就是系統(tǒng)內(nèi)存中的基地址。
此時(shí)通過(guò)LoadLibraryExA()
函數(shù)動(dòng)態(tài)加載,此時(shí)加載的是磁盤(pán)中的被Hook函數(shù)的所屬模塊,獲得映射地址后將此地址裝入hKernel
變量?jī)?nèi),此時(shí)我們擁有了內(nèi)存中的KernelBase
以及磁盤(pán)中加載的hKernel
,接著調(diào)用RepairRelocationTable()
讓兩者的重定位表保持一致。
此時(shí)當(dāng)用戶(hù)調(diào)用GetSystemRoutineAddress()
則執(zhí)行如下流程,想要獲取當(dāng)前內(nèi)存地址,則需要使用當(dāng)前內(nèi)存中的KernelBase
模塊基址加上通過(guò)GetProcAddress()
動(dòng)態(tài)獲取到的磁盤(pán)基址中的函數(shù)地址減去磁盤(pán)中的基地址,將內(nèi)存中的KernelBase
加上磁盤(pán)中的相對(duì)偏移
就得到了當(dāng)前內(nèi)存中加載函數(shù)的實(shí)際地址。
調(diào)用GetOriginalMachineCode()
則用于獲取相對(duì)偏移地址,該地址的獲取方式如下,用戶(hù)傳入一個(gè)Address
當(dāng)前地址,該地址減去KernelBase
內(nèi)存中的基址,然后再加上hKernel
磁盤(pán)加載的基址來(lái)獲取到相對(duì)偏移。
有了這兩條信息那么功能也就實(shí)現(xiàn)了,通過(guò)GetOriginalMachineCode()
得到指定內(nèi)存地址處原始機(jī)器碼,通過(guò)GetCurrentMachineCode()
得到當(dāng)前內(nèi)存機(jī)器碼,兩者通過(guò)memcmp()
函數(shù)比對(duì)即可知道是否被掛鉤了,如果被掛鉤則可以通過(guò)CR3切換將原始機(jī)器碼覆蓋到特定位置替換即可,這段程序的完整代碼如下;
// 署名權(quán)// right to sign one"s name on a piece of work// PowerBy: LyShark// Email: me@lyshark.com#include #include #pragma comment(lib,"user32.lib")#pragma comment(lib,"Advapi32.lib")#ifndef NT_SUCCESS#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)#endif#define BYTE_ARRAY_LENGTH 16#define SystemModuleInformation 11#define STATUS_INFO_LENGTH_MISMATCH ((NTSTATUS)0xC0000004L)typedef long(__stdcall *ZWQUERYSYSTEMINFORMATION)(IN ULONG SystemInformationClass,IN PVOID SystemInformation,IN ULONG SystemInformationLength,IN PULONG ReturnLength OPTIONAL);typedef struct{ULONG Unknow1;ULONG Unknow2;ULONG Unknow3;ULONG Unknow4;PVOID Base;ULONG Size;ULONG Flags;USHORT Index;USHORT NameLength;USHORT LoadCount;USHORT ModuleNameOffset;char ImageName[256];} SYSTEM_MODULE_INFORMATION_ENTRY, *PSYSTEM_MODULE_INFORMATION_ENTRY;typedef struct{ULONG Count;SYSTEM_MODULE_INFORMATION_ENTRY Module[1];} SYSTEM_MODULE_INFORMATION, *PSYSTEM_MODULE_INFORMATION;typedef struct{PVOID Address;ULONG64 Length;UCHAR data[256];} KF_DATA, *PKF_DATA;HANDLE hDriver = 0;HMODULEhKernel = 0;ULONG64KernelBase = 0;CHAR NtosFullName[260] = { 0 };// 生成控制信號(hào)DWORD CTL_CODE_GEN(DWORD lngFunction){return (FILE_DEVICE_UNKNOWN * 65536) | (FILE_ANY_ACCESS * 16384) | (lngFunction * 4) | METHOD_BUFFERED;}// 發(fā)送控制信號(hào)的函數(shù)BOOL IoControl(HANDLE hDrvHandle, DWORD dwIoControlCode, PVOID lpInBuffer, DWORD nInBufferSize, PVOID lpOutBuffer, DWORD nOutBufferSize){DWORD lDrvRetSize;return DeviceIoControl(hDrvHandle, dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, &lDrvRetSize, 0);}// 動(dòng)態(tài)獲取ntdll.dll模塊的基地址ULONG64 GetKernelBase64(PCHAR NtosName){ZWQUERYSYSTEMINFORMATION ZwQuerySystemInformation;PSYSTEM_MODULE_INFORMATION pSystemModuleInformation;ULONG NeedSize, BufferSize = 0x5000;PVOID pBuffer = NULL;NTSTATUS Result;// 該函數(shù)只能通過(guò)動(dòng)態(tài)方式得到地址ZwQuerySystemInformation = (ZWQUERYSYSTEMINFORMATION)GetProcAddress(GetModuleHandleA("ntdll.dll"), "ZwQuerySystemInformation");do{pBuffer = malloc(BufferSize);if (pBuffer == NULL) return 0;// 查詢(xún)系統(tǒng)中的所有模塊信息Result = ZwQuerySystemInformation(SystemModuleInformation, pBuffer, BufferSize, &NeedSize);if (Result == STATUS_INFO_LENGTH_MISMATCH){free(pBuffer);BufferSize *= 2;}else if (!NT_SUCCESS(Result)){free(pBuffer);return 0;}} while (Result == STATUS_INFO_LENGTH_MISMATCH);// 取模塊信息結(jié)構(gòu)pSystemModuleInformation = (PSYSTEM_MODULE_INFORMATION)pBuffer;// 得到模塊基地址ULONG64 ret = (ULONG64)(pSystemModuleInformation->Module[0].Base);// 拷貝模塊名if (NtosName != NULL){strcpy(NtosName, pSystemModuleInformation->Module[0].ImageName + pSystemModuleInformation->Module[0].ModuleNameOffset);}free(pBuffer);return ret;}// 判斷并修復(fù)重定位表BOOL RepairRelocationTable(ULONG64 HandleInFile, ULONG64 BaseInKernel){PIMAGE_DOS_HEADERpDosHeader;PIMAGE_NT_HEADERS64pNtHeader;PIMAGE_BASE_RELOCATIONpRelocTable;ULONG i, dwOldProtect;// 得到DOS頭并判斷是否符合DOS規(guī)范pDosHeader = (PIMAGE_DOS_HEADER)HandleInFile;if (pDosHeader->e_magic != IMAGE_DOS_SIGNATURE){return FALSE;}// 得到Nt頭pNtHeader = (PIMAGE_NT_HEADERS64)((ULONG64)HandleInFile + pDosHeader->e_lfanew);// 是否存在重定位表if (pNtHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].Size){// 獲取到重定位表基地址pRelocTable = (PIMAGE_BASE_RELOCATION)((ULONG64)HandleInFile + pNtHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC].VirtualAddress);do{// 得到重定位號(hào)ULONGnumofReloc = (pRelocTable->SizeOfBlock - sizeof(IMAGE_BASE_RELOCATION)) / 2;SHORTminioffset = 0;// 得到重定位數(shù)據(jù)PUSHORT pRelocData = (PUSHORT)((ULONG64)pRelocTable + sizeof(IMAGE_BASE_RELOCATION));// 循環(huán)或直接判斷*pRelocData是否為0也可以作為結(jié)束標(biāo)記for (i = 0; i> 12) == IMAGE_REL_BASED_DIR64){// 計(jì)算需要進(jìn)行重定位的地址// 重定位數(shù)據(jù)的低12位再加上本重定位塊頭的RVA即真正需要重定位的數(shù)據(jù)的RVAminioffset = (*pRelocData) & 0xFFF; // 小偏移// 模塊基址+重定位基址+每個(gè)數(shù)據(jù)表示的小偏移量RelocAddress = (PULONG64)(HandleInFile + pRelocTable->VirtualAddress + minioffset);// 直接在RING3修改: 原始數(shù)據(jù)+基址-IMAGE_OPTINAL_HEADER中的基址VirtualProtect((PVOID)RelocAddress, 4, PAGE_EXECUTE_READWRITE, &dwOldProtect);// 因?yàn)槭荝3直接LOAD的所以要修改一下內(nèi)存權(quán)限*RelocAddress = *RelocAddress + BaseInKernel - pNtHeader->OptionalHeader.ImageBase;VirtualProtect((PVOID)RelocAddress, 4, dwOldProtect, NULL);}// 下一個(gè)重定位數(shù)據(jù)pRelocData++;}// 下一個(gè)重定位塊pRelocTable = (PIMAGE_BASE_RELOCATION)((ULONG64)pRelocTable + pRelocTable->SizeOfBlock);} while (pRelocTable->VirtualAddress);return TRUE;}return FALSE;}// 初始化BOOL InitEngine(BOOL IsClear){if (IsClear == TRUE){// 動(dòng)態(tài)獲取ntdll.dll模塊的基地址KernelBase = GetKernelBase64(NtosFullName);printf("模塊基址: %llx | 模塊名: %s \n", KernelBase, NtosFullName);if (!KernelBase){return FALSE;}// 動(dòng)態(tài)加載模塊到內(nèi)存,并獲取到模塊句柄hKernel = LoadLibraryExA(NtosFullName, 0, DONT_RESOLVE_DLL_REFERENCES);if (!hKernel){return FALSE;}// 判斷并修復(fù)重定位表if (!RepairRelocationTable((ULONG64)hKernel, KernelBase)){return FALSE;}return TRUE;}else{FreeLibrary(hKernel);return TRUE;}}// 獲取原始函數(shù)機(jī)器碼VOID GetOriginalMachineCode(ULONG64 Address, PUCHAR ba, SIZE_T Length){ULONG64 OffsetAddress = Address - KernelBase + (ULONG64)hKernel;RtlCopyMemory(ba, (PVOID)OffsetAddress, Length);}// 獲取傳入函數(shù)的內(nèi)存地址ULONG64 GetSystemRoutineAddress(PCHAR FuncName){return KernelBase + (ULONG64)GetProcAddress(hKernel, FuncName) - (ULONG64)hKernel;}// 獲取當(dāng)前函數(shù)機(jī)器碼VOID GetCurrentMachineCode(ULONG64 Address, PUCHAR ba, SIZE_T Length){ULONG64 dat[2] = { 0 };dat[0] = Address;dat[1] = Length;IoControl(hDriver, CTL_CODE_GEN(0x800), dat, 16, ba, Length);}// 清除特定位置的機(jī)器碼VOID ClearInlineHook(ULONG64 Address, PUCHAR ba, SIZE_T Length){KF_DATA dat = { 0 };dat.Address = (PVOID)Address;dat.Length = Length;// 直接調(diào)用寫(xiě)出控制碼RtlCopyMemory(dat.data, ba, Length);IoControl(hDriver, CTL_CODE_GEN(0x801), &dat, sizeof(KF_DATA), 0, 0);}// 打印數(shù)據(jù)VOID PrintBytes(PCHAR DescriptionString, PUCHAR ba, UINT Length){printf("%s", DescriptionString);for (UINT i = 0; i
首先編譯驅(qū)動(dòng)程序WinDDK.sys
并通過(guò)KmdManager
將驅(qū)動(dòng)程序拉起來(lái),運(yùn)行客戶(hù)端lyshark.exe
程序會(huì)輸出當(dāng)前FunctionList
列表中,指定的4個(gè)函數(shù)的掛鉤情況。
WIN64內(nèi)核編程基礎(chǔ) 胡文亮
關(guān)鍵詞:
責(zé)任編輯:在筆者上一篇文章`《驅(qū)動(dòng)開(kāi)發(fā):內(nèi)核層InlineHook掛鉤函數(shù)》`中介紹了通
1、打開(kāi)微信,點(diǎn)擊“我”,點(diǎn)擊“支付”,如圖;2、點(diǎn)擊“手機(jī)充值”進(jìn)
中國(guó)哪個(gè)城市盛產(chǎn)美女,相信不少人心中都有自己的答案,重慶、成都、杭
1、魯智深人物形象分析:為民除害 愛(ài)憎分明,剛爽豪邁,見(jiàn)義勇為,
在筆者上一篇文章`《驅(qū)動(dòng)開(kāi)發(fā):內(nèi)核層InlineHook掛鉤函數(shù)》`中介紹了通
1、打開(kāi)微信,點(diǎn)擊“我”,點(diǎn)擊“支付”,如圖;2、點(diǎn)擊“手機(jī)充值”進(jìn)
端午假期,洛陽(yáng)迎來(lái)旅游小高峰。在洛邑古城景區(qū)和老城十字街,游客們身
1、這個(gè)我知道哦。2、他這個(gè)是屬于腳本一類(lèi)的。本文到此分享完畢,希望
選人用人,需要膽識(shí)和擔(dān)當(dāng),需要不拘一格。“大膽起用和廣泛接受各種人
(相關(guān)資料圖)1、“→←↓↑”是這些嗎?我不是自己打出來(lái)的,嘻嘻,我
讀創(chuàng) 深圳商報(bào)記者張妍經(jīng)過(guò)3個(gè)多月的優(yōu)中選拔、淬煉新“聲”,大鵬新區(qū)
央視網(wǎng)消息:“輕汗微微透碧紈,明朝端午浴芳蘭”?!肚G楚歲時(shí)記》有載
強(qiáng)直性脊柱炎說(shuō)通俗點(diǎn)就是僵硬的脊柱。脊柱本身具備的活動(dòng)功能包括前屈
正片還沒(méi)播出便能掀起輿論大戰(zhàn),《跑男》向來(lái)是綜藝界的話(huà)題中心。作為
Ladykin蘆薈膠祛痘印膏是一款經(jīng)濟(jì)實(shí)惠、口碑良好的護(hù)膚產(chǎn)品,深受廣大
1、國(guó)家名酒(金質(zhì)獎(jiǎng)) 飛天、貴州牌茅臺(tái)酒(大曲醬香型53°) 董牌董酒(
月八十是什么字?,月八十讀什么這個(gè)很多人還不知道,現(xiàn)在讓我們一起來(lái)看
而男生通常不見(jiàn)蹤影都是去網(wǎng)吧包宿打游戲了,雖然現(xiàn)在家家都有電腦,但
石榴云 新疆日?qǐng)?bào)記者李莉五色新絲纏角粽,碧艾香蒲處處忙。割艾草、包
蔚來(lái)-SW(09866)全新ES8將于6月28日開(kāi)啟交付,并在交付前夕公布新的配置
以“文化傳承強(qiáng)國(guó)有我”為主題的第二屆青少年書(shū)畫(huà)傳習(xí)大會(huì)系列活動(dòng)在天
在智能拼音越來(lái)越智能的時(shí)代,五筆無(wú)疑是一種互聯(lián)網(wǎng)原教旨主義的操守。
1、劍靈獨(dú)有的武器培養(yǎng)系統(tǒng)注定最大的玩家群體——劍士的相關(guān)進(jìn)階武器
俄烏沖突爆發(fā)后,俄羅斯的政治氣氛一直非常嚴(yán)肅,哪個(gè)名人、哪些組織要
【畝產(chǎn)825 99公斤!山西翼城收獲今年山西小麥最高單產(chǎn)】近日,在山西省
你需要的東西24 英寸 7 8 英寸 M 型銅管,或24 英寸浴簾鋁桿
為何皇帝都重用舅舅而不重用叔叔原因讓人感嘆!,觀(guān)古今看世界叔叔是父
近日,記者就“水稻上山”等問(wèn)題采訪(fǎng)了全國(guó)農(nóng)業(yè)技術(shù)推廣服務(wù)中心、農(nóng)業(yè)
讓我們約定“數(shù)字尼山時(shí)刻”、開(kāi)啟“數(shù)字尼山之旅”、共赴“數(shù)字文明之
央視網(wǎng)消息:“輕汗微微透碧紈,明朝端午浴芳蘭”。《荊楚歲時(shí)記》有載
1、一、共情:能感覺(jué)到您對(duì)孩子的學(xué)習(xí)非常上心,孩子最近的表現(xiàn)讓您感
日前第28屆上海電視節(jié)白玉蘭獎(jiǎng)?wù)焦?,最受關(guān)注的中國(guó)電視劇單元中,
奉化當(dāng)一回毛腳女婿本報(bào)寧波6月23日電(記者周文丹通訊員王貝貝)23日
近日,工信部發(fā)布《道路機(jī)動(dòng)車(chē)輛生產(chǎn)企業(yè)及產(chǎn)品(第371批)第四部分》
一個(gè)事業(yè)如日中天,一個(gè)是歌壇當(dāng)紅玉女,很多人都覺(jué)得他們真的太般配
近日,日本不顧國(guó)內(nèi)外強(qiáng)烈反對(duì),強(qiáng)行開(kāi)始試運(yùn)行核污染水排海設(shè)備。當(dāng)?shù)?/p>
1、360瀏覽器切換成兼容模式的步驟:1 首先打開(kāi)360瀏覽器;2 打開(kāi)瀏覽器
據(jù)澎湃新聞,6月24日,記者從蘇州軌道交通獲悉,6月24日上午11點(diǎn),蘇州
6月22日-25日,第二屆全國(guó)技能大賽(簡(jiǎn)稱(chēng)“國(guó)賽”)廣東省珠寶加工(世
搜狐娛樂(lè)訊6月22日,大S經(jīng)紀(jì)人廖瑋琪針對(duì)葛斯齊在節(jié)目上爆料藥頭認(rèn)識(shí)大
來(lái)源:網(wǎng)絡(luò) 2023-06-23 10:13華中農(nóng)大動(dòng)物科學(xué)技術(shù)學(xué)院、動(dòng)物醫(yī)學(xué)
就業(yè)要穩(wěn)存量,還要擴(kuò)增量。當(dāng)前很多新業(yè)態(tài)新職業(yè)的出現(xiàn),為大學(xué)生就業(yè)
央視網(wǎng)消息:“粽子香,香廚房。艾葉香,香滿(mǎn)堂。桃枝插在大門(mén)上,出門(mén)
IT之家6月23日消息,中型純電SUV創(chuàng)維EV6II上市,指導(dǎo)價(jià)為15 68萬(wàn)-28 98
圖片來(lái)源:視覺(jué)中國(guó)對(duì)于身處互聯(lián)網(wǎng)時(shí)代的當(dāng)代消費(fèi)者而言,“購(gòu)物節(jié)
新華社北京6月22日電題:探索面向未來(lái)的理論和制度創(chuàng)新——深刻理解“
端午假期,龍?zhí)堕L(zhǎng)江大橋上部結(jié)構(gòu)工程中跨門(mén)架結(jié)構(gòu)的安裝投入會(huì)戰(zhàn),遠(yuǎn)眺
1985年,張學(xué)友在企業(yè)的幫助下發(fā)行了自己的第一張專(zhuān)輯,銷(xiāo)量超過(guò)20萬(wàn)張
市醫(yī)保局用新思想指引南京醫(yī)保新實(shí)踐聚焦“四個(gè)破除”解決民生痼疾□南
因?yàn)楝F(xiàn)在社保是有繳費(fèi)年限的法規(guī),醫(yī)療保險(xiǎn)如何累積繳費(fèi)年限足夠,那么
央視網(wǎng)消息:今年以來(lái),我國(guó)經(jīng)濟(jì)發(fā)展呈現(xiàn)回升向好態(tài)勢(shì),中國(guó)市場(chǎng)的超強(qiáng)
女子手指被鉚釘刺穿120求助1195分鐘左右鉚釘被拔出
隨著端午假期到來(lái),旅游市場(chǎng)也被點(diǎn)燃,各地推出了豐富的文旅活動(dòng),在吸
大家好,今日關(guān)于【寧夏爆炸事故:一畢業(yè)大學(xué)生遇難】的話(huà)題登上了各大
“打草驚蛇”是一種比喻性的說(shuō)法,意思是驚動(dòng)蛇從而揭開(kāi)隱藏的事實(shí)或敵
來(lái)源|江西教育考試院2023年江西省普通高考一分一段表本科文史分段表
近期,中小銀行因高層任期屆滿(mǎn)、工作調(diào)動(dòng)等原因而變動(dòng)的情況較多。短短
雞蛋的6大好處:1有助大腦智力雞蛋含有一種名叫膽堿的物質(zhì),是保持腦細(xì)
隨著端午假期到來(lái),旅游市場(chǎng)也被點(diǎn)燃,各地推出了豐富的文旅活動(dòng),在吸
在2023粵港澳車(chē)展上,保時(shí)捷911GT3RS實(shí)車(chē)首次公眾亮相,新車(chē)此前已公布
大漲股簡(jiǎn)報(bào)
教育評(píng)價(jià)改革之路上,九龍坡區(qū)闊步前行,未曾停歇,豐碩成果的背后隱藏
可能許多霍格沃茨用戶(hù)想知道霍格沃茨之遺神奇動(dòng)物紫色巨蟾巢穴位置介紹
梔子花的養(yǎng)護(hù)概述梔子花在眾多觀(guān)賞花卉中算是比較常見(jiàn)的品種,其美麗的
【普里戈任:瓦格納已控制羅斯托夫地區(qū)包括機(jī)場(chǎng)在內(nèi)的軍用設(shè)施】當(dāng)?shù)貢r(shí)
6月10日,美國(guó)《華爾街日?qǐng)?bào)》報(bào)道聲稱(chēng),一個(gè)破壞小組曾利用波蘭作為去
中國(guó)哪個(gè)城市盛產(chǎn)美女,相信不少人心中都有自己的答案,重慶、成都、杭
2023年入夏以來(lái),全國(guó)許多地方氣溫頻繁突破40℃,出門(mén)“熱化了”,很多
界面新聞從蘇州軌道交通集團(tuán)有限公司(以下簡(jiǎn)稱(chēng)“蘇州軌道”)獲悉,6
還記得吳京的“干兒子”嗎?走紅后高調(diào)炫豪車(chē),現(xiàn)在成這樣!吳京近幾年
網(wǎng)絡(luò)聊天時(shí)使用表情符號(hào),逐漸成為大家網(wǎng)絡(luò)社交聊天習(xí)慣。但表情使用不
直播吧6月24日訊據(jù)西班牙《馬卡報(bào)》報(bào)道,沙特球隊(duì)向老將佩德羅發(fā)出了
歷史上入侵我國(guó)的匈奴,如今是哪個(gè)民族你知道嗎,歷史上,匈奴人非常兇
“壓不垮的裝臺(tái)人,苦不死的刁順子”,簡(jiǎn)單的話(huà)語(yǔ),映照著普通勞動(dòng)者的
第2步:將切好的蘿卜絲放進(jìn)涼白開(kāi)或者礦泉水清洗一遍,將洗好的蘿卜絲
第一代蔚來(lái)ES8是在2017年發(fā)布的,它是蔚來(lái)的首款量產(chǎn)車(chē),這臺(tái)車(chē)的出現(xiàn)
6月23日,旭輝控股(集團(tuán))有限公司(00884 HK)和旭輝永升服務(wù)集團(tuán)有限
Android和iOS哪個(gè)更好用呢?這一直是不少用戶(hù)爭(zhēng)論的問(wèn)題。而近日Greens
1、魯智深人物形象分析:為民除害 愛(ài)憎分明,剛爽豪邁,見(jiàn)義勇為,
中國(guó)山東網(wǎng)-感知山東6月22日訊6月21日,2023年山東省中小學(xué)教師合唱展
1、志愿優(yōu)先原則是這個(gè)意思:對(duì)于個(gè)人來(lái)說(shuō),如果已達(dá)到錄取條件,而能夠
生活中防火防盜防詐騙,雖然每個(gè)人都了解一點(diǎn)詐騙,但是隨著社會(huì)的進(jìn)步
可能許多狂野之心同學(xué)還不清楚狂野之心跨平臺(tái)聯(lián)機(jī)教程詳情,現(xiàn)在是第一
另?yè)?jù)今日俄羅斯電視臺(tái)網(wǎng)站報(bào)道,俄羅斯特別軍事行動(dòng)副總指揮謝爾蓋·蘇
文、圖 羊城晚報(bào)全媒體記者王俊偉通訊員企石宣為深刻吸取“6·21”寧夏
服務(wù)業(yè)是國(guó)民經(jīng)濟(jì)發(fā)展的“穩(wěn)定器”和“助推器”,對(duì)經(jīng)濟(jì)增長(zhǎng)的貢獻(xiàn)率于
杭州師范大學(xué)錢(qián)江學(xué)院具體地址在哪里浙江省杭州市江干區(qū)下沙高教園區(qū)學(xué)
1、出自莊子《莊子 秋水》原文莊子與惠子游于濠梁之上(1)。2、莊子曰:
將于6月24日正式開(kāi)通的蘇州軌道交通11號(hào)線(xiàn),可以實(shí)現(xiàn)與上海軌道交通11
草業(yè)技術(shù)學(xué)什么課程及畢業(yè)薪酬崗位去向就業(yè)前景怎么樣?下面小編就具體
1 主料:豆角1斤;配料:小蘇打十分之一勺、蒜末若干、鹽、油。2 豆角摘好
一、本次考試的評(píng)卷教師從市區(qū)各初、高中抽調(diào),具體數(shù)量見(jiàn)附件,各單位
2023年江西省普通高考一分一段表
一代神王重生在這對(duì)人類(lèi)并不友好的世界中,能否重新追回妻子,千奇百怪
1、清除一下瀏覽器的緩存(工具->Internet選項(xiàng)->刪除Cookies),點(diǎn)瀏覽
無(wú)畏契約東京大師賽正在進(jìn)行,中國(guó)賽區(qū)隊(duì)伍EDG無(wú)畏契約分部遺憾止步六
突尼斯賽1 4決賽,日乒成為最大贏家!國(guó)乒獨(dú)苗戰(zhàn)苦主,希望渺茫,國(guó)乒,
金羊網(wǎng)
6月20日,記者從第一屆中國(guó)尼龍產(chǎn)業(yè)發(fā)展大會(huì)成果發(fā)布會(huì)上獲悉,本次大
中國(guó)天氣網(wǎng)訊 今天(6月24日)是端午假期最后一天,南方仍處于本輪
6月21日,國(guó)際權(quán)威金融雜志《機(jī)構(gòu)投資者》(InstitutionalInvestor)發(fā)
2023年5月內(nèi)燃機(jī)行業(yè)銷(xiāo)量環(huán)比、同比增長(zhǎng),1-5月累計(jì)銷(xiāo)量同比已由負(fù)轉(zhuǎn)正
制圖 萬(wàn)能人民網(wǎng)北京6月24日電據(jù)貴州省教育廳消息,貴州2023年普通高校
謝賢前妻有多漂亮?當(dāng)看到年輕時(shí)的照片,難怪謝霆鋒這么帥!說(shuō)起謝霆鋒