flag: aaaaaaaaaaaaaaaa
題目流程
在 main 裡面,題目會先要你輸入密碼
然後檢查密碼是否正確
正確的話會印出 Access Granted!
並且執行 Unlock_door
錯誤的話會印出 Invalid password.....
解題想法
首先,在 main 裡面可觀察到 r15 是決定成功的關鍵
而 tst r15 上方的指令是 check_password
因此,我們可以猜測 check_password 會改變 r15 的值
果不其然,check_password 在 ret 前有 clr r15 和 mov #0x1, r15
至於會執行哪個則是由 cmp 0x9, r12 決定
因此,我們將目標轉向 r12 讓他等於 0x9
往上看, 會發現四道指令,功能似乎是將 r15 指到的位址的值 mov 一個 byte 到 r14
然後增加 r12 的值,接著由 r14 是否為 0 決定要不要跳出迴圈
因為,r12 一開始是 0 ,所以得讓迴圈執行 9 次
而 r15 的值在進入 check_password 前被設為 sp
且 sp 指向的是密碼的位址
因此,若將密碼輸入任意 8 個非 0 byte 並讓第 9 個 byte 為 0
就能讓 r12 的值等於 0x9 進而使得 r15 被設成 0x1
全站熱搜