




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第C語言驅(qū)動(dòng)開發(fā)內(nèi)核特征碼掃描PE代碼段目錄正文特征碼字符串解析與掃描實(shí)現(xiàn)UtilLySharkSearchPattern如何定位特征RtlImageNtHeader對(duì)其PE頭部解析
正文
在筆者上一篇文章《驅(qū)動(dòng)開發(fā):內(nèi)核特征碼搜索函數(shù)封裝》中為了定位特征的方便我們封裝實(shí)現(xiàn)了一個(gè)可以傳入數(shù)組實(shí)現(xiàn)的SearchSpecialCode定位函數(shù),該定位函數(shù)其實(shí)還不能算的上簡(jiǎn)單,本章LyShark將對(duì)特征碼定位進(jìn)行簡(jiǎn)化,讓定位變得更簡(jiǎn)單,并運(yùn)用定位代碼實(shí)現(xiàn)掃描內(nèi)核PE的.text代碼段,并從代碼段中得到某個(gè)特征所在內(nèi)存位置。
老樣子為了后續(xù)教程能夠繼續(xù),先來定義一個(gè)lyshark.h頭文件,該頭文件中包含了我們本篇文章所必須要使用到的結(jié)構(gòu)體定義,這些定義的函數(shù)如果不懂請(qǐng)去看LyShark以前的文章,這里就不羅嗦了。
#includentifs.h
#includentimage.h
typedefstruct_KLDR_DATA_TABLE_ENTRY
LIST_ENTRY64InLoadOrderLinks;
ULONG64__Undefined1;
ULONG64__Undefined2;
ULONG64__Undefined3;
ULONG64NonPagedDebugInfo;
ULONG64DllBase;
ULONG64EntryPoint;
ULONGSizeOfImage;
UNICODE_STRINGFullDllName;
UNICODE_STRINGBaseDllName;
ULONGFlags;
USHORTLoadCount;
USHORT__Undefined5;
ULONG64__Undefined6;
ULONGCheckSum;
ULONG__padding1;
ULONGTimeDateStamp;
ULONG__padding2;
}KLDR_DATA_TABLE_ENTRY,*PKLDR_DATA_TABLE_ENTRY;
typedefstruct_RTL_PROCESS_MODULE_INFORMATION
HANDLESection;
PVOIDMappedBase;
PVOIDImageBase;
ULONGImageSize;
ULONGFlags;
USHORTLoadOrderIndex;
USHORTInitOrderIndex;
USHORTLoadCount;
USHORTOffsetToFileName;
UCHARFullPathName[256];
}RTL_PROCESS_MODULE_INFORMATION,*PRTL_PROCESS_MODULE_INFORMATION;
typedefstruct_RTL_PROCESS_MODULES
ULONGNumberOfModules;
RTL_PROCESS_MODULE_INFORMATIONModules[1];
}RTL_PROCESS_MODULES,*PRTL_PROCESS_MODULES;
typedefenum_SYSTEM_INFORMATION_CLASS
SystemBasicInformation=0x0,
SystemProcessorInformation=0x1,
SystemPerformanceInformation=0x2,
SystemTimeOfDayInformation=0x3,
SystemPathInformation=0x4,
SystemProcessInformation=0x5,
SystemCallCountInformation=0x6,
SystemDeviceInformation=0x7,
SystemProcessorPerformanceInformation=0x8,
SystemFlagsInformation=0x9,
SystemCallTimeInformation=0xa,
SystemModuleInformation=0xb,
SystemLocksInformation=0xc,
SystemStackTraceInformation=0xd,
SystemPagedPoolInformation=0xe,
SystemNonPagedPoolInformation=0xf,
SystemHandleInformation=0x10,
SystemObjectInformation=0x11,
SystemPageFileInformation=0x12,
SystemVdmInstemulInformation=0x13,
SystemVdmBopInformation=0x14,
SystemFileCacheInformation=0x15,
SystemPoolTagInformation=0x16,
SystemInterruptInformation=0x17,
SystemDpcBehaviorInformation=0x18,
SystemFullMemoryInformation=0x19,
SystemLoadGdiDriverInformation=0x1a,
SystemUnloadGdiDriverInformation=0x1b,
SystemTimeAdjustmentInformation=0x1c,
SystemSummaryMemoryInformation=0x1d,
SystemMirrorMemoryInformation=0x1e,
SystemPerformanceTraceInformation=0x1f,
SystemObsolete0=0x20,
SystemExceptionInformation=0x21,
SystemCrashDumpStateInformation=0x22,
SystemKernelDebuggerInformation=0x23,
SystemContextSwitchInformation=0x24,
SystemRegistryQuotaInformation=0x25,
SystemExtendServiceTableInformation=0x26,
SystemPrioritySeperation=0x27,
SystemVerifierAddDriverInformation=0x28,
SystemVerifierRemoveDriverInformation=0x29,
SystemProcessorIdleInformation=0x2a,
SystemLegacyDriverInformation=0x2b,
SystemCurrentTimeZoneInformation=0x2c,
SystemLookasideInformation=0x2d,
SystemTimeSlipNotification=0x2e,
SystemSessionCreate=0x2f,
SystemSessionDetach=0x30,
SystemSessionInformation=0x31,
SystemRangeStartInformation=0x32,
SystemVerifierInformation=0x33,
SystemVerifierThunkExtend=0x34,
SystemSessionProcessInformation=0x35,
SystemLoadGdiDriverInSystemSpace=0x36,
SystemNumaProcessorMap=0x37,
SystemPrefetcherInformation=0x38,
SystemExtendedProcessInformation=0x39,
SystemRecommendedSharedDataAlignment=0x3a,
SystemComPlusPackage=0x3b,
SystemNumaAvailableMemory=0x3c,
SystemProcessorPowerInformation=0x3d,
SystemEmulationBasicInformation=0x3e,
SystemEmulationProcessorInformation=0x3f,
SystemExtendedHandleInformation=0x40,
SystemLostDelayedWriteInformation=0x41,
SystemBigPoolInformation=0x42,
SystemSessionPoolTagInformation=0x43,
SystemSessionMappedViewInformation=0x44,
SystemHotpatchInformation=0x45,
SystemObjectSecurityMode=0x46,
SystemWatchdogTimerHandler=0x47,
SystemWatchdogTimerInformation=0x48,
SystemLogicalProcessorInformation=0x49,
SystemWow64SharedInformationObsolete=0x4a,
SystemRegisterFirmwareTableInformationHandler=0x4b,
SystemFirmwareTableInformation=0x4c,
SystemModuleInformationEx=0x4d,
SystemVerifierTriageInformation=0x4e,
SystemSuperfetchInformation=0x4f,
SystemMemoryListInformation=0x50,
SystemFileCacheInformationEx=0x51,
SystemThreadPriorityClientIdInformation=0x52,
SystemProcessorIdleCycleTimeInformation=0x53,
SystemVerifierCancellationInformation=0x54,
SystemProcessorPowerInformationEx=0x55,
SystemRefTraceInformation=0x56,
SystemSpecialPoolInformation=0x57,
SystemProcessIdInformation=0x58,
SystemErrorPortInformation=0x59,
SystemBootEnvironmentInformation=0x5a,
SystemHypervisorInformation=0x5b,
SystemVerifierInformationEx=0x5c,
SystemTimeZoneInformation=0x5d,
SystemImageFileExecutionOptionsInformation=0x5e,
SystemCoverageInformation=0x5f,
SystemPrefetchPatchInformation=0x60,
SystemVerifierFaultsInformation=0x61,
SystemSystemPartitionInformation=0x62,
SystemSystemDiskInformation=0x63,
SystemProcessorPerformanceDistribution=0x64,
SystemNumaProximityNodeInformation=0x65,
SystemDynamicTimeZoneInformation=0x66,
SystemCodeIntegrityInformation=0x67,
SystemProcessorMicrocodeUpdateInformation=0x68,
SystemProcessorBrandString=0x69,
SystemVirtualAddressInformation=0x6a,
SystemLogicalProcessorAndGroupInformation=0x6b,
SystemProcessorCycleTimeInformation=0x6c,
SystemStoreInformation=0x6d,
SystemRegistryAppendString=0x6e,
SystemAitSamplingValue=0x6f,
SystemVhdBootInformation=0x70,
SystemCpuQuotaInformation=0x71,
SystemNativeBasicInformation=0x72,
SystemErrorPortTimeouts=0x73,
SystemLowPriorityIoInformation=0x74,
SystemBootEntropyInformation=0x75,
SystemVerifierCountersInformation=0x76,
SystemPagedPoolInformationEx=0x77,
SystemSystemPtesInformationEx=0x78,
SystemNodeDistanceInformation=0x79,
SystemAcpiAuditInformation=0x7a,
SystemBasicPerformanceInformation=0x7b,
SystemQueryPerformanceCounterInformation=0x7c,
SystemSessionBigPoolInformation=0x7d,
SystemBootGraphicsInformation=0x7e,
SystemScrubPhysicalMemoryInformation=0x7f,
SystemBadPageInformation=0x80,
SystemProcessorProfileControlArea=0x81,
SystemCombinePhysicalMemoryInformation=0x82,
SystemEntropyInterruptTimingInformation=0x83,
SystemConsoleInformation=0x84,
SystemPlatformBinaryInformation=0x85,
SystemThrottleNotificationInformation=0x86,
SystemHypervisorProcessorCountInformation=0x87,
SystemDeviceDataInformation=0x88,
SystemDeviceDataEnumerationInformation=0x89,
SystemMemoryTopologyInformation=0x8a,
SystemMemoryChannelInformation=0x8b,
SystemBootLogoInformation=0x8c,
SystemProcessorPerformanceInformationEx=0x8d,
SystemSpare0=0x8e,
SystemSecureBootPolicyInformation=0x8f,
SystemPageFileInformationEx=0x90,
SystemSecureBootInformation=0x91,
SystemEntropyInterruptTimingRawInformation=0x92,
SystemPortableWorkspaceEfiLauncherInformation=0x93,
SystemFullProcessInformation=0x94,
SystemKernelDebuggerInformationEx=0x95,
SystemBootMetadataInformation=0x96,
SystemSoftRebootInformation=0x97,
SystemElamCertificateInformation=0x98,
SystemOfflineDumpConfigInformation=0x99,
SystemProcessorFeaturesInformation=0x9a,
SystemRegistryReconciliationInformation=0x9b,
MaxSystemInfoClass=0x9c,
}SYSTEM_INFORMATION_CLASS;
//聲明函數(shù)
//By:L
NTSYSAPIPIMAGE_NT_HEADERSNTAPIRtlImageNtHeader(_In_PVOIDBase);
NTSTATUSNTAPIZwQuerySystemInformation(SYSTEM_INFORMATION_CLASSSystemInformationClass,PVOIDSystemInformation,ULONGSystemInformationLength,PULONGReturnLength);
typedefVOID(__cdecl*PMiProcessLoaderEntry)(PKLDR_DATA_TABLE_ENTRYsection,INLOGICALInsert);
typedefNTSTATUS(*NTQUERYSYSTEMINFORMATION)(INULONGSystemInformationClass,OUTPVOIDSystemInformation,INULONG_PTRSystemInformationLength,OUTPULONG_PTRReturnLengthOPTIONAL);
特征碼字符串解析與掃描實(shí)現(xiàn)
我們繼續(xù),首先實(shí)現(xiàn)特征碼字符串的解析與掃描實(shí)現(xiàn)此處UtilLySharkSearchPattern函數(shù)就是LyShark封裝過的,這里依次介紹一下參數(shù)傳遞的含義。
pattern用于傳入一段字符串特征值(以\x開頭)len代表輸入特征碼長(zhǎng)度(除去\x后的長(zhǎng)度)base代表掃描內(nèi)存的基地址size代表需要向下掃描的長(zhǎng)度ppFound代表掃描到首地址以后返回的內(nèi)存地址
UtilLySharkSearchPattern如何定位特征
這段代碼該如何使用,如下我們以定位IoInitializeTimer為例,演示UtilLySharkSearchPattern如何定位特征的,如下代碼pattern變量中就是我們需要定位的特征值,pattern_size則是需要定位的特征碼長(zhǎng)度,在address地址位置向下掃描128字節(jié),找到則返回到find_address變量?jī)?nèi)。
//署名權(quán)
//righttosignone'snameonapieceofwork
//PowerBy:LyShark
//Email:me@
#include"lyshark.h"
PVOIDGetIoInitializeTimerAddress()
PVOIDVariableAddress=0;
UNICODE_STRINGuioiTime={0};
RtlInitUnicodeString(uioiTime,L"IoInitializeTimer");
VariableAddress=(PVOID)MmGetSystemRoutineAddress(uioiTime);
if(VariableAddress!=0)
returnVariableAddress;
return0;
//對(duì)指定內(nèi)存執(zhí)行特征碼掃描
NTSTATUSUtilLySharkSearchPattern(INPUCHARpattern,INULONG_PTRlen,INconstVOID*base,INULONG_PTRsize,OUTPVOID*ppFound)
//計(jì)算匹配長(zhǎng)度
//LyS特征碼掃描
NT_ASSERT(ppFound!=0pattern!=0base!=0);
if(ppFound==0||pattern==0||base==0)
returnSTATUS_INVALID_PARAMETER;
__try
for(ULONG_PTRi=0;isize-len;i++)
BOOLEANfound=TRUE;
for(ULONG_PTRj=0;jlen;j++)
if(pattern[j]!=((PUCHAR)base)[i+j])
found=FALSE;
break;
if(found!=FALSE)
*ppFound=(PUCHAR)base+i;
DbgPrint("[LyS]特征碼匹配地址:%p\n",(PUCHAR)base+i);
returnSTATUS_SUCCESS;
__except(EXCEPTION_EXECUTE_HANDLER)
returnSTATUS_UNHANDLED_EXCEPTION;
returnSTATUS_NOT_FOUND;
VOIDUnDriver(PDRIVER_OBJECTdriver)
DbgPrint(("UninstallDriverIsOK\n"));
NTSTATUSDriverEntry(INPDRIVER_OBJECTDriver,PUNICODE_STRINGRegistryPath)
DbgPrint(("hello\n"));
//返回匹配長(zhǎng)度5
CHARpattern[]="\x48\x89\x6c\x24\x10";
PVOID*find_address=NULL;
intpattern_size=sizeof(pattern)-1;
DbgPrint("匹配長(zhǎng)度:%d\n",pattern_size);
//得到基地址
PVOIDaddress=GetIoInitializeTimerAddress();
//掃描特征
NTSTATUSnt=UtilLySharkSearchPattern((PUCHAR)pattern,pattern_size,address,128,find_address);
DbgPrint("[LyShark返回地址=]0x%p\n",(ULONG64)find_address);
Driver-DriverUnload=UnDriver;
returnSTATUS_SUCCESS;
運(yùn)行驅(qū)動(dòng)程序完成特征定位,并對(duì)比定位效果。
RtlImageNtHeader對(duì)其PE頭部解析
如上述所示定位函數(shù)我們已經(jīng)封裝好了,相信你也能感受到這種方式要比使用數(shù)組更方便,為了能定位到內(nèi)核PE結(jié)構(gòu)我們需要使用RtlImageNtHeader來解析,這個(gè)內(nèi)核函數(shù)專門用來得到內(nèi)核程序的PE頭部結(jié)構(gòu)的,在下方案例中首先我們使用封裝過的LySharkToolsUtilKernelBase函數(shù)拿到內(nèi)核基址,如果你不懂函數(shù)實(shí)現(xiàn)細(xì)節(jié)請(qǐng)閱讀《驅(qū)動(dòng)開發(fā):內(nèi)核取ntoskrnl模塊基地址》這篇文章,拿到基址以后可以直接使用RtlImageNtHeader對(duì)其PE頭部進(jìn)行解析,如下所示。
//署名權(quán)
//righttosignone'snameonapieceofwork
//PowerBy:LyShark
//Email:me@
#include"lyshark.h"
//定義全局變量
staticPVOIDg_KernelBase=0;
staticULONGg_KernelSize=0;
//得到KernelBase基地址
//
PVOIDLySharkToolsUtilKernelBase(OUTPULONGpSize)
NTSTATUSstatus=STATUS_SUCCESS;
ULONGbytes=0;
PRTL_PROCESS_MODULESpMods=0;
PVOIDcheckPtr=0;
UNICODE_STRINGroutineName;
if(g_KernelBase!=0)
if(pSize)
*pSize=g_KernelSize;
returng_KernelBase;
RtlInitUnicodeString(routineName,L"NtOpenFile");
checkPtr=MmGetSystemRoutineAddress(routineName);
if(checkPtr==0)
return0;
__try
status=ZwQuerySystemInformation(SystemModuleInformation,0,bytes,bytes);
if(bytes==0)
return0;
pMods=(PRTL_PROCESS_MODULES)ExAllocatePoolWithTag(NonPagedPoolNx,bytes,L"LyShark");
RtlZeroMemory(pMods,bytes);
status=ZwQuerySystemInformation(SystemModuleInformation,pMods,bytes,bytes);
if(NT_SUCCESS(status))
PRTL_PROCESS_MODULE_INFORMATIONpMod=pMods-Modules;
for(ULONGi=0;ipMods-NumberOfModules;i++)
if(checkPtr=pMod[i].ImageBasecheckPtr(PVOID)((PUCHAR)pMod[i].ImageBase+pMod[i].ImageSize))
g_KernelBase=pMod[i].ImageBase;
g_KernelSize=pMod[i].ImageSize;
if(pSize)
*pSize=g_KernelSize;
break;
__except(EXCEPTION_EXECUTE_HANDLER)
return0;
if(pMods)
ExFreePoolWithTag(pMods,L"LyShark");
DbgPrint("KernelBase=%p\n",g_KernelBase);
returng_KernelBase;
VOIDUnDriver(PDRIVER_OBJECTdriver)
DbgPrint(("UninstallDriverIsOK\n"));
NTSTATUSDriverEntry(INPDRIVER_OBJECTDriver,PUNICODE_STRINGRegistryPath)
DbgPrint(("hello\n"));
//獲取內(nèi)核第一個(gè)模塊的基地址
PVOIDbase=LySharkToolsUtilKernelBase(0);
if(!base)
returnSTATUS_NOT_FOUND;
//得到NT頭部PE32+結(jié)構(gòu)
//
PIMAGE_NT_HEADERS64pHdr=RtlImageNtHeader(base);
if(!pHdr)
returnSTATUS_INVALID_IMAGE_FORMAT;
//首先尋找代碼段
PIMAGE_SECTION_HEADERpFirstSection=(PIMAGE_SECTION_HEADER)(pHdr+1);
for(PIMAGE_SECTION_HEADERpSection=pFirstSection;pSectionpFirstSection+pHdr-FileHeader.NumberOfSections;pSection++)
ANSI_STRINGLySharkSection,LySharkName;
RtlInitAnsiString(LySharkSection,".text");
RtlInitAnsiString(LySharkName,(PCCHAR)pSection-Name);
DbgPrint("[LyShark.PE]名字:%Z|地址:%p|長(zhǎng)度:%d\n",LySharkName,(PUCHAR)base+pSection-VirtualAddress,pSection-Misc.VirtualSize);
Driver-DriverUnload=UnDriver;
returnSTATUS_SUCCESS;
運(yùn)行這段驅(qū)動(dòng)程序,你會(huì)得到當(dāng)前內(nèi)核的所有PE節(jié)信息,枚舉效果如下所示。
既然能夠得到PE頭部數(shù)據(jù)了,那么我們只需要掃描這段空間并得到匹配到的數(shù)據(jù)即可,其實(shí)很容易實(shí)現(xiàn),如下代碼所示。
//署名權(quán)
//righttosignone'snameonapieceofwork
//PowerBy:LyShark
//Email:me@
#include"lyshark.h"
//定義全局變量
staticPVOIDg_KernelBase=0;
staticULONGg_KernelSize=0;
//得到KernelBase基地址
//
PVOIDLySharkToolsUtilKernelBase(OUTPULONGpSize)
NTSTATUSstatus=STATUS_SUCCESS;
ULONGbytes=0;
PRTL_PROCESS_MODULESpMods=0;
PVOIDcheckPtr=0;
UNICODE_STRINGroutineName;
if(g_KernelBase!=0)
if(pSize)
*pSize=g_KernelSize;
returng_KernelBase;
RtlInitUnicodeString(routineName,L"NtOpenFile");
checkPtr=MmGetSystemRoutineAddress(routineName);
if(checkPtr==0)
return0;
__try
status=ZwQuerySystemInformation(SystemModuleInformation,0,bytes,bytes);
if(bytes==0)
return0;
pMods=(PRTL_PROCESS_MODULES)ExAllocatePoolWithTag(NonPagedPoolNx,bytes,L"LyShark");
RtlZeroMemory(pMods,bytes);
status=ZwQuerySystemInformation(SystemModuleInformation,pMods,bytes,bytes);
if(NT_SUCCESS(status))
PRTL_PROCESS_MODULE_INFORMATIONpMod=pMods-Modules;
for(ULONGi=0;ipMods-NumberOfModules;i++)
if(checkPtr=pMod[i].ImageBasecheckPtr(PVOID)((PUCHAR)pMod[i].ImageBase+pMod[i].ImageSize))
g_KernelBase=pMod[i].ImageBase;
g_KernelSize=pMod[i].ImageSize;
if(pSize)
*pSize=g_KernelSize;
break;
__except(EXCEPTION_EXECUTE_HANDLER)
return0;
if(pMods)
ExFreePoolWithTag(pMods,L"LyShark");
DbgPrint("KernelBase=%p\n",g_KernelBase);
returng_KernelBase;
//對(duì)指定內(nèi)存執(zhí)行特征碼掃描
NTSTATUSUtilLySharkSearchPattern(INPUCHARpattern,INUCHARwildcard,INULONG_PTRlen,INconstVOID*base,INULONG_PTRsize,OUTPVOID*ppFound)
NT_ASSERT(ppFound!=0pattern!=0base!=0);
if(ppFound==0||pattern==0||base==0)
returnSTATUS_INVALID_PARAMETER;
__try
for(ULONG_PTRi=0;isize-len;i++)
BOOLEANfound=TRUE;
for(ULONG_PTRj=0;jlen;j++)
if(pattern[j]!=wildcardpattern[j]!=((PUCHAR)base)[i+j])
found=FALSE;
break;
if(found!=FALSE)
*ppFound=(PUCHAR)base+i;
DbgPrint("[LyShark]特征碼匹配地址:%p\n",(PUCHAR)base+i);
returnSTATUS_SUCCESS;
__except(EXCEPTION_EXECUTE_HANDLER)
returnSTATUS_UNHANDLED_EXCEPTION;
returnSTATUS_NOT_FOUND;
//掃描代碼段中的指令片段
NTSTATUSByLySharkComUtilScanSection(INPCCHARsection,INPUCHARpattern,INUCHARwildcard,INULONG_PTRlen,OUTPVOID*ppFound)
NT_ASSERT(ppFound!=0);
if(ppFound==0)
returnSTATUS_INVALID_PARAMETER;
//獲取內(nèi)核第一個(gè)模塊的基地址
PVOIDbase=LySharkToolsUtilKernelBase(0);
if(!base)
returnSTATUS_NOT_FOUND;
//得到NT頭部PE32+結(jié)構(gòu)
PIMAGE_NT_HEADERS64pHdr=RtlImageNtHeader(base);
if(!pHdr)
returnSTA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)離子活水機(jī)市場(chǎng)現(xiàn)狀分析及前景預(yù)測(cè)報(bào)告
- 2025年中國(guó)砂型鑄鋼汽車鑄件市場(chǎng)現(xiàn)狀分析及前景預(yù)測(cè)報(bào)告
- 2025年中國(guó)直式模具項(xiàng)目投資可行性研究報(bào)告
- 2025年中國(guó)電解還原鎳粉市場(chǎng)現(xiàn)狀分析及前景預(yù)測(cè)報(bào)告
- 2025年中國(guó)甲氧芐嘧啶項(xiàng)目投資可行性研究報(bào)告
- 2025年中國(guó)泡沫塑料板材對(duì)接機(jī)組項(xiàng)目投資可行性研究報(bào)告
- 考公公務(wù)員試題及答案
- 題型突破02 地理運(yùn)動(dòng)分析和變式類- (原卷版)
- 淮安數(shù)學(xué)初二下學(xué)期試卷及答案
- 財(cái)務(wù)報(bào)表品牌價(jià)值分析重點(diǎn)基礎(chǔ)知識(shí)點(diǎn)
- 焊接工藝評(píng)定報(bào)告模板
- 初中完形填空專項(xiàng)訓(xùn)練40篇(含答案)
- 二類費(fèi)用-工程建設(shè)其他費(fèi)用取費(fèi)標(biāo)準(zhǔn)集合(上海市-2023年版)
- 耳與臟腑經(jīng)絡(luò)的關(guān)系演示文稿
- 非金屬鏈板式刮泥機(jī)操作規(guī)程
- 關(guān)于學(xué)為中心的浙江教學(xué)改革的思考
- 安全儀表系統(tǒng)(SIS)培訓(xùn)
- 工務(wù)系統(tǒng)安全風(fēng)險(xiǎn)控制手冊(cè)
- 文獻(xiàn)名稱(中文)-化工工業(yè)離心泵
- 貨物驗(yàn)收單表格模板
- 初中生金融與理財(cái)知識(shí)小課堂-認(rèn)識(shí)和使用金錢
評(píng)論
0/150
提交評(píng)論