C語言驅(qū)動(dòng)開發(fā)內(nèi)核特征碼掃描PE代碼段_第1頁
C語言驅(qū)動(dòng)開發(fā)內(nèi)核特征碼掃描PE代碼段_第2頁
C語言驅(qū)動(dòng)開發(fā)內(nèi)核特征碼掃描PE代碼段_第3頁
C語言驅(qū)動(dòng)開發(fā)內(nèi)核特征碼掃描PE代碼段_第4頁
C語言驅(qū)動(dòng)開發(fā)內(nèi)核特征碼掃描PE代碼段_第5頁
已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論