您好,登錄后才能下訂單哦!
題目:見附件
這是最后一題,難度加倍。
看題目意思,應該是模擬一個下載者,從網上下載一個shellcode然后執行。要求修復這個shellcode然后獲得key。
OD載入MFC_ASM.exe,F9出現程序界面。
由于平時寫C程序訪問網絡都直接用socket,找了一下竟然沒有發現socket調用,看了導入表,發現原來使用wininet.dll提供的http封裝。
(這里不知道有沒有更好的方法能讓OD跟蹤到button按鈕的用戶代碼調用,還請大牛不吝賜教)
直接按button,出現錯誤:
此時的棧情況:
BBBBBBBB和DDDDDDD數據和Exploit.html文件里面開頭的是一致的,可見程序已經將Exploit.html下載并拷貝到了堆棧地址0012DF30。
為了跟蹤到button按鈕的處理函數,還是從字符串入手,隨便翻翻發現:
此處有http協議的引用,下斷點后,按button能停下來。一路F8,可以跟到00401519處,此處的retn指令返回到了shellcode中的錯誤地址。
需要注意的是,shellcode的起始地址是0012DF30,但00401518處的leave指令,會將esp指向0012E130。這個地址里面的值,就是前面錯誤對話框中出現的值。
之所以要指出這個,是因為當前的esp指向了shellcode內部,如果執行shellcode代碼,會覆蓋掉shellcode的一些區域,導致出錯。這就就是需要修正的第一個有問題的地方。
下面就是要分析Exploit.html這個文件了,載入IDA,進行靜態分析。由于對windows下的shellcode不是很熟悉,這里花了非常多的時間。關鍵點就是如大牛提示的,需要一個一個函數分析,一段一段shellcode中的字節尋找。由于這個shellcode的復雜度,修復實際上就是尋找到一個合適的入口點,然后在OD中將EIP指向它,直接執行就可以彈出key。
函數還是比較容易尋找的,一般以push ebp開頭,后面跟著sub esp(或add esp)。IDA能分析出一些函數,許多還是要自己去尋找。
這里IDA的Xrefs功能(快捷鍵X)實在是太有用了。
最終分析下來的函數列表:
這里幾個關鍵函數我都做了注釋,里面有非常多的代碼值得學習,比如fs:[eax]這種獲取kernel32基址的方法,以及建立shellcode的導入函數表,運行時動態獲取當前指令地址,從而實現在shellcode中尋址與shellcode加載地址無關。
這里幾乎找全了shellcode中的所有函數,通過Xrefs分析,還是沒有哪里調用了FindFunctions等關鍵函數,也就是沒有找到入口。只能在IDA代碼text視圖下,一點點的看,終于在00000CDD處找到一段沒有定義的數據字節。按C,定義為code后:
Great!入口點應該就在這里了。因為其他地方出了字符串表和00字節,沒有多余的疑似未定義代碼了。
OD載入,斷點在00401518處,修改EBP為0012DF30。F8到00401519,修改當前棧上0012DF34處的值為0012DF30+CDD。然后F9,直接彈出對話框,key就在這里啦!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。