逆向go語言 go語言重構(gòu)

什么是逆構(gòu)詞法

逆成法(back formation)

成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),河西企業(yè)網(wǎng)站建設(shè),河西品牌網(wǎng)站建設(shè),網(wǎng)站定制,河西網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,河西網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

逆成法與綴合法恰好相反,綴合法借用此綴構(gòu)成心詞,而逆成法則去掉被誤認的后綴構(gòu)成新詞。例如:televise由television刪去-ion逆生而成。

利用這種構(gòu)詞手段創(chuàng)造的新詞叫做逆生詞。逆生詞多半屬動詞,形成逆成詞的原形詞最多的是名詞和形容詞。

a. 名詞-動詞。例如:

--pedlar à peddle (叫賣)

--swindler à swindle (詐騙)

b. 形容詞-動詞。例如:

--peevish à peeve (氣惱)

--gloomy à gloom (變陰暗)

英式英語更多選用逆構(gòu)詞法:

如從burglar這個詞衍生岀的動詞,在美式英語中變成burglarize,而在英式英語中便更變成了burgle。

擴展資料:

轉(zhuǎn)化法

英語中,有的名詞可作動詞,有的形容詞可作副詞或動詞,這種把一種詞性用作另一種詞性而詞義不變的方法叫作轉(zhuǎn)化法。

動轉(zhuǎn)名

很多動詞可以轉(zhuǎn)化為名詞,大多意思沒有多大的變化(如下①);有時意思有一定變化(如下②);有的與一個動詞和不定冠詞構(gòu)成短語,表示一個動作(如下③)。例如:

①Let's go out for a walk.我們到外面去散散步吧。

②He is a man of strong build.他是一個體格健壯的漢子。

③Let's have a swim.咱們游泳吧。

名轉(zhuǎn)動

很多表示物件(如下①)、身體部位(如下②)、某類人(如下③)的名詞可以用作動詞來表示動作,某些抽象名詞(如下④)也可作動詞。例如:

①Did you book a seat on the plane?你訂好飛機座位了嗎

②Please hand me the book.請把那本書遞給我。

③She nursed her husband back to health.她看護丈夫,使他恢復(fù)了健康。

④We lunched together.我們在一起吃了午餐。

參考資料:構(gòu)詞法-百度百科

go 的選項模式

現(xiàn)在有個結(jié)構(gòu)體如下定義:

我們需要初始化結(jié)構(gòu)體,如果是其他語言,函數(shù)支持默認參數(shù):

但是,go語言函數(shù)不支持默認參數(shù),同時即使go語言支持默認參數(shù),但是如果配置項過多,那么每一個配置項都得寫一個默認參數(shù),也不現(xiàn)實。

那么,在go語言中,我們怎么優(yōu)雅的給其初始化呢,這時,就需要利用選項模式了(option)。

首先,我們定義一個option函數(shù)類型:

它接收一個參數(shù): *Server 。

然后定義一個 NewServer 函數(shù),它接收一個 Option類型的不定參數(shù):

最后,再直接定義一系列返回 Option的函數(shù)

使用時,直接:

3.6 Go語言函數(shù)的延遲調(diào)用(Deferred Code)

在以下這段代碼中,我們操作一個文件,無論成功與否都需要關(guān)閉文件句柄。這里在三處不同的位置都調(diào)用了file.Close()方法,代碼顯得非常冗余。

我們利用延遲調(diào)用來優(yōu)化代碼。定義后的defer代碼,會在return之前返回,讓代碼顯得更加緊湊,且可讀性變強,對上面的代碼改造如下:

我們通過這個示例來看一下延遲調(diào)用與正常代碼之間的執(zhí)行順序

先簡單分析一下代碼邏輯:

從輸出中,我們可以觀察到如下現(xiàn)象:

從這個實例中,我們很明顯觀察到,defer語句是在return之前執(zhí)行

如果一個函數(shù)內(nèi)定義了多個defer,則調(diào)用順序為LIFO(后進先出)方式執(zhí)行。

仍然是相同的例子,但是在TestDefer中我們定義了三個defer輸出,根據(jù)LIFO原則,輸出的順序是3rd-2nd-1st,根據(jù)最后的結(jié)果,也是逆向向上執(zhí)行defer輸出。

就在整理這篇筆記的時候,發(fā)現(xiàn)了自己的認知誤區(qū),主要是本節(jié)實例三中發(fā)現(xiàn)的,先來看一下英文的描述:

對于上面的這段話的理解:

下面是代碼執(zhí)行輸出,我們來一起分析一下:

雖然在a()函數(shù)內(nèi),顯示的返回了10,但是main函數(shù)中得到的結(jié)果是defer函數(shù)自增后的結(jié)果,我們來分析一下代碼:

在這篇文章的上一版,我曾經(jīng)嘗試用指針取解釋defer修改返回值的類型,但是感覺不夠透徹,也讓閱讀者非常困惑,索性參考了一下go官方blog中的一篇文章,在此基礎(chǔ)上進行了擴展。如需要閱讀原文,可以參考下面的文章。

用軟件做免殺改特征碼的方法

