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

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大神(偽) 的頭像
    大神(偽)

    大神的世界

    大神(偽) 發表在 痞客邦 留言(0) 人氣()