逆向入門分析實戰(一)

2020-12-23 湖南蟻景

1.木馬分析入門

大家好,我最近從Web安全開始學習二進位安全,分享一下自己學習過程的收穫和心得體會。由於是入門的內容,所以對於二進位大佬來說這很簡單,所以本文主要面向的對象主要是和我一樣一直做Web安全,又想入門二進位安全的人。本次我學習的案例是木馬和病毒常用的一個技術:確保只有一個病毒或者木馬在系統中運行,即運行單一實例。對於病毒和木馬而言,如果多次重複運行,會增加暴露的風險。所以要確保系統中只運行一個病毒或木馬的進程。

1.1.正向編寫C代碼

要實現運行單一實例,一種常見且簡單的方法是通過創建系統命名互斥對象實現的,這種方法主要是利用CreateMutex函數,通過該函數我們也可以查看是否已經有一個進程運行了。那麼,如果通過CreateMutex函數得知是否已經有一個在運行的進程了呢?

下面簡要介紹下CreateMutex函數,它的功能是創建或者打開一個已命名或者未命名的互斥對象。

關於它的返回值,如果函數成功,則返回值是新創建的互斥對象的句柄。如果函數失敗,則返回值為NULL。要獲得擴展的錯誤信息,請調用GetLastError。如果互斥鎖是一個已命名的互斥鎖,並且該對象在此函數調用之前就存在,則返回值是現有對象的句柄,GetLastError返回ERROR_ALREADY_EXISTS。

簡單點來說,就是如果CreateMutex函數的返回值不是NULL,並且調用GetLastError函數後,返回值是ERROR_ALREADY_EXISTS,那麼可以判定已經存在了一個在運行的進程。用C語言代碼實現如下:

使用VC++6.0完成編譯連結後生成可執行文件,雙擊運行,顯示如下:

在不關閉上述進程的前提下,再次雙擊生成的可執行文件,顯示如下:

可以看出當系統中運行第二個進程的時候,輸出了Already Run!!!!說明程序已經成功地判斷出重複運行了。

1.2.逆向分析

下面我們就對這個程序進行逆向分析,我們需要對主函數和子函數分別進行逆向分析,這次先分析主函數。

關於學習的方法,我的收穫是在初學階段,我們先分析自己寫的代碼,分析完之後再進行印證,慢慢地就可以脫離源碼並嘗試分析其他未公開源碼的程序流程。

在學習過程中,十分重要的一點是:要分清主次。什麼意思呢?

學習彙編語言和逆向,我們完全沒有必要逐條指令去仔細閱讀所有的代碼,重要的是從整體上理解程序究竟做了哪些操作。彙編語言也是一種程式語言,平常大家也不會去一行一行地仔細閱讀別人寫的大量代碼,除了必須要理解的重要部分花時間仔細讀一讀,剩下的部分基本都是一帶而過,只要大體上理解程序在做什麼事就好了。逆向工程也是一樣,「重要的部分花時間仔細理解」「其餘部分大概知道怎麼回事就好」這兩條原則同樣適用。

那麼哪些是重要的呢?在病毒木馬分析中,其中一點比較重要的是分析call函數,只要將這個程序所調用的函數分析清楚了,那麼就知道這個病毒木馬在做什麼了。與此同時要弄清楚它的邏輯結構,比如什麼時候跳轉到哪執行。接下來我們首先對主函數進行分析。

1.2.1.主函數:

主函數的C語言代碼如下圖所示:

下面對其彙編代碼進行分析:

_main_0 proc near

var_40= byte ptr -40h

push ebp

mov ebp, esp

sub esp, 40h

push ebx

push esi

push edi

lea edi, [ebp+var_40]

mov ecx, 10h

mov eax, 0CCCCCCCCh

rep stosd

以上代碼完成所有的函數入棧操作,每個函數開始時都會有這樣的操作,這裡我們無需過分細究,如感興趣,對這段代碼詳細的分析可參考《C++反彙編與逆向分析技術揭秘》p150,我也將其主要的內容貼出來了:

關於這段內容中補充介紹兩個指令,其中,xor eax,eax直接會將eax的值設置為0,這是將寄存器設置為0最常見的方式,cmp指令是條件指令,詳細內容如下圖所示:

這段內容在這裡暫時只需了解,無需深究,等需要的時候再去研究也不遲。之後,到了需要認真理解的地方了,下一條的指令是

call sub_401005

它的意思是調用子函數sub_401005,在這裡其實對應的是我們編寫的IsAlreadyRun函數。

需要補充的是在函數調用時,如果有參數需要傳遞,需要在call指令之前,使用push先將參數從後往前入棧。這裡因為無任何參數傳遞,所以在調用之前,無需使用push指令將參數入棧。後面還會詳細介紹是如何從後往前入棧的,這裡需要先記住這個知識點。

還有一個要記住的是在函數調用完成後,VC中,會使用eax寄存器來保存函數的返回值。接下來的一條指令是

test eax, eax

關於test指令,只需記住若eax為0,則zf標誌位會設置為1,此時eax中的值是上一條指令的返回值,若對test指令感興趣可參考如下解釋:

接下來的指令是

jz short loc_4010E0

jz是跳轉指令,即jump zero,即當零標誌位ZF=1的時候跳轉到 loc_4010E0這個位置執行,此時也就是上一個指令test eax,eax得到的操作使得ZF=1,也就是eax=0,由於eax保存的是子函數的返回值,所以我們得知子函數的返回值為0。由我們編寫的C語言代碼可知,此時對應的是IsAlreadyRun函數返回結果為false,和我們的分析相對應。跳轉到該位置後:

loc_4010E0: ; "NOT Already Run!\n"

push offset aNotAlreadyRun

call _printf

add esp, 4

可以看到的call _printf 指令,這將會調用printf輸出函數。由於printf需要傳遞參數,所以在call _printf之前,需要先執行push的操作。我們將滑鼠放在aNotAlreadyRun上可以看到對應的字符串與loc_4010E0:後的備註信息"NOT Already Run!\n"一樣,如下圖所示:

所以得出結論,若子函數sub_401005的返回值為0時,跳轉到loc_4010E0位置,將會輸出"NOT Already Run!\n"。與我們編寫的C語言代碼相符合。

那麼,若子函數sub_401005的返回值為1時,會怎麼樣呢?

此時,會走到左邊的執行框內,不會跳轉到右邊。同理,這裡將會輸出"NOT Already Run!\n"字符串。執行完成後,左右兩邊的內容都會到loc_4010ED這個位置繼續執行:

這段內容看到有call ds:Sleep指令,此處是調用了Sleep函數,對應的是我們C代碼中的Sleep(10000):

由於要傳遞參數,所以需要先將參數入棧,即push操作,可以看到在call ds:Sleep指令之前,有push 186A0h 指令,將滑鼠放置在186A0h上,右鍵可觀察對應的十進位:

剛好也是100000,所以和我們編寫的C代碼也剛好符合。之後,使用pop和call __chkesp等指令,完成出棧、檢查棧平衡等函數返回工作。

目前,關於主函數的分析已經完成,下篇我們一起進一步對子函數進行詳細的分析。

參考書籍

《Windows黑客編程技術詳解》甘迪文著--北京:人民郵電出版社,2018年12月。

《C++反彙編與逆向分析技術揭秘》錢松林,趙海旭著--北京:機械工業出版社,2011年9月。

《惡意代碼分析實戰》 (美)Michael Sikorski / Andrew Honig 著,諸葛建偉,姜輝,張光凱譯 -- 北京:電子工業出版社,2014年4月,原書名:Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software。

《彙編語言》王爽 著--2版,北京:清華大學出版社,2008年4月。

實驗推薦區

合天網安實驗室相關實驗:ARM彙編教程