一、主動免殺1. 修改字符特征:主動查找可能的特征碼,包括木馬文件修改注冊表、生成新文件的名稱與路徑、注入的進程名等動作,也包括運行過程中可能出現(xiàn)或一定會出現(xiàn)的字符等文件特征。然后找出這些字符,并將其修改。2. 修改輸入表:查找此文件的輸入表函數(shù)名(API Name),并將其移位。3. 打亂文件結(jié)構(gòu):利用跳轉(zhuǎn)(JMP),打亂文件原有結(jié)構(gòu)。4. 修改入口點:將文件的入口點加1。5. 修改PE段:將PE段移動到空白位置二、被動免殺1. 修改特征碼:用一些工具找出特征碼并針對特征碼做免殺處理。2. 用Vmprotect:使用Vmprotect加密區(qū)段。3. 文件加殼:可以用一些比較生僻的殼對木馬文件進行保護。有的朋友看到這里有可能蒙了,PE、Vmprotect、入口點……這些都是什么意思???不要著急,下面我會一一介紹的,只要你看完這篇文章,就一定會成為免殺高手!怎么樣?Go!3.實戰(zhàn)演習1.)修改字符特征好,下面我們依然以一個病毒防御工作者的角度來考慮我們每一步應(yīng)該做什么,然后在利用逆向思維分而治之?,F(xiàn)在假如我們拿到一個木馬樣本灰鴿子,首先當然要分析它究竟有什么功能,怎樣運行以及怎樣保護自己等。其實這一步要求的專業(yè)知識是很多的,但考慮到我們的讀者,我們暫且用一個比較簡單易行的方法——運行木馬AND查看此程序的幫助文檔。我們打開RegSnap,新建一個快照,打開RegSnap后,點擊[新建快照]按鈕(如圖1)。

在彈出的對話框中選擇[生成所有項目的快照](如圖2)。然后保存快照,現(xiàn)在已經(jīng)將RegSnap配置好了,下面運行我們的木馬程序(提醒:做免殺時,一定要記住養(yǎng)好隨時備分的好習慣,以防止修改錯誤或是實驗運行時破壞、刪除木馬)。木馬運行完畢后,我們在按照上面的方法重新做一個快照并保存,然后按快捷鍵F5,在彈出的“比較快照”對話框中選擇剛才保存的快照,在“第一個快照”中選擇我們剛才第一次保存的快照,而“第二個快照”選擇我們后保存的快照存檔,很快結(jié)果就出來了(如圖3)。

有的朋友對于使用RegSnap收集到的信息感到無力分析,抱怨收集到的東西太多,在這里我簡單的介紹一下,首先應(yīng)注意的是生成做對比的兩個快照之間的時間要盡可能短,另外要排除帶有OpenSaveMRU的注冊表鍵值,還要排除有關(guān)*.rsnp文件的創(chuàng)建讀寫等操作記錄。下面我們就將有用的信息提取出來,逐一分析。文件列表于 C:\WINDOWS\*.*新增文件木馬.exe注冊表報告新增主鍵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ù)端程序。遠程監(jiān)控管理."……這里我只摘錄了部分關(guān)鍵性的木馬動作記錄,全部記錄請見光盤。通過文件列表我們可以知道木馬在WINDOW目錄下生成了一個新文件,而通過注冊表的監(jiān)控信息我們也知道了木馬是怎樣將自己注冊為系統(tǒng)服務(wù)并自動運行的。那么我們回到瑞星的研究分析室,看看那些大哥大姐們會怎么辦……瑞星大哥:“最近這灰鴿子太猖狂啦!我們是不是應(yīng)該多定義幾套特征碼?”瑞星大姐:“恩,不錯!先在注冊表那定義一套特征碼在說吧。”A1Pass:“STOP??!”(只見畫面突然定格,A1Pass將播放器最小化。)通過上面的對話,我們可以知道他們要將注冊表的某個字符定義為特征碼,從上面RegSnap分析出來的記錄來看,他們的選擇真的是太多了!那么他們究竟會用到哪些呢?其實,就做為一個黑客來講,只要不影響服務(wù)端正常運行,就應(yīng)該盡量多的改掉木馬的所有字符,當然全部改變是不可能的,除非你自己編寫木馬。有的朋友要問了,除了注冊表別的就不可以改了嗎?答案當然是否定的,譬如生成新文件的名稱與路徑、注入的進程名等動作,這些我們可以利用WINDOWS對字母大小寫不敏感的這一特點直接替換字母的大小寫,而對于運行過程中可能出現(xiàn)或一定會出現(xiàn)的字符等我們可以直接將其替換成別的內(nèi)容。下面我為大家演示一下怎樣更改注入進程的名稱。首先配置服務(wù)端,通過圖4我們可以看出來灰鴿子的啟動運行是需要“IEXPLORE.EXE”這個進程的,根據(jù)注冊表的推理,我們可以認為其未加殼的服務(wù)端是應(yīng)該存在“IEXPLORE.EXE”這一字符串的。既然如此,我們就先請出我們的第一把武器“WinHex”!

WinHex是一款極為出名16進制編輯器。得到 ZDNetSoftwareLibrary 五星級最高評價,擁有強大的系統(tǒng)效用。在這里,我們只用它來編輯文件,其余不做過多討論。首先我們用WinHex打開我們的木馬文件“Server.exe”,打開后如圖5所示。

