> [name=Curious] ## 思路和解法 把 `chal` 下載下來之後先丟進 IDA 裡面看看 ![](https://hackmd.io/_uploads/B1aiAAvY3.png) 可以發現這支 binary 會讀進來一段 flag,然後把 flag 丟進一個函數去驗證這段 flag 是否是正確的。如果我們點兩下去看 `sub_2A2B` 這個函數的反編譯碼,可以發現他又呼叫了另一個函數,如此大約會有將進 200 個,所以說你如果手動點差不多 200 次就會看到真正的驗證函數。 這些函數都是直接去呼叫下一個函數,在 symbolic execution 中並不會產生分支(會產生分枝的會像是 `if` 之類的 code),所以我們判斷有可能可以用 angr 解這題(或是直接從題目的 Hint 中知道此事)。 稍微閱讀 angr 的[文檔](https://docs.angr.io/en/latest/quickstart.html)後可以知道,這一題會因為 flag 的正確與否輸出 `Great!!!` 或 `NONONO!!!`,所以可以設置輸出 `Great!!!` 為正確的條件。 Solve Script : ```python= import angr proj = angr.Project('./chal') simgr = proj.factory.simgr() simgr.explore(find=lambda s: b"Great" in s.posix.dumps(1)) print(simgr.found[0].posix.dumps(0)) ``` {%hackmd M1bgOPoiQbmM0JRHWaYA1g %}