逆向分析入門實戰(二)

2020-12-23 湖南蟻景

上次我們對主函數分析完成了,逆向入門分析實戰(一)那麼這次我們對子函數IsAlreadyRun進行分析。

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

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

rep stosd之前,同樣是入棧操作,我們無需仔細追究,重點關注call函數。

1. CreateMutexA函數

首先根據call ds:CreateMutexA

這一條指令便可得知調用了CreateMutex函數(註:CreateMutexA是在Ascii 環境下的,CreateMutexW是unicode環境下的)。

上次我們提到過,在函數調用之前,如果有參數需要傳遞,需要使用push先將參數從後往前入棧。那麼我們來看下call ds:CreateMutexA前面的三條push指令分別代表什麼意思?如果查呢?這就用到非常常用的一個文檔--msdn文檔,這個文檔是微軟寫的,介紹了Windows API函數,基本上遇到的函數都可以在這裡查到,比如CreateMutex這個函數對應的地址是:

從官網可以看到對應的函數解釋,詳細介紹了這個函數的作用,參數,返回值等:

三個參數lpMutexAttributes,bInitialOwner,lpName中第三個參數lpName的意思是互斥對象的名稱,另外兩個在此處不展開介紹了,感興趣的可以去查看msdn文檔。現在我們再回過頭來仔細看一下ida Pro給的反彙編代碼:

是不是和MSDN上的三個參數反過來就對應上了?第一條push指令對應的是lpName這個參數,所以根據ida pro右邊給出的備註,可以得知這個互斥對象的名稱是TEST。上一次也提到過,函數調用完成後,VC中,會使用eax寄存器來保存函數的返回值。在這裡也是一樣的,call ds:CreateMutexA的返回值會存入eax寄存器。

2. 跳轉分析

我們繼續分析下面的彙編代碼:

根據call __chkesp可知是調用了棧平衡錯誤檢測函數,這裡我們無需理會。之後,

mov指令將調用CreateMutexA函數的返回值eax先移動到ebp+var_4的地址上,之後又與0對比,如果兩者相等,則跳轉到 loc_40107D位置。即,如果CreateMutexA函數的返回值為0,則跳轉 loc_40107D位置。下面分兩種情況進行討論,一種是CreateMutexA函數的返回值為0,一種是不為0。2.1. CreateMutexA返回值為0

首先分析CreateMutexA函數的返回值為0的情況:

跳轉到這個位置之後,執行xor eax,eax這條指令,上次也提到過xor eax,eax直接會將eax的值設置為0,這是很常見的一種將eax置為0的方式。

執行完這條指令後,會到loc_40107F位置,根據pop出棧指令、call __chkesp、retn等指令可知,這是子函數IsAlreadyRun調用完要返回主函數。

那麼,IsAlreadyRun函數的返回值是多少呢?返回值存在eax中,由前面可知,eax在CreateMutexA函數的返回值為0情況下,eax值為0(xor eax,eax的作用),所以IsAlreadyRun函數的返回值也是0,即IsAlreadyRun返回值為false。對應的C語言代碼:

即,當hMutex = ::CreateMutex(NULL, FALSE, "TEST")執行後得到的hMutex為0時的場景,子函數IsAlreadyRun直接執行return FALSE;

2.2. CreateMutexA返回值不為0

之後,分析CreateMutexA函數的返回值不為0的情況:

此時,由於eax不為0,所以不會跳轉到loc_40107D這個位置,而是執行call ds:GetLastError執行調用GetLastError函數。後面又執行call __chkesp 調用棧平衡錯誤檢查函數,我們在這裡無需理會。之後執行cmp eax,0B7h指令,由於GetLastError函數的返回值存儲在eax中,此處其實是在看GetLastError返回值是否等於16進位的B7,對應10進位的183。

如果eax的值不等於183,那麼跳轉到loc_40107D,之後和上一種情況一樣,將eax置為0,然後返回主函數。

如果eax的值等於183,則執行mov eax,1指令,然後跳轉到loc_40107F位置,返回主函數。

那麼這個183到底代表什麼意義呢?通過查詢MSDN文檔,我們可以得知,它剛好對應常數ERROR_ALREADY_EXISTS。

對比我們寫的C語言代碼:

也就是GetLastError函數的返回值等於ERROR_ALREADY_EXISTS時,返回true;否則,返回false。到此為止,整個代碼分析完畢。感謝各位耐心的閱讀,如有不當之處,歡迎指出。

參考書籍:

《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月。

實驗推薦區