然后我們按[Ctrl]+[F]快捷鍵調(diào)出查找文本對話框,輸入IEXPLORE.EXE后點擊“是”(如圖6)。

結(jié)果如圖7所示。下面我們就對其進行大小寫轉(zhuǎn)換,用鼠標點擊要更改的字母(例如I),然后在按鍵盤上的i,即可完成更改,就象使用WINDOWS的記事本一樣。更改完畢后,按[Ctrl]+[S]快捷鍵保存即可。

就這么簡單?對!就這么簡單!其他的例如注冊表、生成新文件的名稱與路徑等等都可以利用此方法更改。但是不幸的是,經(jīng)過這樣改后,還不足以對付例如金山、江民等品牌殺毒軟件,要想對付這些殺毒軟件的查殺,我們還需要對我們的木馬進行進一步處理。下面,我們開始學習輸入表函數(shù)(APIName)免殺!2.)修改輸入表不知有的朋友是否知道,PE文件的正常運行是離不開其內(nèi)部輸入表函數(shù)的,而不同的程序,其內(nèi)部輸入表函數(shù)的名稱與在文件中的位置是不一樣的,所以輸入表函數(shù)也成了病毒防御工作者制作特征碼緊盯的地方之一。在我查出來的關(guān)于灰鴿子的特征碼來看,“瑞星大哥”已經(jīng)將其的一處輸入表函數(shù)作為特征碼了。所以掌握輸入表函數(shù)免殺技巧對于新入門的朋友來說勢在必行!

[PE文件小知識:PE文件是WINDOWS系統(tǒng)中特有的一種文件結(jié)構(gòu),它包括PE文件頭、輸入表與相關(guān)資源文件等等]經(jīng)過我的測試,直接單獨修改文件內(nèi)部的輸入表函數(shù)會導(dǎo)致程序運行不正常甚至崩潰!那就沒有辦法了嗎?我可沒那么容易認輸!經(jīng)過一翻苦戰(zhàn),終于讓我在LordPE中找到了解決辦法,同時FoBnN的文章也給了我非常大的啟發(fā)……我們先打開LordPE,點擊[PE編輯器]按鈕,在彈出的對話框中選中木馬文件,打開后點擊[目錄](如圖8)。在點擊導(dǎo)入表后面的[…](如圖9)。在彈出的對話框中我們選擇wininet.dll下的InternetOpenUrlA(如圖10),有的朋友要問了,為什么非選擇InternetOpenUrlA這個輸入表函數(shù)呢?呵呵!那是因為這個輸入表里有特征碼哦,關(guān)于怎樣確定特征碼,我在后面會介紹,大家先別著急。

好的,關(guān)于LordPE就先停在這,下面我們就用WinHex來查找InternetOpenUrlA這個輸入表函數(shù)的所在位置,并將其用0填充(操作方法:單擊WinHex右面的16進制信息,輸入0即可)(如圖11、12)。

然后將其寫到空白區(qū)域(既顯示000000的區(qū)域),一定要從頭開始寫入,這樣在以后計算地址時不容易出錯,除此之外也要注意輸入表函數(shù)的大小寫不要搞錯(如圖13)。保存后我們在回到LordPE那里,在需要更改的InternetOpenUrlA輸入表函數(shù)上單擊右鍵,在彈出的菜單里選擇“編輯”,將Thunk里的信息改成000B9D5E(如圖14)即可。有的朋友要問了,剛才我們不是把那個輸入表函數(shù)放到000B9D60那里了嗎?到這怎么變成000B9D5E了?其實原理很簡單,因為每個輸入表函數(shù)前面都是有一個空格的,我們雖不用真正把那個空格加進去,但填寫它的地址時一定要空出來,否則就會出錯!而將000B9D60減去一個空格所占的位置,其地址正好為000B9D5E,還不十分明白的朋友在仔細看看圖13,下面我們在回到LordPE,看看我們改過的輸入表函數(shù)變成什么樣了(如圖15)?呵呵!那我們該怎么辦呢?其實簡單的很,只要在重新改一下輸入表函數(shù)的名稱就可以了(如圖16)。有的時候因為我們所填寫的地址為比較靠后的,例如我們現(xiàn)在改的這個000B9D5E,后面僅能容納兩個字節(jié),所以更改輸入表函數(shù)時只能鍵入兩個字,對于這種情況我們可以先把Thunk里的信息改成如000B9D60這樣的起始地址,改輸入表函數(shù)名更改完畢后在將000B9D60改回原來的值(既000B9D5E),保存后即可成功,我們試一下看看(如圖17)。經(jīng)測驗鴿子的各項功能均正常!在用瑞星查一下試試(如圖18),結(jié)果當然不言而喻……

