上圖是Golang官網(wǎng)FAQ的部分截圖,看來關(guān)于Go不支持重載的這個(gè)問題困擾了很多從面向?qū)ο笳Z(yǔ)言轉(zhuǎn)到Go的開發(fā)者。官方在這里做出了解答。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比南開網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式南開網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋南開地區(qū)。費(fèi)用合理售后完善,10多年實(shí)體公司更值得信賴。
在上面的回答中有這樣一句話:
其意思是: 使用其他語(yǔ)言的經(jīng)驗(yàn)告訴我們,使用具有相同名稱但簽名不同的多種方法有時(shí)會(huì)很有用,但在實(shí)踐中也可能會(huì)造成混淆和脆弱。
接下來又說: 在Go的類型系統(tǒng)中,僅按名稱進(jìn)行匹配并要求類型一致是一個(gè)簡(jiǎn)化的主要決定。
最后一句話: 關(guān)于操作員重載,似乎比絕對(duì)要求更方便。 同樣,沒有它,事情會(huì)變得更簡(jiǎn)單。
整個(gè)的解答非常漂亮、簡(jiǎn)潔。我們看完之后就會(huì)理解,Go語(yǔ)言的設(shè)計(jì)者之所以沒有在Go中實(shí)現(xiàn)方法的重載,并沒有復(fù)雜的理由,核心原則就是: 讓Go保持足夠的簡(jiǎn)單。 這也能看出來Go語(yǔ)言的設(shè)計(jì)者有著極大的選擇和克制。
其實(shí),筆者認(rèn)為重載在本質(zhì)上并沒有很大的實(shí)際意義。只是表現(xiàn)力和表現(xiàn)形式上有一定的差別。明確某個(gè)上下文中的函數(shù)調(diào)用的關(guān)鍵就是函數(shù)簽名,支持重載的語(yǔ)言中一般是函數(shù)名加函數(shù)參數(shù)構(gòu)成函數(shù)簽名。而Go中可以認(rèn)為函數(shù)名就是簽名。邏輯上沒有太大的區(qū)別,就是把工作做在了臺(tái)前 還是幕后的區(qū)別。
當(dāng)然如果非要較真的話,我們或許可以在Go中聲明方法的時(shí)候?qū)?shù)寫成 interface{} 或者 ... 切片的方式。在傳進(jìn)來參數(shù)的時(shí)候做一步校驗(yàn),判斷參數(shù)的類型和個(gè)數(shù),然后分別處理之。
仁者見仁智者見智,大家有什么不同的理解歡迎一起溝通。
Go語(yǔ)言是谷歌2009發(fā)布的編程語(yǔ)言,這個(gè)語(yǔ)言發(fā)明的目的,就是為了在運(yùn)行速度接近C/C++語(yǔ)言的基礎(chǔ)上(注意是接近),降低開發(fā)者的門檻,減少開發(fā)難度。 Go語(yǔ)言,在功能上沒有超過C/C++,適用者為沒有C/C++經(jīng)驗(yàn)的開發(fā)者,開發(fā)出接近C效率的程序。 對(duì)于已經(jīng)熟練掌握C/C++的開發(fā)者來說,Go語(yǔ)言沒有優(yōu)勢(shì),還要重學(xué)語(yǔ)法,適應(yīng)開發(fā)環(huán)境,明顯是不符合效率的。
1、服務(wù)器編程:以前你如果使用C或者C++做的那些事情,用Go來做很合適,例如處理日志、數(shù)據(jù)打包、虛擬機(jī)處理、文件系統(tǒng)等。
2、分布式系統(tǒng)、數(shù)據(jù)庫(kù)代理器、中間件:例如Etcd。
3、網(wǎng)絡(luò)編程:這一塊目前應(yīng)用最廣,包括Web應(yīng)用、API應(yīng)用、下載應(yīng)用,而且Go內(nèi)置的net/http包基本上把我們平常用到的網(wǎng)絡(luò)功能都實(shí)現(xiàn)了。
4、開發(fā)云平臺(tái):目前國(guó)外很多云平臺(tái)在采用Go開發(fā),我們所熟知的七牛云、華為云等等都有使用Go進(jìn)行開發(fā)并且開源的成型的產(chǎn)品。
5、區(qū)塊鏈:目前有一種說法,技術(shù)從業(yè)人員把Go語(yǔ)言稱作為區(qū)塊鏈行業(yè)的開發(fā)語(yǔ)言。如果大家學(xué)習(xí)區(qū)塊鏈技術(shù)的話,就會(huì)發(fā)現(xiàn)現(xiàn)在有很多很多的區(qū)塊鏈的系統(tǒng)和應(yīng)用都是采用Go進(jìn)行開發(fā)的,比如ehtereum是目前知名度最大的公鏈,再比如fabric是目前最知名的聯(lián)盟鏈,兩者都有g(shù)o語(yǔ)言的版本,且go-ehtereum還是以太坊官方推薦的版本。
自1.0版發(fā)布以來,go語(yǔ)言引起了眾多開發(fā)者的關(guān)注,并得到了廣泛的應(yīng)用。go語(yǔ)言簡(jiǎn)單、高效、并發(fā)的特點(diǎn)吸引了許多傳統(tǒng)的語(yǔ)言開發(fā)人員,其數(shù)量也在不斷增加。
使用 Go 語(yǔ)言開發(fā)的開源項(xiàng)目非常多。早期的 Go 語(yǔ)言開源項(xiàng)目只是通過 Go 語(yǔ)言與傳統(tǒng)項(xiàng)目進(jìn)行C語(yǔ)言庫(kù)綁定實(shí)現(xiàn),例如 Qt、Sqlite 等。
后期的很多項(xiàng)目都使用 Go 語(yǔ)言進(jìn)行重新原生實(shí)現(xiàn),這個(gè)過程相對(duì)于其他語(yǔ)言要簡(jiǎn)單一些,這也促成了大量使用 Go 語(yǔ)言原生開發(fā)項(xiàng)目的出現(xiàn)。
一、主動(dòng)免殺1. 修改字符特征:主動(dòng)查找可能的特征碼,包括木馬文件修改注冊(cè)表、生成新文件的名稱與路徑、注入的進(jìn)程名等動(dòng)作,也包括運(yùn)行過程中可能出現(xiàn)或一定會(huì)出現(xiàn)的字符等文件特征。然后找出這些字符,并將其修改。2. 修改輸入表:查找此文件的輸入表函數(shù)名(API Name),并將其移位。3. 打亂文件結(jié)構(gòu):利用跳轉(zhuǎn)(JMP),打亂文件原有結(jié)構(gòu)。4. 修改入口點(diǎn):將文件的入口點(diǎn)加1。5. 修改PE段:將PE段移動(dòng)到空白位置二、被動(dòng)免殺1. 修改特征碼:用一些工具找出特征碼并針對(duì)特征碼做免殺處理。2. 用Vmprotect:使用Vmprotect加密區(qū)段。3. 文件加殼:可以用一些比較生僻的殼對(duì)木馬文件進(jìn)行保護(hù)。有的朋友看到這里有可能蒙了,PE、Vmprotect、入口點(diǎn)……這些都是什么意思啊?不要著急,下面我會(huì)一一介紹的,只要你看完這篇文章,就一定會(huì)成為免殺高手!怎么樣?Go!3.實(shí)戰(zhàn)演習(xí)1.)修改字符特征好,下面我們依然以一個(gè)病毒防御工作者的角度來考慮我們每一步應(yīng)該做什么,然后在利用逆向思維分而治之?,F(xiàn)在假如我們拿到一個(gè)木馬樣本灰鴿子,首先當(dāng)然要分析它究竟有什么功能,怎樣運(yùn)行以及怎樣保護(hù)自己等。其實(shí)這一步要求的專業(yè)知識(shí)是很多的,但考慮到我們的讀者,我們暫且用一個(gè)比較簡(jiǎn)單易行的方法——運(yùn)行木馬AND查看此程序的幫助文檔。我們打開RegSnap,新建一個(gè)快照,打開RegSnap后,點(diǎn)擊[新建快照]按鈕(如圖1)。
在彈出的對(duì)話框中選擇[生成所有項(xiàng)目的快照](如圖2)。然后保存快照,現(xiàn)在已經(jīng)將RegSnap配置好了,下面運(yùn)行我們的木馬程序(提醒:做免殺時(shí),一定要記住養(yǎng)好隨時(shí)備分的好習(xí)慣,以防止修改錯(cuò)誤或是實(shí)驗(yàn)運(yùn)行時(shí)破壞、刪除木馬)。木馬運(yùn)行完畢后,我們?cè)诎凑丈厦娴姆椒ㄖ匦伦鲆粋€(gè)快照并保存,然后按快捷鍵F5,在彈出的“比較快照”對(duì)話框中選擇剛才保存的快照,在“第一個(gè)快照”中選擇我們剛才第一次保存的快照,而“第二個(gè)快照”選擇我們后保存的快照存檔,很快結(jié)果就出來了(如圖3)。
有的朋友對(duì)于使用RegSnap收集到的信息感到無力分析,抱怨收集到的東西太多,在這里我簡(jiǎn)單的介紹一下,首先應(yīng)注意的是生成做對(duì)比的兩個(gè)快照之間的時(shí)間要盡可能短,另外要排除帶有OpenSaveMRU的注冊(cè)表鍵值,還要排除有關(guān)*.rsnp文件的創(chuàng)建讀寫等操作記錄。下面我們就將有用的信息提取出來,逐一分析。文件列表于 C:\WINDOWS\*.*新增文件木馬.exe注冊(cè)表報(bào)告新增主鍵HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\MUICache\C:\Documents and Settings\A1Pass-admin\桌面\huigezi\復(fù)件 Server02.exe鍵值: 字符串: "復(fù)件 Server02"HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\LEGACY_*6728*9A6C*670D*52A1\0000\Class鍵值: 字符串: "LegacyDriver"HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\LEGACY_*6728*9A6C*670D*52A1\0000\ClassGUID鍵值: 字符串: "{8ECC055D-047F-11D1-A537-0000F8753ED1}"HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\LEGACY_*6728*9A6C*670D*52A1\0000\Control\ActiveService鍵值: 字符串: "木馬服務(wù)"HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\木馬服務(wù)\Description鍵值: 字符串: "灰鴿子服務(wù)端程序。遠(yuǎn)程監(jiān)控管理."……這里我只摘錄了部分關(guān)鍵性的木馬動(dòng)作記錄,全部記錄請(qǐng)見光盤。通過文件列表我們可以知道木馬在WINDOW目錄下生成了一個(gè)新文件,而通過注冊(cè)表的監(jiān)控信息我們也知道了木馬是怎樣將自己注冊(cè)為系統(tǒng)服務(wù)并自動(dòng)運(yùn)行的。那么我們回到瑞星的研究分析室,看看那些大哥大姐們會(huì)怎么辦……瑞星大哥:“最近這灰鴿子太猖狂啦!我們是不是應(yīng)該多定義幾套特征碼?”瑞星大姐:“恩,不錯(cuò)!先在注冊(cè)表那定義一套特征碼在說吧。”A1Pass:“STOP?。 保ㄖ灰姰嬅嫱蝗欢ǜ?,A1Pass將播放器最小化。)通過上面的對(duì)話,我們可以知道他們要將注冊(cè)表的某個(gè)字符定義為特征碼,從上面RegSnap分析出來的記錄來看,他們的選擇真的是太多了!那么他們究竟會(huì)用到哪些呢?其實(shí),就做為一個(gè)黑客來講,只要不影響服務(wù)端正常運(yùn)行,就應(yīng)該盡量多的改掉木馬的所有字符,當(dāng)然全部改變是不可能的,除非你自己編寫木馬。有的朋友要問了,除了注冊(cè)表別的就不可以改了嗎?答案當(dāng)然是否定的,譬如生成新文件的名稱與路徑、注入的進(jìn)程名等動(dòng)作,這些我們可以利用WINDOWS對(duì)字母大小寫不敏感的這一特點(diǎn)直接替換字母的大小寫,而對(duì)于運(yùn)行過程中可能出現(xiàn)或一定會(huì)出現(xiàn)的字符等我們可以直接將其替換成別的內(nèi)容。下面我為大家演示一下怎樣更改注入進(jìn)程的名稱。首先配置服務(wù)端,通過圖4我們可以看出來灰鴿子的啟動(dòng)運(yùn)行是需要“IEXPLORE.EXE”這個(gè)進(jìn)程的,根據(jù)注冊(cè)表的推理,我們可以認(rèn)為其未加殼的服務(wù)端是應(yīng)該存在“IEXPLORE.EXE”這一字符串的。既然如此,我們就先請(qǐng)出我們的第一把武器“WinHex”!
WinHex是一款極為出名16進(jìn)制編輯器。得到 ZDNetSoftwareLibrary 五星級(jí)最高評(píng)價(jià),擁有強(qiáng)大的系統(tǒng)效用。在這里,我們只用它來編輯文件,其余不做過多討論。首先我們用WinHex打開我們的木馬文件“Server.exe”,打開后如圖5所示。
然后我們按[Ctrl]+[F]快捷鍵調(diào)出查找文本對(duì)話框,輸入IEXPLORE.EXE后點(diǎn)擊“是”(如圖6)。
結(jié)果如圖7所示。下面我們就對(duì)其進(jìn)行大小寫轉(zhuǎn)換,用鼠標(biāo)點(diǎn)擊要更改的字母(例如I),然后在按鍵盤上的i,即可完成更改,就象使用WINDOWS的記事本一樣。更改完畢后,按[Ctrl]+[S]快捷鍵保存即可。
就這么簡(jiǎn)單?對(duì)!就這么簡(jiǎn)單!其他的例如注冊(cè)表、生成新文件的名稱與路徑等等都可以利用此方法更改。但是不幸的是,經(jīng)過這樣改后,還不足以對(duì)付例如金山、江民等品牌殺毒軟件,要想對(duì)付這些殺毒軟件的查殺,我們還需要對(duì)我們的木馬進(jìn)行進(jìn)一步處理。下面,我們開始學(xué)習(xí)輸入表函數(shù)(APIName)免殺!2.)修改輸入表不知有的朋友是否知道,PE文件的正常運(yùn)行是離不開其內(nèi)部輸入表函數(shù)的,而不同的程序,其內(nèi)部輸入表函數(shù)的名稱與在文件中的位置是不一樣的,所以輸入表函數(shù)也成了病毒防御工作者制作特征碼緊盯的地方之一。在我查出來的關(guān)于灰鴿子的特征碼來看,“瑞星大哥”已經(jīng)將其的一處輸入表函數(shù)作為特征碼了。所以掌握輸入表函數(shù)免殺技巧對(duì)于新入門的朋友來說勢(shì)在必行!
[PE文件小知識(shí):PE文件是WINDOWS系統(tǒng)中特有的一種文件結(jié)構(gòu),它包括PE文件頭、輸入表與相關(guān)資源文件等等]經(jīng)過我的測(cè)試,直接單獨(dú)修改文件內(nèi)部的輸入表函數(shù)會(huì)導(dǎo)致程序運(yùn)行不正常甚至崩潰!那就沒有辦法了嗎?我可沒那么容易認(rèn)輸!經(jīng)過一翻苦戰(zhàn),終于讓我在LordPE中找到了解決辦法,同時(shí)FoBnN的文章也給了我非常大的啟發(fā)……我們先打開LordPE,點(diǎn)擊[PE編輯器]按鈕,在彈出的對(duì)話框中選中木馬文件,打開后點(diǎn)擊[目錄](如圖8)。在點(diǎn)擊導(dǎo)入表后面的[…](如圖9)。在彈出的對(duì)話框中我們選擇wininet.dll下的InternetOpenUrlA(如圖10),有的朋友要問了,為什么非選擇InternetOpenUrlA這個(gè)輸入表函數(shù)呢?呵呵!那是因?yàn)檫@個(gè)輸入表里有特征碼哦,關(guān)于怎樣確定特征碼,我在后面會(huì)介紹,大家先別著急。
好的,關(guān)于LordPE就先停在這,下面我們就用WinHex來查找InternetOpenUrlA這個(gè)輸入表函數(shù)的所在位置,并將其用0填充(操作方法:?jiǎn)螕鬢inHex右面的16進(jìn)制信息,輸入0即可)(如圖11、12)。
然后將其寫到空白區(qū)域(既顯示000000的區(qū)域),一定要從頭開始寫入,這樣在以后計(jì)算地址時(shí)不容易出錯(cuò),除此之外也要注意輸入表函數(shù)的大小寫不要搞錯(cuò)(如圖13)。保存后我們?cè)诨氐絃ordPE那里,在需要更改的InternetOpenUrlA輸入表函數(shù)上單擊右鍵,在彈出的菜單里選擇“編輯”,將Thunk里的信息改成000B9D5E(如圖14)即可。有的朋友要問了,剛才我們不是把那個(gè)輸入表函數(shù)放到000B9D60那里了嗎?到這怎么變成000B9D5E了?其實(shí)原理很簡(jiǎn)單,因?yàn)槊總€(gè)輸入表函數(shù)前面都是有一個(gè)空格的,我們雖不用真正把那個(gè)空格加進(jìn)去,但填寫它的地址時(shí)一定要空出來,否則就會(huì)出錯(cuò)!而將000B9D60減去一個(gè)空格所占的位置,其地址正好為000B9D5E,還不十分明白的朋友在仔細(xì)看看圖13,下面我們?cè)诨氐絃ordPE,看看我們改過的輸入表函數(shù)變成什么樣了(如圖15)?呵呵!那我們?cè)撛趺崔k呢?其實(shí)簡(jiǎn)單的很,只要在重新改一下輸入表函數(shù)的名稱就可以了(如圖16)。有的時(shí)候因?yàn)槲覀兯顚懙牡刂窞楸容^靠后的,例如我們現(xiàn)在改的這個(gè)000B9D5E,后面僅能容納兩個(gè)字節(jié),所以更改輸入表函數(shù)時(shí)只能鍵入兩個(gè)字,對(duì)于這種情況我們可以先把Thunk里的信息改成如000B9D60這樣的起始地址,改輸入表函數(shù)名更改完畢后在將000B9D60改回原來的值(既000B9D5E),保存后即可成功,我們?cè)囈幌驴纯矗ㄈ鐖D17)。經(jīng)測(cè)驗(yàn)鴿子的各項(xiàng)功能均正常!在用瑞星查一下試試(如圖18),結(jié)果當(dāng)然不言而喻……
3.)修改特征碼雖然到這我們免殺已經(jīng)成功,但是為了學(xué)到更多的技術(shù),為了讓我們免殺的鴿子存活的更久,下面我在為大家介紹一下特征碼的查找與修改技巧。特征碼是殺毒軟件的心臟,但同樣也是我們的心臟!就看誰(shuí)先找到對(duì)方地心臟,并能發(fā)出致命一擊,誰(shuí)就是勝利者!一提到查找特征碼,就不得不說說MyCCL與CCL,這兩個(gè)軟件的名字相信留心過免殺技術(shù)的朋友不會(huì)陌生,但由于軟件操作的傻瓜化,很多時(shí)候?qū)τ贑CL的介紹只是一帶而過,這可苦了入門的朋友!這一小節(jié)我就先介紹一下MyCCL的用法……我們先來認(rèn)識(shí)一下MyCCL(如圖19),根據(jù)這張圖我們下面就來大體介紹一下MyCCL的應(yīng)用方法。首先點(diǎn)擊第1處選擇文件,然后在第2處輸入分塊個(gè)數(shù),分塊個(gè)數(shù)越多,定位越精確,然而生成的速度同時(shí)也就越慢,生成的文件總體積也就越大,就象灰鴿子這么大的服務(wù)端,如果分塊數(shù)為300的話,那么它生成文件的總體積將超過230M!所以在這里不建議填寫太大的數(shù)字,一般象灰鴿子這樣的服務(wù)端分塊數(shù)填400個(gè)就足夠了。生成完畢后會(huì)彈出個(gè)對(duì)話框提醒你去相應(yīng)目錄殺毒,圖中所示為“E:\文章\極度免殺\鴿子\OUTPUT”文件夾,我們到那個(gè)文件夾下開始?xì)⒍?,查到病毒就讓殺毒軟件將其徹底刪除,注意,這一點(diǎn)很重要!處理完畢后點(diǎn)擊第3處的二次處理,在點(diǎn)擊[生成]上面的[特征區(qū)間]按鈕即可出現(xiàn)右面的對(duì)話框。下面我們?cè)凇皡^(qū)間設(shè)定”里右鍵單擊特征碼區(qū)間,在彈出的菜單中選擇“復(fù)合精確定位此處特征”(如圖20),然后重復(fù)上面的操作,直到你認(rèn)為[單位長(zhǎng)度]已經(jīng)小到很方便更改的時(shí)候,特征碼的定位就算結(jié)束了。好了,一口氣說了這么多,不知道剛?cè)腴T的朋友是否懂得一些MyCCL的用法了沒有……但是上面我們定位的是文件特征碼,還有內(nèi)存特征碼沒有定義,這里我們要用到CCL的內(nèi)存特征碼定位功能,打開CCL后,我們依次選擇[文件]→[特征碼驗(yàn)測(cè)]→[內(nèi)存特征碼](如圖21)。
在彈出的對(duì)話框中選擇我們要進(jìn)行免殺操作的木馬,然后會(huì)進(jìn)入“定位范圍選擇窗口”(如圖22)。由圖中可知,第一個(gè)CODE段的偏移量為00000400,也就是說我們可以用00000400做為起始位置,那么我么就在用戶輸入?yún)^(qū)的“起始位置”處填寫00000400,下面的那個(gè)驗(yàn)測(cè)大小怎么填寫呢?看到圖22中畫線的那個(gè)“當(dāng)前文件大小”了嗎?我們可以用WINDOWS系統(tǒng)自帶的計(jì)算器進(jìn)行計(jì)算,把計(jì)算器的“查看”菜單設(shè)置為科學(xué)型、十六進(jìn)制、四字(如圖23)。然后用當(dāng)前文件大小的值減去起始值00000400,得到的結(jié)果為000B9A00,那么我們就在“驗(yàn)測(cè)大小”后填上000B9A00,然后點(diǎn)擊“填加區(qū)段”按鈕(如圖24)。最后點(diǎn)擊確定,在新彈出的對(duì)話框中點(diǎn)擊運(yùn)行,不過需要注意的是,在進(jìn)行此步操作時(shí)一定要打開殺毒軟件的所有功能。下面你要做的就是等待……然而光找特征碼是不夠的,我們還得學(xué)會(huì)怎樣更改,而關(guān)于特征碼地更改是非常有學(xué)問的!這里為了方便廣大讀者能學(xué)以致用,在此我只介紹部分理論知識(shí),著重介紹實(shí)踐操作,但是我想請(qǐng)大家注意,免殺的方法象你做完免殺的木馬一樣,都有生存時(shí)間,而過了這個(gè)時(shí)間,這種免殺方法就變的不在實(shí)用,或者免殺效果大打折扣!所以要想真正成為免殺高手,還的打牢基本功,不斷創(chuàng)造出新的免殺方法,因?yàn)槲覀兪窃谂c殺毒軟件廠商的專業(yè)技術(shù)人員“斗法”啊!關(guān)于需要注意的問題就先講的這,下面我?guī)Т蠹蚁葋砹私庖幌履壳案奶卣鞔a的辦法。1. 大小寫替換(只適用于文件免殺)適 用 于:出現(xiàn)可識(shí)別的英文字母或詞組,并且確定其不是相關(guān)函數(shù)(如輸入表函數(shù))。操作方法:如咱們“實(shí)戰(zhàn)演習(xí)”的第一節(jié)講的一樣,只須將大小寫替換一下就可以了,例如特征碼中出現(xiàn)了A,你只要將其替換為a即可。原 理:利用WINDOWS系統(tǒng)對(duì)大小寫不敏感,而殺毒軟件卻對(duì)大小寫非常敏感這一特性達(dá)到免殺目的。2. 用00填充適 用 于:幾乎任何情況,但成功率不是非常高。操作方法:例如我們找到了一處特征碼0009EE7F_00000005,那么根據(jù)這段特征碼信息我們可以知道它的位置在0009EE7F,大小為5個(gè)字節(jié),也就是0009EE7F-0009EE83這一段內(nèi)容(如圖25)。
一直跟著文章實(shí)踐操作的朋友肯定有疑問,你是怎么找到那個(gè)地址的呢?而我怎么找不到呢?那是因?yàn)閃inHex的默認(rèn)偏移量為decimal模式,我們單擊Offset欄將其改為16進(jìn)制模式即可(如圖26)。
然后我們有選擇的一處處地用00填充(如圖27)。記住要多試幾次,80%的情況下你都能找到一處既能免殺又不影響程序正常運(yùn)行的區(qū)域。對(duì)于定義出的內(nèi)存特征碼,只要將其內(nèi)存地址用一個(gè)叫做《便宜量轉(zhuǎn)換器》的小程序轉(zhuǎn)換成16進(jìn)制偏移量,然后在進(jìn)行相應(yīng)操作即可。原 理:由于PE文件的特殊格式以及程序編譯語(yǔ)言等問題,使得生成目標(biāo)代碼的效率并不高,難免出現(xiàn)一些“垃圾信息”,而這些信息存在與否對(duì)與程序是否能正常運(yùn)行并不起決定性的作用,而當(dāng)木馬的這部分“垃圾信息”被定義為特征碼時(shí),我們完全可以將其刪除,而刪除的方法就是用無任何意義的00將其替換。3. 跳到空白區(qū)域適 用 于:幾乎任何情況,成功率比較高。操作方法:還是以特征碼0009EE7F_00000005為例子,假如我們使用00填充的方法失敗了那么不要多想,接下來馬上試試OllyDbg,關(guān)于OllyDbg我就不多介紹了,它是非常棒而且非常專業(yè)的一個(gè)動(dòng)態(tài)反匯編/調(diào)試工具,這里我們只用它來幫助我們進(jìn)行免殺作業(yè),首先應(yīng)該做的就是將我們的16進(jìn)制偏移量0009EE7F轉(zhuǎn)換為內(nèi)存地址,因?yàn)镺llyDbg的工作原理是先將程序釋放到內(nèi)存空間里,然后才能進(jìn)行相關(guān)作業(yè)…這里要用到的是一個(gè)叫做《便宜量轉(zhuǎn)換器》的小程序,我們用其轉(zhuǎn)換完畢后得到的內(nèi)存地址為0049FA7F(如圖28)。
下面我們用OllyDbg打開我們的木馬服務(wù)端,首先找到一處空白區(qū),并域記下這的地址004A24A5,然后找到我們剛轉(zhuǎn)換過來的地址0049FA7F,先將以0049FA7F開始以下的這三行數(shù)據(jù)選定,然后單擊右鍵選則[復(fù)制]→[到接剪貼板](如圖29)。將其復(fù)制到本文文檔里備用,然后在將這三行代碼一一NOP掉(如圖30)。最后右鍵點(diǎn)擊0049FA7F,在彈出的對(duì)話框中選擇匯編,并寫入“jmp 004A24A5”這條匯編指令(如圖31)。記住,在點(diǎn)擊[匯編]按鈕之前一定先把“使用 NOP 填充”前面的勾去掉。然后我們記下匯編后0049FA7F的下面那個(gè)地址0049FA84(仔細(xì)觀察圖31)。好,下面我們回到004A24A5這處剛才找到的空白地址(如圖32)。
然后用剛才匯編的方法把在本文文檔里備用的信息一句句地匯編進(jìn)去,然后在將最后一句代碼的下一行004A24AA處加入“jmp 0049FA84”這行代碼(如圖33)。然后單擊右鍵→[復(fù)制到可執(zhí)行文件]→[所有修改](如圖34)。
在彈出的對(duì)話框中選擇“全部復(fù)制”然后保存即可。而對(duì)于內(nèi)存免殺就省去了內(nèi)存地址轉(zhuǎn)換這一步了。原 理:大家先看圖35,由圖中可知,正象此方法的名字“跳到空白區(qū)域”一樣,這種方法的原理就是將原本含有特征碼的信息轉(zhuǎn)移到空白區(qū)域,并把原先位置的信息全部NOP掉,并在那里加一個(gè)跳轉(zhuǎn)指令,讓其跳到004A24A5處,也就是我們找到的空白區(qū)域,并把原來在0049FA84的信息移到這里,加完信息后在加一條指令讓其在跳回去,以使程序連貫起來。
4. 上下互換適 用 于:幾乎任何情況,成功率比較高。操作方法:先用OllyDbg載入木馬程序,假定其特征碼為0009EE7F_00000005,我們還是先用《偏移量轉(zhuǎn)換器》將其轉(zhuǎn)換為內(nèi)存地址,上面我們已經(jīng)知道0009EE7F對(duì)應(yīng)的內(nèi)存地址為0049FA7F,然后在OllyDbg中找到相應(yīng)位置,利用上面“跳到空白區(qū)域”里介紹的修改方法將0049FA7F上下兩句代碼調(diào)換位置即可。而對(duì)于內(nèi)存免殺就省去了內(nèi)存地址轉(zhuǎn)換這一步了。原 理:殺毒軟件的特征碼定位是嚴(yán)格按照相關(guān)偏移量于內(nèi)存地址進(jìn)行的,而其實(shí)我們的應(yīng)用程序中的機(jī)器碼執(zhí)行順序的先后在一般情況下是沒有死規(guī)定的,所以我們只需將其上下互換,殺毒軟件自然就不認(rèn)識(shí)了。5.ADD與SUB 互換適 用 于:在內(nèi)存特征碼中出現(xiàn)ADD或 SUB指令的,成功率比較高。操作方法:用OllyDbg載入木馬程序,假定其特征碼所對(duì)應(yīng)的地址中有ADD或SUB指令,例如00018A88:XXXXX 00000088 ADD ECX 10000000我們可以將ADD ECX 10000000這段機(jī)器碼改為SUB ECX F0000000,更改完畢后保存為EXE文件即可。原 理:我們都知道1+1=2,我們也知道1-(-1)=2,上面就是利用了這個(gè)原理,其中ADD指令的就是加意思,而SUB則是減的意思。雖然被我們互換了一下,但是最終結(jié)果還是一樣的,可是換完之后殺毒軟件就不認(rèn)識(shí)了。到這里,關(guān)于特征碼的查找與修改就講完了,但是除此之外呢?答案是還有許多??!下面我們就一起看看其他免殺方法。4.)其他免殺方法改文件頭:這里所說的改文件頭包括加頭去頭,文件加花。關(guān)于加頭去頭,我們還是用OllyDbg。用OllyDbg載入后,OllyDbg會(huì)自動(dòng)停在入口點(diǎn)(如圖36)。
我們將頭三行機(jī)器碼復(fù)制保存起來,然后找到空白區(qū)域,用匯編的方法一一將其寫入(如圖37)。然后在后面寫入一條JMP指令,讓其跳到初始入口點(diǎn)的第四行,相信一直仔細(xì)看本文的朋友一定明白其原理,如果忘了的話可以看上面修改特征碼的第三種方法,原理與這差不多,修改完畢后如下所示:004A2A73 0000 add byte ptr ds:[eax],al004A2A75 0000 add byte ptr ds:[eax],al004A2A77 55 push ebp004A2A78 8BEC mov ebp,esp004A2A7A B9 04000000 mov ecx,4004A2A7F ^ E9 CCF3FFFF jmp Server.004A1E50004A2A84 0000 add byte ptr ds:[eax],al004A2A86 0000 add byte ptr ds:[eax],al004A2A88 0000 add byte ptr ds:[eax],al
上面的add byte ptr ds:[eax],al就是所謂的空白區(qū)域,我們看到改完后的頭文件位于004A2A77,所以我們還要用PEditor改一下入口點(diǎn),打開PEditor后載入文件,將入口點(diǎn)處的地址改為我們的新文件頭地址004A2A77(如圖38),保存后即可。
Go語(yǔ)言自亮相以來并沒有展示一個(gè)明確的方向,Google員工將Go語(yǔ)言稱為一個(gè)“試驗(yàn)性語(yǔ)言”,稱其試圖融合Python等動(dòng)態(tài)語(yǔ)言的開發(fā)速度和C或C++等編譯語(yǔ)言的性能和安全。一位Go語(yǔ)言的支持者概括而言Go語(yǔ)言如下:簡(jiǎn)單、快速、安全、并發(fā)、快樂編程、開源;但Go語(yǔ)言缺乏方向以及其“集大成者”的嘗試很容易會(huì)導(dǎo)致其學(xué)貓不成學(xué)狗也不成,淪為四不像。盡管如此,編者仍然覺得Go語(yǔ)言有相當(dāng)大的潛力:很多開發(fā)者對(duì)它感興趣——不僅它的最初設(shè)計(jì)者陣容強(qiáng)大,而且在參與修改源代碼的人群中也不乏大牛級(jí)人物。這很有可能幫助Go語(yǔ)言找到適合自己的方向,開拓系統(tǒng)編程的新方向。
升級(jí)系統(tǒng)。截止到2022年11月18日,博學(xué)谷go語(yǔ)言現(xiàn)已下架,原因是要對(duì)系統(tǒng)功能進(jìn)行升級(jí)操作,具體上架時(shí)間待官方公告為準(zhǔn)。博學(xué)谷于2016年7月正式創(chuàng)立,匯聚了黑馬程序員11年的教學(xué)精華。
分享標(biāo)題:go語(yǔ)言為什么免殺 golang 免殺
本文路徑:http://jinyejixie.com/article16/dochgdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、網(wǎng)站策劃、網(wǎng)站建設(shè)、品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站內(nèi)鏈、網(wǎng)站排名
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)