HackTheBox - Debugme
- Challenge Scenario
A develper is experiementing with different ways to protect their software. They have sent in a windows binary that is suposed to super secureand really hard to debug. Debug and see if you can find the flag.
Recon
這一題沒有很難,但我完全猜錯作者出題的方向所以想了很久,有時候猜對方向比實力更重要。首先靜態的部分看了很久也沒啥想法,這時候有幾個方向可以猜
- 在main之前的Entry Point搞不好有其他操作
- 靜態看到的東西不一定runtime也一樣
- 有沒有什麼是靜態反編譯不出來的地方
- Anti-debug的判斷
基於以上的方向眾多,我就先用動態看一下並且直接執行在VM中看看實際跑起來會有什麼變化
1 | |
程式print出了什麼東西看起來應該和malware無關,所以動態跟的時候就可以先想辦法bp在print之前,看他有什麼樣的操作。可以善用靜態的[Ctrl+E]的功能找尋Entry Point
一開始會斷在0x4010F9 → jmp _mainCRTStartup_0(0x408904)
到這邊可以在靜態中看到反編譯的操作
1 | |
如果實際動態跟,會發現在下面的地方不斷在xor某一段program的decode,那就是0x401620~0x401791共370 Bytes,這是很常見的落地方是
1 | |
decrypt完之後就會發現靜態的地方已經把這一段看成main function,但完全反編譯不出來
之後的分析有兩種方式,那就是把decrypt完的東西,把落地的東西dump下來再丟到靜態看,不然就是直接繼續動態跟,一開始我選擇直接patch然後開靜態跟,但如果仔細看動態的寫法,他是在 0x4013E5 的地方直接call 0x401620,然後跳過去,所以沒有接calling convention,也就是還要手動修過,太麻煩了
繼續跟0x401620
在下面標住的地方要特別注意,他應該是一段anti-debug,所以可以手動更改eax的值,反正只要小於0x3E8(1000)就好
1 | |
另外,看了1的說明才發現其實前面也有一系列的anti-debug,只是我都習慣把x64dbg的scylla hide的各種anti-anti-debugger feature打開,所以就順順過了
接著看後續會經歷一些eax的操作後,push到stack,接著會看到也有一段loop
1 | |
不需要去看他push了什麼,只要知道這也是一段decrypt的過程,而他在decrypt的就是stack上剛剛push上去的那些data,我們只要在data windows上去看就好了
1 | |
Flag: HTB{Tr0lling_Ant1_D3buGGeR_trickz_R_fun!}