3.)修改特征碼雖然到這我們免殺已經(jīng)成功,但是為了學到更多的技術(shù),為了讓我們免殺的鴿子存活的更久,下面我在為大家介紹一下特征碼的查找與修改技巧。特征碼是殺毒軟件的心臟,但同樣也是我們的心臟!就看誰先找到對方地心臟,并能發(fā)出致命一擊,誰就是勝利者!一提到查找特征碼,就不得不說說MyCCL與CCL,這兩個軟件的名字相信留心過免殺技術(shù)的朋友不會陌生,但由于軟件操作的傻瓜化,很多時候?qū)τ贑CL的介紹只是一帶而過,這可苦了入門的朋友!這一小節(jié)我就先介紹一下MyCCL的用法……我們先來認識一下MyCCL(如圖19),根據(jù)這張圖我們下面就來大體介紹一下MyCCL的應(yīng)用方法。首先點擊第1處選擇文件,然后在第2處輸入分塊個數(shù),分塊個數(shù)越多,定位越精確,然而生成的速度同時也就越慢,生成的文件總體積也就越大,就象灰鴿子這么大的服務(wù)端,如果分塊數(shù)為300的話,那么它生成文件的總體積將超過230M!所以在這里不建議填寫太大的數(shù)字,一般象灰鴿子這樣的服務(wù)端分塊數(shù)填400個就足夠了。生成完畢后會彈出個對話框提醒你去相應(yīng)目錄殺毒,圖中所示為“E:\文章\極度免殺\鴿子\OUTPUT”文件夾,我們到那個文件夾下開始殺毒,查到病毒就讓殺毒軟件將其徹底刪除,注意,這一點很重要!處理完畢后點擊第3處的二次處理,在點擊[生成]上面的[特征區(qū)間]按鈕即可出現(xiàn)右面的對話框。下面我們在“區(qū)間設(shè)定”里右鍵單擊特征碼區(qū)間,在彈出的菜單中選擇“復(fù)合精確定位此處特征”(如圖20),然后重復(fù)上面的操作,直到你認為[單位長度]已經(jīng)小到很方便更改的時候,特征碼的定位就算結(jié)束了。好了,一口氣說了這么多,不知道剛?cè)腴T的朋友是否懂得一些MyCCL的用法了沒有……但是上面我們定位的是文件特征碼,還有內(nèi)存特征碼沒有定義,這里我們要用到CCL的內(nèi)存特征碼定位功能,打開CCL后,我們依次選擇[文件]→[特征碼驗測]→[內(nèi)存特征碼](如圖21)。

在彈出的對話框中選擇我們要進行免殺操作的木馬,然后會進入“定位范圍選擇窗口”(如圖22)。由圖中可知,第一個CODE段的偏移量為00000400,也就是說我們可以用00000400做為起始位置,那么我么就在用戶輸入?yún)^(qū)的“起始位置”處填寫00000400,下面的那個驗測大小怎么填寫呢?看到圖22中畫線的那個“當前文件大小”了嗎?我們可以用WINDOWS系統(tǒng)自帶的計算器進行計算,把計算器的“查看”菜單設(shè)置為科學型、十六進制、四字(如圖23)。然后用當前文件大小的值減去起始值00000400,得到的結(jié)果為000B9A00,那么我們就在“驗測大小”后填上000B9A00,然后點擊“填加區(qū)段”按鈕(如圖24)。最后點擊確定,在新彈出的對話框中點擊運行,不過需要注意的是,在進行此步操作時一定要打開殺毒軟件的所有功能。下面你要做的就是等待……然而光找特征碼是不夠的,我們還得學會怎樣更改,而關(guān)于特征碼地更改是非常有學問的!這里為了方便廣大讀者能學以致用,在此我只介紹部分理論知識,著重介紹實踐操作,但是我想請大家注意,免殺的方法象你做完免殺的木馬一樣,都有生存時間,而過了這個時間,這種免殺方法就變的不在實用,或者免殺效果大打折扣!所以要想真正成為免殺高手,還的打牢基本功,不斷創(chuàng)造出新的免殺方法,因為我們是在與殺毒軟件廠商的專業(yè)技術(shù)人員“斗法”??!關(guān)于需要注意的問題就先講的這,下面我?guī)Т蠹蚁葋砹私庖幌履壳案奶卣鞔a的辦法。1. 大小寫替換(只適用于文件免殺)適 用 于:出現(xiàn)可識別的英文字母或詞組,并且確定其不是相關(guān)函數(shù)(如輸入表函數(shù))。操作方法:如咱們“實戰(zhàn)演習”的第一節(jié)講的一樣,只須將大小寫替換一下就可以了,例如特征碼中出現(xiàn)了A,你只要將其替換為a即可。原 理:利用WINDOWS系統(tǒng)對大小寫不敏感,而殺毒軟件卻對大小寫非常敏感這一特性達到免殺目的。2. 用00填充適 用 于:幾乎任何情況,但成功率不是非常高。操作方法:例如我們找到了一處特征碼0009EE7F_00000005,那么根據(jù)這段特征碼信息我們可以知道它的位置在0009EE7F,大小為5個字節(jié),也就是0009EE7F-0009EE83這一段內(nèi)容(如圖25)。

一直跟著文章實踐操作的朋友肯定有疑問,你是怎么找到那個地址的呢?而我怎么找不到呢?那是因為WinHex的默認偏移量為decimal模式,我們單擊Offset欄將其改為16進制模式即可(如圖26)。