合天網安實驗室相關實驗推薦:逆向破解-CrackMe系列

相關焦點

  • [系統安全] 二.如何學好逆向分析及呂布傳遊戲逆向案例
    系統安全系列作者將深入研究惡意樣本分析、逆向分析、攻防實戰等,通過在線筆記和實踐操作的形式分享與博友們學習,希望能與您一起進步。前文作者先帶領大家學習什麼是逆向分析;這篇文章將繼續普及逆向分析基礎知識,告訴大家如何學好逆向分析,並結合作者經驗給出逆向分析的路線推薦,最後給出呂布傳遊戲逆向案例。
  • 二進位安全學習規劃指南
    simple Unix-like teaching operating system系統的加載與引導用戶態和內核態、系統調用、中斷和驅動進程於內存管理、文件系統虛擬機作業系統的設計與實現NT 6.828 - Operating System Engineering其他基礎課程——系統軟體開發基礎漏洞挖掘與利用快速入門
  • 逆向入門分析實戰(一)
    1.木馬分析入門大家好,我最近從Web安全開始學習二進位安全,分享一下自己學習過程的收穫和心得體會。由於是入門的內容,所以對於二進位大佬來說這很簡單,所以本文主要面向的對象主要是和我一樣一直做Web安全,又想入門二進位安全的人。
  • 戒為良藥第84季:從入門到精通之斷念實戰 (選摘)
    這季專門講講斷念實戰,斷念是戒色最實戰的部分,不管是何種類型的戒色文章,最終都繞不開這個核心問題。就像一個拳手,在平時不斷訓練,到最後還是要上臺檢驗。戒色不是紙上談兵,戒色也不是請客吃飯,戒色更不是花拳繡腿,戒色就是真刀真槍的實戰,戒色就是和自己的心魔鬥爭!這是你死我活的戰鬥!戒色就是戰爭,戰場就在你的腦海中。邪念冒出來了怎麼辦?念頭上來了怎麼辦?
  • 二階魔方入門解法
  • 全方位黑客養成從入門到精通網際網路安全計算機網絡100+本
    今天給大家分享的是Joker耗費數周從網上收集到的黑客攻防入門到精通資料,100+本電子書,全PDF高清。資源較老,酌情使用。《MK_黑客攻防大全》《MK_黑客攻防輕鬆入門》《MK_黑客攻防入門》《MK_黑客攻防入門與實戰》《MK_黑客攻防入門與提高》《MK_黑客攻防實戰從入「門到精通》《MK_黑客攻防實戰入門》《MK_黑客攻防實戰入門與提高》《MK_黑客攻實戰入門》《MK_黑客社會工程學攻擊檔案袋
  • 中國股權實戰諮詢落地導師張哲鳴簡介
    張哲鳴,男,北京慧憬教育科技有限公司董事長,慧憬股權激勵研究院院長,中國股權激勵實戰專家,中國股權實戰諮詢落地導師。人物經歷2007年04月12日成立北京慧憬教育科技有限公司2019年11月出版《股權激勵從入門到精通》張哲鳴從事中小企業的股權激勵,股權設計,股權融資培訓和諮詢落地服務,擁有豐富的諮詢和實戰經驗。
  • 漩佐櫻:史上第一次實戰!霧隱中忍vs卡卡西班!四對二?是二對二
    作為一個復仇者,佐助一心一意都放在變強二字上。而實戰絕對是鍛鍊自我、提升自我實力的絕佳機會!所以,面對這種程度的實戰,他不僅不會害怕,還會感到興奮,這是一種挑戰的興奮。所以,新人第一不僅在敵人手下救下了鳴人,還在危急時刻護住小櫻和達茲納。這一戰,佐助真的讓戀愛氣息在泛濫,剛而溫柔,更別說他還那麼帥氣!
  • 水泥地實戰球鞋推薦!米切爾二代降價接近一半!
    米切爾二代 外場水泥地實戰的最終答案,小夥伴們提及最多的就是米切爾一代。 而近段時間米切爾二代多個配色相繼發售,首發的2K限定配色的價格也已經來到了400+的水平,或許我們可以考慮米切爾二代了。
  • 太極實戰與套路的關係雜談
    「太極」二字包羅萬象,事物之軌跡、宇宙之法表、生靈之命脈即建立在太極之上、陰陽之間。既然「太極」二字包羅萬象,太極拳自然也就博大精深。 太極拳學是以易學理論為依據,它綜合了佛學的空無、道學的陰陽、儒學的中庸思想,以人體的運動形式來展現著這些文化的內涵,所以,這種人體的運動表現形式也就是太極拳。太極是宇宙文化的總結,而拳為「兵」、為「用」。
  • 2016合集目錄【程序化廣告實戰】
    (數字營銷2017職業雞湯系列)獨立DSP未來預測(上)——數字營銷2017職業雞湯獨立DSP未來預測(中)——數字營銷2017職業雞湯獨立DSP未來預測(下)——數字營銷2017職業雞湯從「Master」橫掃人類看數字營銷未來【行業趨勢】入門系列:
  • 新手如何入門無人機航拍?
    但是買架無人機簡單,真想拍出好作品、拍出電影感可不容易哦。想要充分利用好無人機,拍出絕美鏡頭,需要我們進行大量的操控、飛行練習,而且練習的時間、地點和方法都很重要。本次無人機世界匯總了幾個比較火的航拍課程給大家學習,有興趣的點擊下方圖片就行觀課吧!!!甄冉,中國民航大學畢業,自2013年開始從事無人機相關工作。
  • 從入門到精通:《熹妃傳》隨從特性系統詳解
    入門:特性開啟須知 特性類似於技能與天賦,能在戰場上給出增益等宮鬥效果,唯有資質較高的隨從身上才能顯出這份得天獨厚。 突破:特性進階法門 習得了一門特性,僅僅止步於入門可不夠。隨從特性欄擁有入門、初級、中級、高級、究極五個階級,使用特性升階丸可以提升階級。
  • 妒火技能實戰演示
    在鎧島dlc中新增了不少新內容,比如新精靈、新技能等,這裡給大家帶來了寶可夢劍盾妒火技能實戰演示,一起來看下吧。 寶可夢劍盾妒火技能實戰演示 寶可夢劍盾雙打妒火技能實戰演示 寶可夢劍盾妒火技能實戰演示為大家分享到此,祝大家遊戲體驗愉快。
  • 美劇學英語入門推薦
    坊間傳聞——《Friends》適合初看美劇人入門,傲慢與偏見適合初讀英文原版書人接觸,美則美矣,其實只是一廂情願罷了——情景喜劇可絕對不能算是入門好材料
  • 迷蹤拳的前身是燕青拳,其是實戰派武道!
    燕青門功夫以實戰著稱,講究的靈活度和實用性也是靠重複練習熟能生巧和實戰造就的,練習方式有擊打木樁、吊袋、群木陣、對練、比賽等。戴老拳師講起燕青門來,津津樂道。並演練燕青十六勢和飛虎拳,少林拳,以及九節鞭等。二、起源與發展燕青門又稱燕青拳,為梁山好漢浪子燕青所傳,傳說燕青拳自達摩創拳至今已有1400多年的歷史。
  • 王者榮耀:小喬實戰先手二技能可開團,沒有機會就留著自保!
    【摘要】小喬這一位法師英雄操作難度並不高,並且因為可愛的外形深受很多女性玩家的喜愛,但是這一位英雄因為其技能機制的原因她的傷害輸出能力是十分不錯的,尤其是你到達後期的時候不僅爆發傷害不錯並且還具有一定的poke能力,後期一技能刮中敵方脆皮將其打成殘血也是很常見的,團戰當中還能擁有可觀的範圍傷害,你要說她唯一不足的可能就是沒有位移技能,但是有二技能的擊飛控制在手
  • 《劍網3》pve入門攻略 重製版必看pve技巧
    劍網3pve入門解析,莫問自劍膽琴心版本以來,一直是PVE內功輸出心法的佼佼者。從版本初期因為加速屬性不足、沒有套裝屬性的唳風、凌冬流派,到後來的低內防下的爭簇、疏曲流派,以及高內防下的爭簇、書離流派劍網3pve入門解析
  • 《公主連結》會戰機制是什麼 會戰機制與入門講解
    導 讀 公主連結是很多玩家喜歡的遊戲,本次就為大家帶來了公主連結會戰教學,也是會戰機制與入門講解,非常全面的內容
  • 編劇實戰課程開課通知!
    我們的編劇實戰課程,具備系統化、專業化、讓劇本創作更輕鬆、更高質量。內容內容包括編劇獨立人格的養成、編劇技能的培訓、劇本創作實戰規律、類型片等劇本創作理論、中國優秀影視劇劇本賞析、中國編劇目前現狀及編劇權利分析等,不僅讓更多人系統而專業的學習編劇課程,更提升編劇素養。乾貨從入門到進階再到實踐,編劇課不同版型讓你學到不同能力。