相關焦點

  • 逆向分析入門實戰(二)
    上次我們對主函數分析完成了,逆向入門分析實戰(一)那麼這次我們對子函數IsAlreadyRun進行分析。跳轉分析我們繼續分析下面的彙編代碼:根據call __chkesp可知是調用了棧平衡錯誤檢測函數,這裡我們無需理會。
  • 《公主連接》亞裡沙怎麼樣 亞裡沙實戰分析
    亞裡沙在遊戲裡被玩家們親切的稱為鴨梨瞎,是由於她的技能實在是太容易MISS了,那麼這個缺點會導致亞裡沙實戰拖後腿嗎?想知道的小夥伴就進來看看吧。 公主連接亞裡沙實戰分析 各位... 公主連接亞裡沙好用嗎?
  • 帕斯卡契約泰倫斯實戰分析 泰倫斯怎麼玩
    剛剛小編給大吉介紹了關於泰倫斯的天賦技能的具體作用,以及在實戰中的應用,那麼接下來我們就來看看泰倫斯的具體實戰玩法究竟是什麼樣的,我們在後期是否要更換角色,而他的優點又是什麼吧。 在實際戰鬥匯總,對於技能的選擇,如果還是不清楚,那麼不如去前文看看,我們接下來就來看看要怎麼打吧。
  • 實戰:以語音產品為例,教你寫競品分析
    02 產品經理競品分析的基本流程對於產品經理而言,不同企業的風格不同,競品分析的側重點也不同。有關於產品經理的競品分析文章,也是仁者見仁。目前市面上也缺少產品競品分析的一套理論聯繫實際的實戰體系。對於產品經理,尤其是剛入行的產品經理而言,對產品進行競品分析往往無從下手。
  • 火影忍者:二代土影無實戰分析,分身騙替身,大招收割
    大家好,相信已經有很多的小夥伴知道新上架忍法帖S忍的技能吧,但大家知道他的技能實戰分析嗎,之前的還沒出的時候,猜測他的打法是和金角銀角差不多的,
  • 《寶可夢劍盾》單雙打天罩蟲攻略 配招及實戰分析
    導 讀   寶可夢劍盾單雙打天罩蟲配招及實戰分析   寶可夢劍盾中的天罩蟲是唯一一個蟲+超屬性的寶可夢
  • 《騎馬與砍殺2》庫賽特可汗親衛裝備一覽 實戰強度分析
    庫賽特可汗親衛是《騎馬與砍殺2》中強勢的兵種之一,武器比較優秀,不過彈藥比較少,一場戰鬥大多是肉搏,下邊就給大家帶來「zzx700h」分享的庫賽特可汗親衛裝備屬性和實戰強度分析,大家可以來看一看。庫賽特可汗親衛實戰強度分析裝備如下使用說明:我是很喜歡這個兵的,但實際上優勢不高。
  • 《騎馬與砍殺2》帝國精銳具裝騎兵裝備一覽 實戰強度分析
    帝國精銳具裝騎兵是《騎馬與砍殺2》當前版本最強的騎兵,裝備屬性屬於最頂級的,極其擅長肉搏,不過衝刺比較弱,下邊就給大家帶來「zzx700h」分享的帝國精銳具裝騎兵裝備屬性和實戰強度分析,大家可以來看一看。
  • 崩壞3:「白頭髮」都是親女兒,深入分析卡蘿爾的實戰玩法
    我們的新晉女武神卡羅爾也繼承了這一特性。那麼,今天,我想給大家帶來的內容就是破甲小能手,後崩壞書中的白頭髮。一.卡蘿爾女武神背景首先我們都知道,卡蘿爾是崩壞3的開放地圖後崩壞書的一個角色。她叫做卡蘿爾·佩珀,是繼崩壞戰爭之後新聖芙蕾雅學園的在校生,同時是天命對崩壞特攻小隊隊員。她在後崩壞書的作戰任務中工作為偵查和潛入兩項工作。
  • 《陰陽師百聞牌》跳跳妹妹特點分析 新式神跳跳妹妹技能實戰詳解...
    陰陽師百聞牌跳跳妹妹新式神,在這個版本中能夠突出很強力的實戰效果哦,那麼具體該式神的強度解析內容就讓九遊小編來告訴大家吧~ 陰陽師百聞牌新式神跳跳妹妹技能 先說身材戰鬥出擊雙火這個好理解,開局36身材足夠超模了,當然代價是笨重,但是法術居然沒有!
  • 波浪理論研究室結合KDJ指標,波段交易戰法,大盤走勢分析實戰應用!
    (一)、消息面,波浪理論研究室結合KDJ指標,波段交易戰法,大盤走勢分析實戰應用 1、截止2020年12月14日周一,上證指數報3369.12點,上漲0.66%,成交額3162.29億。深證成指報13692.13點,上漲1.01%,成交額3935.48億。
  • 公主連結真步值得培養嗎 真步PVP及PVE實戰分析
    下面帶來公主連結真步PVP及PVE實戰解析,希望對各位小夥伴們有所幫助。 公主連結真步值不值得培養?
  • 崩壞3安娜聖痕怎麼樣 安娜聖痕冰八實戰分析攻略
    安娜聖痕冰八實戰怎麼樣?下面就來和小編一起看看吧。 實戰分析 因為安娜三件套效果很強,如果理律和勿忘沒有拿到下位,大概率是沒辦法打出畢業效果的,對於她們倆來說,必須三件套,否則不如傳統畢業。
  • R語言數據實戰 | 文本分析
    我們曾在《菜鳥專欄|網絡小說排行榜分析》中對此進行過分析[ 進入狗熊會公眾號,輸入關鍵詞「網絡小說」查看分析。],希望解讀哪些因素可能影響到一部網絡小說的人氣。數據變量包括:小說類型、評論數、總字數、評分等。其中,小說類型變量就是一個典型的簡單文本——詞語(見表1)。仔細觀察這一變量可以發現,儘管該變量以文本的形式出現,但實際上它是由幾個有限類別的詞語所構成的。
  • 【實戰交易密碼】KDJ指標、技術指標背離、阻力位和支撐位實戰分析...
    第十三章KDJ指標實戰應用技巧 這裡選擇一個短期趨勢交易指標KDJ,作為整個交易系統和循環周期趨勢策略的一部分進行分析判斷。KDJ是 股民常用的技術指標,對於短線買賣有一定的參考作用。
  • 空手道實戰五個關鍵
    為了找到答案,我們必須仔細研究空手道,分析它和人們說的現代武術到底有什麼差異。如果只進行粗略的比較,結論似乎並不那麼肯定:因為現代人都喜歡從運動健身的角度來詮釋空手道,其中所剩的可用於實戰的東西非常少。用於競賽,這些完全夠用了;但要去對付一個在街上遇到的劫匪,恐怕就不那麼容易了。   在比賽中,突然一掌如果得到決定性的分數,那你就肯定獲勝了。但在實戰中,卻並非如此。
  • Python數據分析實戰:TMDB電影數據可視化
    出品:Python數據之道 (ID:PyDataLab) 作者:葉庭雲編輯:Lemon一、數據預處理本文將以項目實戰的形式,對 TMDB電影數據進行數據分析與可視化實戰># 讀取電影數據  指定引擎  不然會報錯誤df = pd.read_csv('tmdb_5000_movies.csv', engine='python')df.head()# 由於數據集中包含的信息過多,其中部分數據並不是我們研究的重點,所以從中抽取分析要用的數據
  • 仁王2毗沙門天恩寵實戰使用評測分析攻略
    相信有許多的玩家都很想了解仁王2毗沙門天恩寵實戰使用評測分析攻略,畢竟仁王2毗沙門天的恩寵怎麼樣度咱們幫助的確很大,仁王2完全版已經確認將登陸steam平臺,很多玩家對仁王2還不是很了解吧,下面小編就帶來仁王2毗沙門天恩寵評析,一起來看看吧。
  • 【攻略】赫利貝爾實戰分析 — Soyo無月 混服76
    下面介紹她的技能:斷瀑 50%機率隨機攻擊一個敵人;造成172%+3206~206+10000的冰元素傷害,淨化自身減益效果和目標的增益效果一回合。但從技能介紹可以看出赫姐是一枚靈系單體輸出卡牌,還帶有類似於牧師類的淨化技能、並且這技能對對方卡牌同樣有效。
  • 反思:詠春拳為什麼不能實戰?傳統武術為什麼不能實戰?
    譯自《武術世界》詠春拳在實戰中真的有用嗎?這是個有趣的問題,不僅是外行人有這樣的疑問,更重要的是,很多詠春門人也會這樣問。這反映出了詠春在當下面臨的一個現實問題。一方面,詠春拳宣稱自身是一種具有毀滅性的近身格鬥體系,但是另一方面,詠春帶給很多人的感覺是技法在實戰中很難發揮出來,於是就造成了名不副實或者沒有作用的結果。為什麼會這樣?