然后我們有選擇的一處處地用00填充(如圖27)。記住要多試幾次,80%的情況下你都能找到一處既能免殺又不影響程序正常運行的區(qū)域。對于定義出的內(nèi)存特征碼,只要將其內(nèi)存地址用一個叫做《便宜量轉(zhuǎn)換器》的小程序轉(zhuǎn)換成16進制偏移量,然后在進行相應(yīng)操作即可。原 理:由于PE文件的特殊格式以及程序編譯語言等問題,使得生成目標代碼的效率并不高,難免出現(xiàn)一些“垃圾信息”,而這些信息存在與否對與程序是否能正常運行并不起決定性的作用,而當木馬的這部分“垃圾信息”被定義為特征碼時,我們完全可以將其刪除,而刪除的方法就是用無任何意義的00將其替換。3. 跳到空白區(qū)域適 用 于:幾乎任何情況,成功率比較高。操作方法:還是以特征碼0009EE7F_00000005為例子,假如我們使用00填充的方法失敗了那么不要多想,接下來馬上試試OllyDbg,關(guān)于OllyDbg我就不多介紹了,它是非常棒而且非常專業(yè)的一個動態(tài)反匯編/調(diào)試工具,這里我們只用它來幫助我們進行免殺作業(yè),首先應(yīng)該做的就是將我們的16進制偏移量0009EE7F轉(zhuǎn)換為內(nèi)存地址,因為OllyDbg的工作原理是先將程序釋放到內(nèi)存空間里,然后才能進行相關(guān)作業(yè)…這里要用到的是一個叫做《便宜量轉(zhuǎn)換器》的小程序,我們用其轉(zhuǎn)換完畢后得到的內(nèi)存地址為0049FA7F(如圖28)。

下面我們用OllyDbg打開我們的木馬服務(wù)端,首先找到一處空白區(qū),并域記下這的地址004A24A5,然后找到我們剛轉(zhuǎn)換過來的地址0049FA7F,先將以0049FA7F開始以下的這三行數(shù)據(jù)選定,然后單擊右鍵選則[復(fù)制]→[到接剪貼板](如圖29)。將其復(fù)制到本文文檔里備用,然后在將這三行代碼一一NOP掉(如圖30)。最后右鍵點擊0049FA7F,在彈出的對話框中選擇匯編,并寫入“jmp 004A24A5”這條匯編指令(如圖31)。記住,在點擊[匯編]按鈕之前一定先把“使用 NOP 填充”前面的勾去掉。然后我們記下匯編后0049FA7F的下面那個地址0049FA84(仔細觀察圖31)。好,下面我們回到004A24A5這處剛才找到的空白地址(如圖32)。

然后用剛才匯編的方法把在本文文檔里備用的信息一句句地匯編進去,然后在將最后一句代碼的下一行004A24AA處加入“jmp 0049FA84”這行代碼(如圖33)。然后單擊右鍵→[復(fù)制到可執(zhí)行文件]→[所有修改](如圖34)。

在彈出的對話框中選擇“全部復(fù)制”然后保存即可。而對于內(nèi)存免殺就省去了內(nèi)存地址轉(zhuǎn)換這一步了。原 理:大家先看圖35,由圖中可知,正象此方法的名字“跳到空白區(qū)域”一樣,這種方法的原理就是將原本含有特征碼的信息轉(zhuǎn)移到空白區(qū)域,并把原先位置的信息全部NOP掉,并在那里加一個跳轉(zhuǎn)指令,讓其跳到004A24A5處,也就是我們找到的空白區(qū)域,并把原來在0049FA84的信息移到這里,加完信息后在加一條指令讓其在跳回去,以使程序連貫起來。

4. 上下互換適 用 于:幾乎任何情況,成功率比較高。操作方法:先用OllyDbg載入木馬程序,假定其特征碼為0009EE7F_00000005,我們還是先用《偏移量轉(zhuǎn)換器》將其轉(zhuǎn)換為內(nèi)存地址,上面我們已經(jīng)知道0009EE7F對應(yīng)的內(nèi)存地址為0049FA7F,然后在OllyDbg中找到相應(yīng)位置,利用上面“跳到空白區(qū)域”里介紹的修改方法將0049FA7F上下兩句代碼調(diào)換位置即可。而對于內(nèi)存免殺就省去了內(nèi)存地址轉(zhuǎn)換這一步了。原 理:殺毒軟件的特征碼定位是嚴格按照相關(guān)偏移量于內(nèi)存地址進行的,而其實我們的應(yīng)用程序中的機器碼執(zhí)行順序的先后在一般情況下是沒有死規(guī)定的,所以我們只需將其上下互換,殺毒軟件自然就不認識了。5.ADD與SUB 互換適 用 于:在內(nèi)存特征碼中出現(xiàn)ADD或 SUB指令的,成功率比較高。操作方法:用OllyDbg載入木馬程序,假定其特征碼所對應(yīng)的地址中有ADD或SUB指令,例如00018A88:XXXXX 00000088 ADD ECX 10000000我們可以將ADD ECX 10000000這段機器碼改為SUB ECX F0000000,更改完畢后保存為EXE文件即可。原 理:我們都知道1+1=2,我們也知道1-(-1)=2,上面就是利用了這個原理,其中ADD指令的就是加意思,而SUB則是減的意思。雖然被我們互換了一下,但是最終結(jié)果還是一樣的,可是換完之后殺毒軟件就不認識了。到這里,關(guān)于特征碼的查找與修改就講完了,但是除此之外呢?答案是還有許多?。∠旅嫖覀兙鸵黄鹂纯雌渌鈿⒎椒?。4.)其他免殺方法改文件頭:這里所說的改文件頭包括加頭去頭,文件加花。關(guān)于加頭去頭,我們還是用OllyDbg。用OllyDbg載入后,OllyDbg會自動停在入口點(如圖36)。

