Simple Reverse - 0x26(2023 HW - Banana Donut Verifier)
Source Code
:::spoiler Source Code
1 |
|
:::
Recon
初步的基礎操作逆完之後,主要流程是這樣:
- 先輸入1023個char
- 他會對這1023個char進行一些操作外,主要是運算甜甜圈怎麼畫(對float運算sin和cos)
- 把我們的input丟到verification function
- 把原本儲存在程式碼的key也丟到verification function
- 比對兩個return的結果
- 一樣就吐
Donut likes your input!! :D
我這一題的想法是直接用上一次HW(crackme_vectorization)的思維嘗試找出他的邏輯,以下實驗結果都是在進入verification function之前的user_input
- 首先我如果全部輸入\x00
1
23D 3A 8B 8A 8A 8A 89 89 88 88 88 88 59 56 54 54 54 56 59 59 27 56 56 57 4B 4B 48 48 49 49 4E 4E 4B F9 F9 F8 07 07 07 05 04 07 07 06 01 01 02 02 01 01 00 B1 B5 BA BA BA BA BA A7 A7 A8 A8 A8 AB ...
- 如果輸入全部都是\x10
1
22D 2A 9B 9A 9A 9A 99 99 98 98 98 98 49 46 44 44 44 46 49 49 37 46 46 47 5B 5B 58 58 59 59 5E 5E 5B E9 E9 E8 17 17 17 15 14 17 17 16 11 11 12 12 11 11 10 A1 A5 AA AA AA AA AA B7 B7 B8 B8 B8 BB ...
- 要比對的key
1
247 56 F8 BE FD FB A6 FB A7 FF F2 F2 0C 63 33 11 65 2F 18 21 69 63 35 25 2D 2E 2C 21 70 78 17 7A 0F 92 BE 99 54 48 43 35 75 52 48 36 57 34 32 3F 01 01 00 B1 B5 BA BA BA BA BA A7 A7 A8 A8 A8 AB ...
從以上的memory dump出來的結果就知道全部輸入\x00和要比對的key只有前面48 bytes不一樣,但後面都一樣,而和全部都是\x10的輸出結果比較發現都是差\x10(不管正負),因此我有大膽的想法,這該不會是XOR的操作ㄅ,經過比對果然無誤,所以我只要把要比對的key和全部都是\x00的結果進行XOR就知道我應該輸入甚麼了
Exploit
1 |
|
Flag: FLAG{d0_Y0u_l1k3_b4n4Na_d0Nut?}