我們將頭三行機器碼復(fù)制保存起來,然后找到空白區(qū)域,用匯編的方法一一將其寫入(如圖37)。然后在后面寫入一條JMP指令,讓其跳到初始入口點的第四行,相信一直仔細看本文的朋友一定明白其原理,如果忘了的話可以看上面修改特征碼的第三種方法,原理與這差不多,修改完畢后如下所示: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改一下入口點,打開PEditor后載入文件,將入口點處的地址改為我們的新文件頭地址004A2A77(如圖38),保存后即可。

security可以針對用戶設(shè)置只讀權(quán)限嗎

術(shù)之多

Security4:授予查看定義,執(zhí)行SP和只讀數(shù)據(jù)的權(quán)限

2022-10-15 原文

SQL Server數(shù)據(jù)庫有完善的權(quán)限管理機制,對于存儲過程,其權(quán)限分為查看定義,執(zhí)行和修改,查看SP定義的權(quán)限是:VIEW DEFINITION ,執(zhí)行存儲過程的權(quán)限是:EXECUTE,修改SP的權(quán)限是:ALTER,但是該權(quán)限也能修改表結(jié)構(gòu),視圖的定義等數(shù)據(jù)庫對象。數(shù)據(jù)的讀取權(quán)限是SELECT,這個查看定義是不同的權(quán)限。對于一個數(shù)據(jù)表,如果僅授予VIEW DEFINITION權(quán)限,而沒有授予SELECT權(quán)限,那么用戶只能查看數(shù)據(jù)表的結(jié)構(gòu)(Schema),而無法查看表中存儲的數(shù)據(jù)。

在管理權(quán)限時,可以給特定的用戶授予“只能讀取數(shù)據(jù)和執(zhí)行SP,而不能修改數(shù)據(jù)”的權(quán)限,也就是,使特定的用戶只能查看數(shù)據(jù)(只讀,SELECT),只能查看定義(VIEW DEFINITION),和執(zhí)行SP的權(quán)限(EXECUTE),這樣的權(quán)限設(shè)置,既能使用戶查看到業(yè)務(wù)數(shù)據(jù),又能避免用戶私自修改數(shù)據(jù)。

對于數(shù)據(jù)的讀取權(quán)限,SQL Server內(nèi)置固定數(shù)據(jù)庫角色 db_datareader,把用戶添加到該角色中,用戶就被授予了對數(shù)據(jù)庫中所有數(shù)據(jù)(表或視圖)的讀取權(quán)限,就是說,用戶可以對數(shù)據(jù)表或視圖執(zhí)行select命令讀取數(shù)據(jù);也可以逆向思考,不允許用戶修改數(shù)據(jù),把用戶添加到固定數(shù)據(jù)庫角色 db_denydatawriter 中,這樣,用戶不能添加,更新和刪除任何數(shù)據(jù),就是說,不能對任何數(shù)據(jù)表執(zhí)行insert,updae和delete命令。這兩個數(shù)據(jù)庫角色,相當于以下兩個命令:

grant select to [domain\user];

deny update,delete,insert to [domain\user];

權(quán)限的分配分為:授予(grant)和拒絕(deny),對于已分配的權(quán)限,也可以通過回收(revoke)命令收回,權(quán)限管理是個技術(shù)活。

一,授予查看定義的權(quán)限

查看數(shù)據(jù)庫對象的權(quán)限是VIEW DEFINITION,通常數(shù)據(jù)庫對象是指:數(shù)據(jù)表,視圖,存儲過程,函數(shù)等,被授予VIEW DEFINITION權(quán)限之后,用戶只能查看定義,而無法從數(shù)據(jù)表或視圖中查看數(shù)據(jù),無法執(zhí)行SP和函數(shù)等。

1,授予SQL Server實例級別的查看定義的權(quán)限

以下代碼用于授予權(quán)限VIEW ANY DEFINITION,代碼必須在master數(shù)據(jù)庫中執(zhí)行,使指定的用戶能夠查看當前SQL Server實例中的所有數(shù)據(jù)庫對象的定義:

use master

go

grant view any definition to [domain\user]

2,授予User,只能查看當前數(shù)據(jù)庫對象的定義的權(quán)限

以下代碼用于授予VIEW DEFINITION,使指定的用戶能夠查看指定數(shù)據(jù)庫中的所有對象的定義:

use db_name

go

grant view definition to [domain\user]

3,授予User,只能查看當前數(shù)據(jù)庫的指定數(shù)據(jù)庫對象的定義的權(quán)限

以下代碼用于授予VIEW DEFINITION,通過on子句,使指定的用戶能夠查看指定對象的定義:

use db_name

go

grant view definition

on object::schema_name.object_name

to [domain\user]

二,授予執(zhí)行存儲過程的權(quán)限

以下代碼授予用戶執(zhí)行存儲過程的權(quán)限,通過on子句指定用戶只能執(zhí)行特定的SP:

use db_name

go

grant execute

on object::schema_name.object_name

to [domain\user]

如果grant execute省略on子句,表示所有的SP,這樣,用戶可以執(zhí)行數(shù)據(jù)庫中的所有SP:

use db_name

go

grant execute

to [domain\user]

三,授予用戶修改存儲過程的權(quán)限

修改存儲過程的權(quán)限是ALTER,但是,ALTER同時也能修改表結(jié)構(gòu),視圖定義等數(shù)據(jù)庫對象,如下代碼所示:

GRANT ALTER TO [domain\user]

如果僅授予用戶修改SP的權(quán)限,那么必須逐個設(shè)置,或者把SP創(chuàng)建在獨立的schema下,通過授予用戶修改schema,達到控制用戶只修改SP的目的:

GRANT ALTER

ON SCHEMA::proc_schema

TO [domain\user]

四,授予用戶查看SP的定義,執(zhí)行和修改SP的權(quán)限

通過GRANT子句,可以一次性把查看SP的定義,執(zhí)行和修改SP的權(quán)限都授予指定的用戶:

GRANT ALTER, EXECUTE, VIEW DEFINITION

ON SCHEMA::[proc_schema]

TO [domain\user]

在GRANT子句中省略O(shè)N子句,表示授予用戶的權(quán)限作用于所有的數(shù)據(jù)庫對象,包括數(shù)據(jù)表,視圖,存儲過程,函數(shù)等。

五,授予Public用戶查看定義的權(quán)限

當Login沒有映射到相應(yīng)的User時,該Login被映射到默認的Public,設(shè)置給用戶查看定義的權(quán)限,這樣,每個登陸到SQL Server實例的用戶,都可以查看定義。

use master

go

grant view any definition to public

use dbn_ame

go

grant view definition to public

六,授予用戶查看定義,只讀數(shù)據(jù)和執(zhí)行SP的權(quán)限

存儲過程 sp_msforeachdb @command 是微軟未公開的存儲過程,該存儲過程遍歷當前的SQL Server實例的所有數(shù)據(jù)庫,在每個數(shù)據(jù)庫中執(zhí)行相同的命令:

use master

go

create login [domain\user]

from windows;

go

grant view any definition

to [domain\user] ;

go

exec sp_msforeachdb

'

use [?];

if not exists

(

select *

from sys.database_principals

where name=''domain\user''

)

create user [domain\user]

for login [domain\user];

alter role db_datareader

add member [domain\user];

grant execute to [domain\user];

'

go

遍歷數(shù)據(jù)庫的功能,也可以使用游標來實現(xiàn),本文不再贅述。

參考文檔:

Run same command on all SQL Server databases without cursors

Granting View Definition Permission to a User or Role in SQL Server

Security4:授予查看定義,執(zhí)行SP和只讀數(shù)據(jù)的權(quán)限的更多相關(guān)文章

MySQL能否授予查看存儲過程定義權(quán)限給用戶

在其他RDBMS中,可以將查看某個存儲過程(PROCEDURE)定義的權(quán)限給某個用戶,例如在SQL Server中,可以單獨將查看ProcedureName定義的權(quán)限授予UserA GRANT VIE ...

查看ORACLE執(zhí)行計劃的幾種常用方法

SQL的執(zhí)行計劃實際代表了目標SQL在Oracle數(shù)據(jù)庫內(nèi)部的具體執(zhí)行步驟,作為調(diào)優(yōu),只有知道了優(yōu)化器選擇的執(zhí)行計劃是否為當前情形下最優(yōu)的執(zhí)行計劃,才能夠知道下一步往什么方向. 執(zhí)行計劃的定義:執(zhí)行目 ...

查看Job執(zhí)行的歷史記錄

SQL Server將Job的信息存放在msdb中,Schema是dbo,表名以“sysjob”開頭. 一,基礎(chǔ)表 1, 查看Job和Step,Step_ID 是從1 開始的. select j.jo ...

查看Oracle執(zhí)行計劃

1.PL/SQL解釋計劃窗口 優(yōu)點:方面 缺點:看到信息有限 2.explain_plan for 針對某個句子優(yōu)化較方便 3.sqlplus Sqlplus里輸入命令: set autotrace ...

如何查看MySQL執(zhí)行計劃

在介紹怎么查看MySQL執(zhí)行計劃前,我們先來看個后面會提到的名詞解釋: 覆蓋索引: MySQL可以利用索引返回select列表中的字段,而不必根據(jù)索引再次讀取數(shù)據(jù)文件 包含所有滿足查詢需要的數(shù)據(jù)的索引 ...

查看SQL執(zhí)行計劃

一用戶進入某界面慢得要死,查看SQL執(zhí)行計劃如下(具體SQL語句就不完全公布了,截斷的如下): call count cpu elapsed disk ...

MSSQL優(yōu)化之——查看語句執(zhí)行情況

MSSQL優(yōu)化之——查看語句執(zhí)行情況 在寫SQL語句時,必須知道語句的執(zhí)行情況才能對此作出優(yōu)化.了解SQL語句的執(zhí)行情況是每個寫程序的人必不可少缺的能力.下面是對查詢語句執(zhí)行情況的方法介紹. 一.設(shè)置 ...

查看Oracle執(zhí)行計劃的幾種方法

查看Oracle執(zhí)行計劃的幾種方法 一.通過PL/SQL Dev工具 1.直接File-New-Explain Plan Window,在窗口中執(zhí)行sql可以查看計劃結(jié)果.其中,Cos ...

查看Mysql執(zhí)行計劃

使用navicat查看mysql執(zhí)行計劃: 打開profile分析工具: 查看是否生效:show variable like ‘%profil%’; 查看進程:show processlist; 選擇 ...

隨機推薦

從零自學Java-1.編寫第一個Java程序

編寫第一個Java程序 完成工作:1.在文本編輯器中輸入一個Java程序. 2.使用括號組織程序. 3.保存.編譯和運行程序. package com.Jsample;//將程序的包名稱命名為com. ...

JSP 過濾器

JSP教程 - JSP過濾器 JSP過濾器是可用于攔截來自客戶端的請求或處理來自服務(wù)器的響應(yīng)的Java類. 過濾器可用于執(zhí)行驗證,加密,日志記錄,審核. 我們可以將過濾器映射到應(yīng)用程序部署描述符文件w ...

ASP.NET動態(tài)引用樣式表(css)和腳本(js)文件

// 引入js文件 HtmlGenericControl scriptControl = new HtmlGenericControl("script"); scriptContr ...

mySQL 約束 (Constraints)

約束用于限制加入表的數(shù)據(jù)的類型: 1.創(chuàng)建表時規(guī)定約束(通過 CREATE TABLE 語句) 2.表創(chuàng)建之后也可以(通過 ALTER TABLE 語句). 約束類型: NOT NULL(非空) UN ...

直播內(nèi)容不合規(guī)怎么辦?智能AI為您解決審核難題

背景 近些年來,視頻直播快速發(fā)展,大量的直播平臺如雨后春筍一般出現(xiàn),但是這同樣給直播內(nèi)容的監(jiān)管帶來了巨大的挑戰(zhàn),一方面國家對于直播內(nèi)容監(jiān)管的要求日益嚴格,另一方面相對于文字內(nèi)容的審核,多媒體內(nèi)容的審核 ...

selenium - pycharm三種案例運行模式

1.unittest 運行單個用例 (1)將鼠標放到對應(yīng)的用例,右鍵運行即可 2.unittest運行整個腳本案例 將鼠標放到if __name__ == "__main__": ...

dns服務(wù)器測試工具

下載地址:

ArcGIS API for JS4.7加載FeatureLayer,點擊彈出信息并高亮顯示

我加載的是ArcGIS Server本地發(fā)布的FeatureService,ArcGIS API for JS4.7記載FeatureLayer時,在二維需要通過代碼啟用WebGL渲染,在三維模式下, ...

[2018-12-15] Hello World!

這個blog以后就用來發(fā)oi相關(guān)的算法與數(shù)據(jù)結(jié)構(gòu)了 還可能想學習一點web前端的知識和一些與計算機有關(guān)的軟件和技術(shù) 可能有空大概會試試搭建blog以及一些各種軟件和c++以外的玩意

理解RHEL上安裝oracle的配置參數(shù) :/etc/security/limits.conf, /etc/profile, /etc/pam.d/login

無論安裝什么版本的Oracle,在安裝之前,都需要配置 /etc/pam.d/login /etc/profile /etc/security/limits.conf這三個文件 那這三個文件究 ...

熱門專題

VUE如何設(shè)置登陸超時和未登錄跳到登錄界面COOKIE SERVER2016 集成 SHELL FOR I 2個變量 數(shù)據(jù)庫用戶賬號密碼加密校驗 安卓PTRACE HOOK框架 OPENCV 顯示圖片內(nèi)存泄漏 VB.NET HTTP接口 靜態(tài)參數(shù)@AUTOWIRED注入不進去 QT5 UTF-8轉(zhuǎn)GBK TCL語言 如何定義三維數(shù)組 PHP 二維碼轉(zhuǎn) 四維 DELPHI CS構(gòu)架 客戶端卡 UBUNTU如何掛在EXFAT格式 AJAX連接C語言程序 使用JENKINS常見報錯匯總 POSTGRESQL判斷視圖是否存在,存在便刪除 MASK RCNN 論文 VS無法查看腳本被哪些預(yù)制體引用嗎 TCP IP通訊數(shù)據(jù)傳輸 WPF DATAGRID教程

Home

Powered By WordPress

golang程序在編譯時去掉了符號信息,怎么逆向

使用原始build編譯的大小

6,107KB

通過去除部分連接和調(diào)試,build部分參數(shù)查看結(jié)果。

-a 強制編譯所有依賴包。

-s 去掉符號信息

-w 去掉DWARF調(diào)試信息,得到的程序就不能用gdb調(diào)試了

不建議s和w同時使用。

go build -ldflags -w test.go

但是體積還是有點大

4,633KB

標題名稱:逆向go語言 go語言重構(gòu)
文章鏈接:http://muchs.cn/article2/docohoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、網(wǎng)站維護App開發(fā)、網(wǎng)站制作服務(wù)器托管、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)