๋ฌธ์ : DreamHack โ Please Discover my Discovery key ๋ถ๋ฅ: Misc (ํ์จ์ด ๋ฆฌ๋ฒ์ฑ) ๋์ด๋: ๐ฅ Bronze 4 ์๋ณธ: ACSC CTF ์ถ์ ์ (
plzdiscoverdiscovery) FLAG:acsc{welcometostm32!!!}
์ฃผ์ด์ง๋ ๊ฑด stm32f4-discovery.bin ๋ฑ ํ๋, ๊ทธ๊ฒ๋ 769๋ฐ์ดํธ๋ค. ์๋ฒ๋ ์๋ค. ๋ฌธ์ ์ค๋ช
์ ํ ์ค, "Get key from stripped cortex M board" โ ์ฌ๋ณผ์ด ๋ค ๋ฒ๊ฒจ์ง(stripped) Cortex-M ๋ณด๋์์ ํค๋ฅผ ๋ฝ์๋ด๋ผ๋ ๋ป์ด๋ค.
๊ฐ์ฅ ๋จผ์ ์์ด ๊ฐ๋ ๊ฑด strings ์ธ๋ฐ, ์ฌ๊ธฐ์๋ถํฐ ํจ์ ์ด ์์๋๋ค. doyouwantrealkey("do you want real key"), ppQAwdKeyskeys@=, poppoppoppoppop, 0x001001 ๊ฐ์ ๊ทธ๋ด๋ฏํ "ํค ํ๋ณด"๋ค์ด ๋๋๊ณ ๋ฐํ ์๋ค. ์ด๊ฑธ ํ๋์ฉ ๋ฃ์ด๋ณด๋ค ์๊ฐ์ ๋ค ๋ฒ๋ฆฌ๊ฒ ๋๋ค. ์ง์ง ํค๋ ์ด ๋ฌธ์์ด๋ค ์์ ์๋ค. ๋ณด๋๊ฐ ๋ถํ
ํด์ UART ๋ก ์ค์ ๋ก ๊ณ์ฐํด ๋ด๋ณด๋ด๋ ๊ฐ์ ์๋ค. ๊ทธ๋์ ์ด ๋ฌธ์ ๋ "strings ๋ก ๋"์ด ์๋๋ผ, Thumb ์ฝ๋๋ฅผ ์ฝ์ด ๋ฌด์จ ๊ณ์ฐ์ ํ๋์ง ๋ฐ๋ผ๊ฐ์ผ ํ๋ ๋ฆฌ๋ฒ์ฑ ๋ฌธ์ ๋ค.
์ด ๊ธ์ ๋ช ๋ น์ ๋ชจ๋ ๋ฌธ์ ํด๋ ์ต์์(
extracted/์ ๋ถ๋ชจ) ์์ ์คํํ๋ค.
file extracted/stm32f4-discovery.bin; strings -n 4 extracted/stm32f4-discovery.bin
๋ฌธ์ ๊ฐ์
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ๋ฌธ์ ๋ช | Please Discover my Discovery key |
| ๋์ด๋ | ๐ฅ Bronze 4 |
| ๋ถ๋ฅ | Misc / ํ์จ์ด ๋ฆฌ๋ฒ์ฑ |
| ์ ๊ณต ํ์ผ | stm32f4-discovery.bin (769 bytes) |
| ํต์ฌ ๊ธฐ๋ฒ | stripped Thumb ๋์ค์ด์ ๋ธ + ๋ฐ๋ณตํค XOR ๋ณตํธ + base64 |
ํ์ผ๋ง ์ฃผ์ด์ง๋ ์คํ๋ผ์ธ ๋ฌธ์ ๋ผ VM ์ด ํ์ ์๋ค. file ์ ๊ทธ๋ฅ data ๋ผ๊ณ ๋ง ๋งํด์ค๋ค โ ELF ๋ ์๋๊ณ ํค๋๋ ์๋ ์์ ํ์จ์ด ๋ฐ์ด๋๋ฆฌ(raw binary) ๋ค. ์ด๋ด ๋ ์ํคํ
์ฒ์ ๋ก๋ ์ฃผ์๋ฅผ ์ฌ๋์ด ์ง์ ์๋ ค์ค์ผ ๋์ค์ด์
๋ธ์ด ๋๋ค.
ํ์ด ํ๋ฆ์ ์ด๋ ๋ค. strings ๋ก ๋ฏธ๋ผ์ ์ง์ง ์ฌ๋ฃ(base64 ๋ ๊ฐ)๋ฅผ ๊ตฌ๋ถํ๊ณ โ ๋ฒกํฐ ํ
์ด๋ธ์์ ๋ก๋ ์ฃผ์ยท์ง์
์ ์ ์ฝ์ด Thumb ์ผ๋ก ๋์ค์ด์
๋ธํ๊ณ โ main ์ด ๋ base64 ๋ฌธ์์ด์ XOR ํด์ UART ๋ก ๋ด๋ณด๋ธ๋ค๋ ๊ฑธ ํ์ธํ๊ณ โ ์๋ฎฌ๋ ์ดํฐ๋ก ๊ทธ ์ถ๋ ฅ์ ์ค์ธกํ ๋ค โ XOR ์ ๋๋๋ ค ์จ์ ๋ฉ์์ง๋ฅผ ๋ณต์ํ๋ค.
๐งฉ ๋ฐฐ๊ฒฝ โ raw ํ์จ์ด๋ฅผ ์ฃผ์๊ณต๊ฐ์ ์น๊ธฐ
์ผ๋ฐ์ ์ธ ๋ฆฌ๋ฒ์ฑ์ ELF ๋ฅผ ์ฃผ๋ฉด objdump ๊ฐ ์์์ ์ฌ๋ณผยท์น์
ยท์ง์
์ ์ ์ฝ์ด์ค๋ค. ํ์ง๋ง ์ด ํ์ผ์ ์น์
ํค๋๊ฐ ์๋ raw ์ด๋ฏธ์ง๋ค. Cortex-M ์ ์ ์์ด ๋ค์ด์ค๋ฉด ์ฃผ์ 0 ์์ ๋ ๊ฐ์ 32๋นํธ ์๋๋ฅผ ์ฝ๋๋ค.
[0x00]์ด๊ธฐ ์คํ ํฌ์ธํฐ(MSP)[0x04]๋ฆฌ์ ํธ๋ค๋ฌ ์ฃผ์ (์ตํ์ ๋นํธ 1 = Thumb ๋ชจ๋)
ํ์ผ ๋งจ ์ 8๋ฐ์ดํธ๊ฐ ์ ํํ ์ด ๋ฒกํฐ ํ ์ด๋ธ์ด๋ค.
00000000: 0000 0220 5102 0008 ...
โ SP=0x20020000 โ Reset=0x08000251SP = 0x20020000 ์ STM32F4 ์ SRAM(0x20000000) ์์ญ ๋์ด๊ณ , ๋ฆฌ์
๋ฒกํฐ 0x08000251 ์ flash ์์ญ(0x08000000)์ ๊ฐ๋ฆฌํจ๋ค. ์ฆ ์ด ๋ฐ์ด๋๋ฆฌ๋ 0x08000000 ์ ์นํ๋ flash ์ด๋ฏธ์ง์ด๊ณ , ์ฝ๋๋ Thumb ์ด๋ฉฐ ์ง์
์ ์ 0x08000250(์ง์ ์ ๋ ฌ, LSB ๋ Thumb ํ์๋ผ ๋ผ๊ณ ๋ด)์ด๋ค. ์ด ๋ ์ซ์๋ง ์์ผ๋ฉด ๋๋จธ์ง๋ ์ ๋ถ ๋์ค์ด์
๋ธ๋ก ํ๋ฆฐ๋ค.

objdump ๋ ์ด ๋จธ์ ์ ๋ชป ๋ฌผ์ด์(can't use supplied machine arm) capstone ์ผ๋ก ์ง์ Thumb ๋์ค์ด์
๋ธํ๋ค. 769๋ฐ์ดํธ ์์๋ ํจ์๊ฐ ๋ช ๊ฐ ์๋ค.
0x08UART ํ ๊ธ์ ์ถ๋ ฅ (์ํ ๋ ์ง์คํฐ์ TXE ๋นํธ๋ฅผ ํด๋ง ํ ๋ฐ์ดํฐ ๋ ์ง์คํฐ์ write)0x4cUSART1ยทGPIOยทRCC ์ด๊ธฐํ0xc8busy-loop ๋๋ ์ด0xf6๋ฐ๋ณตํค XOR (ํต์ฌ)0x17e/0x19cgetKeyโ ๊ฐ๊ฐ 3, 4 ๋ง ๋ฐํ (๋ฏธ๋ผ)0x1b8main
๐ ์ ์ฐฐ โ ๋ฏธ๋ผ์ ์ง์ง ์ฌ๋ฃ ๊ตฌ๋ถํ๊ธฐ
strings ๊ฒฐ๊ณผ์์ base64 ๋ก ๋ณด์ด๋ ๋ ๊ฐ๊ฐ ๋์ ๋๋ค.
c3RtMzJmNC1kaXNjb3Zlcnk= โ base64 ๋์ฝ๋ โ "stm32f4-discovery"
d2VsY29tZXRvc3RtMzIhISE= โ base64 ๋์ฝ๋ โ "welcometostm32!!!"๋๋จธ์ง doyouwantrealkey, ppQAwdKeyskeys@=, poppoppoppoppop, 0x001001 ์ ํ๋ฌธ ๊ทธ๋๋ก flash ์ ๋ฐํ ์๋ค. ์ฌ๋ ๋์ ์คํ๋ ค ์ด ํ๋ฌธ๋ค์ด "ํค"์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ฝ๋๊ฐ ์ค์ ๋ก ์ด๊ฑธ ์ฐ๋์ง ์๋์ง๋ ๋์ค์ด์
๋ธ๋ก ํ์ธํด์ผ ํ๋ค.
capstone ์ผ๋ก ๊ฐ ํจ์์ PC-์๋ ๋ฆฌํฐ๋ด ๋ก๋๋ฅผ ์ ๋ถ ํด์ํด ๋ดค๋ค. ์ด๋ค ๋ฌธ์์ด์ ๋๊ฐ ์ฐธ์กฐํ๋์ง๊ฐ ์ฌ๊ธฐ์ ๊ฐ๋ฆฐ๋ค.

0x1be(main) โd2VsY29tโฆ(welcome base64)0x1d2(main) โc3RtMzJmโฆ(discovery base64)0x184(getKeyA) โpoppoppoppoppop0x1a2(getKeyB) โppQAwdKeyskeys@=0x1d6(main) โdoyouwantrealkey0x1da(main) โ0x001001
getKey ๋ ํจ์๋ ๋ฌธ์์ด ํฌ์ธํฐ๋ฅผ ์ง์ญ๋ณ์์ ๋ด์๋๊ณ ๋ ์ ์ ์ ์ 3ยท4 ๋ง ๋ฐํํ๋ค. main ์์๋ doyouwantrealkey ์ 0x001001 ์ ๋ก๋๋ง ๋๊ณ ์ดํ ํ ๋ฒ๋ ์ฝํ์ง ์๋๋ค. ์ฆ ๋ค ๊ฐ ๋ค ์ฃฝ์ ์ฝ๋(dead code) ๋ฏธ๋ผ๋ค. ์ค์ ๊ณ์ฐ์ ๋ค์ด๊ฐ๋ ์ฌ๋ฃ๋ base64 ๋ ๊ฐ๋ฟ์ด๋ค.
โถ ์ฝ์ง: ํ๋ฌธ ํค๋ฅผ ๋ฃ์ด๋ณด๊ณ , ์ ์ถ ํ์ ๋์๋ฌธ์์ ๋ฐ๋ชฉ ์กํ๋ค
์ฒ์์ ์ฝ๋๋ฅผ ์ ์ฝ๊ณ strings ๊ฒฐ๊ณผ๋ง์ผ๋ก ์น๋ถํ๋ ค ํ๋ค. base64 ๋ ๊ฐ๋ฅผ ๋์ฝ๋ํด ๋์จ welcometostm32!!!, stm32f4-discovery ๋ฅผ ๊ทธ๋๋ก flag ์ ๋ฃ๊ณ , ๋ฏธ๋ผ doyouwantrealkeyยทppQAwdKeyskeys@= ๋ ๋ฃ์ด๋ดค๋ค. ์ ๋ถ ์ค๋ต.
๋ณด๋๊ฐ ์ถ๋ ฅํ๋ CT ๋ฅผ ๋ฏธ๋ผ ํค๋ค๋ก XOR ํด๋ณด๊ธฐ๋ ํ๋ค. CT ๋ฅผ stm32f4-discovery ์ base64 ๋ก XOR ํ๋ฉด welcometostm32!!! ์ base64 ๊ฐ ๋์ค๋ ๊ฑด ๋น์ฐํ์ง๋ง(๊ทธ๊ฒ XOR ์ ์ ์๋๊น), doyouwantrealkeyยทpoppoppoppoppop ๊ฐ์ ๊ฑธ๋ก XOR ํ๋ฉด ์ ๋ถ garbage ์๋ค.
๊ฐ์ฅ ์ค๋ ์ก์๋จน์ ๊ฑด ์๋ฑํ๊ฒ๋ ์ ์ถ ํ์์ด์๋ค. ์๋ณธ์ด ACSC CTF ๋ผ ๋น์ฐํ ๋๋ฌธ์ ACSC{...} ๊ฒ ๊ฑฐ๋ ํ๊ณ ๋ฃ์๋๋ฐ ์๋ฒ๋ ๊ณ์ {"flag":["Wrong flag."]} ๋ง ๋๋ ค์คฌ๋ค. ์๊ณ ๋ณด๋ ์ด ๋ฌธ์ ๋ ์๋ฌธ์ acsc{} ๋ฅผ ๋ฐ๋๋ค โ ๋ฌธ์ ๋๊ธ์ "์ ๋ต์ ์ฐพ์ผ์
จ์ผ๋ฉด ์ด๊ฒ์ ํ๋๊ทธ ํ์์ธ acsc{} ์ ๋ฃ์ด์ ์ธ์ฆํ์๋ฉด ๋ฉ๋๋ค!" ๋ผ๊ณ ์ ํ ์์๋ค. ๋ณต์ํ ๊ฐ์ ์ฒ์๋ถํฐ ๋ง์๊ณ ๊ป๋ฐ๊ธฐ ๋์๋ฌธ์ ํ๋ ๋๋ฌธ์ ํค๋งธ๋ ๊ฒ. ์ ์ถ ์ ์ ๋ฌธ์ ์ค๋ช
ยท๋๊ธยทplaceholder ๋ฅผ ๋จผ์ ์ฝ์๋ ๊ตํ์ ๋ค์ ์๊ฒผ๋ค.
๐ฏ ํต์ฌ โ main ์ด ํ๋ ๊ณ์ฐ
main(0x080001b8)์ ํ๋ฆ์ ์งง๋ค.
- flash ์
d2VsY29tZXRvc3RtMzIhISE=(= welcome base64)๋ฅผ ์คํ ๋ฒํผbuf๋ก ๋ณต์ฌํ๋ค. xor_inplace(buf, "c3RtMzJmNC1kaXNjb3Zlcnk=")๋ฅผ ํธ์ถํ๋ค โbuf๋ฅผ discovery base64 ๋ก XOR ํ๋ค.- USART1 ์ ์ด๊ธฐํํ๊ณ ,
buf๋ฅผ UART ๋ก ๋ฐ๋ณต ์ก์ ํ๋ค.
2๋ฒ์ xor_inplace(0x080000f6)๊ฐ ์ด ๋ฌธ์ ์ ์ ๋ถ๋ค. ๋์ค์ด์
๋ธ์ ๋ณด๋ฉด ์ ํ์ ์ธ ๋ฐ๋ณตํค XOR ์ด๋ค.
#!/usr/bin/env python3
# capstone thumb disassembly of the repeating-key XOR routine @ 0x080000f6
import capstone
BASE = 0x08000000
data = open("extracted/stm32f4-discovery.bin", "rb").read()
md = capstone.Cs(capstone.CS_ARCH_ARM, capstone.CS_MODE_THUMB)
notes = {
0x08000106: "while str1[i] -> i = strlen(str1)",
0x0800011e: "while str2[j] -> j = strlen(str2) (key length)",
0x08000142: "sdiv/mul/sub -> k % strlen(key)",
0x08000154: "r2 = key[k % keylen]",
0x0800015c: "r2 ^= str1[k]",
0x08000160: "str1[k] = r2 <-- repeating-key XOR, in place",
}
for insn in md.disasm(data[0x130:0x172], BASE + 0x130):
n = notes.get(insn.address, "")
tail = f" ; {n}" if n else ""
print(f"0x{insn.address:08x}: {insn.mnemonic:6s} {insn.op_str}{tail}")python3 xor_disasm.py
์์ฌ์ฝ๋๋ก ์ฎ๊ธฐ๋ฉด ์ด๋ ๋ค.
// str1 = buf(welcome base64), str2 = key(discovery base64)
for (k = 0; k < strlen(str1); k++) {
str1[k] = str1[k] ^ str2[k % strlen(str2)]; // 0x160: strb r2, [r3]
}sdiv/mul/subs ์ธ ๋ช
๋ น์ด k % strlen(key) ๋ฅผ ๋ง๋ค๊ณ (0x142~0x14c), key[k % keylen](0x154)๋ฅผ str1[k](0x13c)์ XOR(0x15c)ํด์ ์ ์๋ฆฌ์ ๋ค์ ์ด๋ค(0x160). ๋ ๋ฌธ์์ด ๊ธธ์ด๊ฐ 24๋ก ๊ฐ์ผ๋ ๊ฒฐ๊ตญ ๋ base64 ๋ฌธ์์ด์ ๋จ์ ๋ฐ์ดํธ XOR ์ด๋ค.
์ฆ ๋ณด๋๊ฐ UART ๋ก ๋ด๋ณด๋ด๋ ๊ฐ์
CT = base64("welcometostm32!!!") โ base64("stm32f4-discovery")์ด๊ณ , ์ด CT ๋ฅผ ๋ค์ base64("stm32f4-discovery") ๋ก XOR ํ๋ฉด base64("welcometostm32!!!") ๊ฐ ํ์ด๋์จ๋ค. "my Discovery key" ๋ ๋ฏธ๋ผ ํ๋ฌธ๋ค์ด ์๋๋ผ, ๋ณด๋ ์์ ์ ์ ์ฒด์ฑ์ธ stm32f4-discovery ๋ฅผ XOR ํค๋ก ์ด๋ค๋ ๋ป์ด์๋ค.

๐งช ์ฆ๊ฑฐ โ ์๋ฎฌ๋ ์ดํฐ๋ก UART ์ถ๋ ฅ ์ค์ธก
์ ์ ๋ถ์๋ง์ผ๋ก "์ด ๋ฐ์ดํธ๊ฐ ๋์จ๋ค"๊ณ ์ฃผ์ฅํ๊ธฐ๋ณด๋ค, ์ค์ ๋ก ์ฝ๋๋ฅผ ๋๋ ค UART ๋ก ๋ฌด์์ด ๋๊ฐ๋์ง ํ์ธํ๋ ํธ์ด ํ์คํ๋ค. ์ค๋ฌผ ๋ณด๋๊ฐ ์์ผ๋ Unicorn ์์ง์ผ๋ก ์ด Thumb ํ์จ์ด๋ฅผ ๊ทธ๋๋ก ์คํํ๋ค. flashยทSRAM ์ ๋งคํํ๊ณ , USART1 ์ ์ํ ๋ ์ง์คํฐ(0x40011000) ์ฝ๊ธฐ๋ ํญ์ TXE ์ค๋น๋จ์ผ๋ก ์๋ตํ๊ฒ, ๋ฐ์ดํฐ ๋ ์ง์คํฐ(0x40011004) write ๋ ํํนํด์ ๋๊ฐ๋ ๋ฐ์ดํธ๋ฅผ ๋ชจ์๋ค.
def usart_read(uc, offset, size, user):
if offset == 0x00: # USART_SR: TXE|TC ํญ์ ์ค๋น๋จ
return 0xC0
return 0
def usart_write(uc, offset, size, value, user):
if offset == 0x04: # USART_DR: ์ก์ ๋ฐ์ดํธ
captured.append(value & 0xFF)
uc.mmio_map(0x40011000, 0x1000, usart_read, None, usart_write, None)
uc.reg_write(UC_ARM_REG_SP, 0x20020000)
uc.emu_start(0x08000250 | 1, 0, count=0) # ๋ฆฌ์
ํธ๋ค๋ฌ๋ถํฐ
๋ณด๋๊ฐ ์ค์ ๋ก ํด๋ญ์์ํ๋ ๋ฐ์ดํธ๋ 07 01 04 07 14 48 73 19 14 1b โฆ. ์ฌ๋์ด ์ฝ์ ์ ์๋ ๊ฐ์ด๋ค. ์ฌ๊ธฐ์ "์ถ๋ ฅ์ด ๊ณง flag" ๋ผ๊ณ ์ฐฉ๊ฐํ๋ฉด ๋งํ๋ค โ ์ด๊ฑด ์ํธ๋ฌธ(CT)์ด๊ณ , ์ ์ ๋ถ์์์ ์์ธกํ XOR ๊ฒฐ๊ณผ์ ๋ฐ์ดํธ ๋จ์๋ก ์ ํํ ์ผ์นํ๋ค. ์ ์ ยท๋์ ๋ ๊ฐ๋๊ฐ ๊ฐ์ ๋ต์ ๊ฐ๋ฆฌํค๋ ์ด์ ๋๋๋ฆฌ๋ฉด ๋๋ค.
๐ ๋ณตํธ โ ์์ฒด ์๊ฒฐ solve
CT ๋ฅผ base64("stm32f4-discovery") ๋ก XOR ํด ์๋ฌธ base64 ๋ฅผ ๋ณต์ํ๊ณ , ๊ทธ๊ฑธ ๋ค์ base64 ๋์ฝ๋ํ๋ฉด ์จ์ ๋ฉ์์ง๊ฐ ๋์จ๋ค.
import base64
# USART1_DR ๋ก ๋์จ ๋ฐ์ดํธ (Unicorn ์ผ๋ก ์บก์ฒ)
CT = bytes.fromhex("0701040714487319141b631d026b1c1e2f4913042a3d2e00")
key_b64 = b"c3RtMzJmNC1kaXNjb3Zlcnk=" # base64("stm32f4-discovery")
recovered_b64 = bytes(CT[i] ^ key_b64[i % len(key_b64)] for i in range(len(key_b64)))
secret = base64.b64decode(recovered_b64).decode()
print("recovered base64 :", recovered_b64.decode())
print("b64 decode :", secret)
print("flag : acsc{%s}" % secret)
๋ณต์๋ base64 d2VsY29tZXRvc3RtMzIhISE= โ ๋์ฝ๋ โ welcometostm32!!!. ์ด๊ฑธ ์๋ฌธ์ ํ์์ ๋ฃ์ด acsc{welcometostm32!!!} ๋ฅผ ์ ์ถํ๋ ์ ๋ต(HTTP 201, ํด๊ฒฐ ์ฒ๋ฆฌ)์ด๋ค.
๐ก๏ธ ๋ฐฉ์ด ๊ด์ ์์ ๋ฐฐ์ธ ์
์ฅ๋์ฒ๋ผ ๋ณด์ด๋ ๋ฌธ์ ์ง๋ง ์ค์ ์๋ฒ ๋๋ ๋ณด์์ ๊ทธ๋๋ก ๋ฟ์ ์๋ค.
- ํ์จ์ด์ ํ๋์ฝ๋ฉํ "ํค"๋ ํค๊ฐ ์๋๋ค. ์ฌ๊ธฐ์ XOR ํค
stm32f4-discovery๋ ๊ทธ๋ฅ flash ์ base64 ๋ก ๋ฐํ ์์๋ค. ๋ฌผ๋ฆฌ ์ ๊ทผ์ด๋ flash ๋คํ ํ ๋ฒ์ด๋ฉด ๋๋๋ค. ์ง์ง ๋น๋ฐ์ secure elementยทOTPยทPUF ์ฒ๋ผ ์ฝ์ด๋ผ ์ ์๋ ๊ณณ์ ๋ฌ์ผ ํ๋ค. - XOR ์ ์ํธํ๊ฐ ์๋๋ค. ๋ฐ๋ณตํค XOR ์ ํค๋ง ์๋ฉด ์ฆ์ ๋๋์๊ฐ๊ณ , ์ฌ๊ธฐ์ ํค๊น์ง ๊ฐ์ ๋ฐ์ด๋๋ฆฌ ์์ ์์๋ค. ๋๋ ํ(๋ฏธ๋ผ ๋ฌธ์์ด, ์ฃฝ์ ์ฝ๋)๋ฅผ ์๋ฌด๋ฆฌ ์น์ด๋ "์ฝ๊ฒ ๋๋์๊ฐ๋ ๋ณํ"์ด๋ผ๋ ๋ณธ์ง์ ์ ๋ฐ๋๋ค.
- strip ์ ๋ฐฉ์ด๊ฐ ์๋๋ผ ์๋ ๋ฐฉ์งํฑ์ด๋ค. ์ฌ๋ณผ์ ๋ค ์ง์๋ ๋ฒกํฐ ํ ์ด๋ธยท์ฃผ๋ณ์ฅ์น ์ฃผ์ยท๋ฌธ์์ด์ ๋จ๊ณ , ๋์ค์ด์ ๋ธ๋ฌ์ ์๋ฎฌ๋ ์ดํฐ๋ก ๋ก์ง์ ๊ทธ๋๋ก ๋ณต์๋๋ค. ๊ธฐ๋ฐ์ฑ์ด ํ์ํ๋ฉด ์ฝ๋ ๋๋ ํ๊ฐ ์๋๋ผ ์คํ ํ๊ฒฝ(secure boot, ์ฝ๊ธฐ ๋ณดํธ RDP)์ผ๋ก ์ง์ผ์ผ ํ๋ค.
- ๋ถ์ ์ธก๋ฉด์์๋, ๋ฏธ๋ผ์ ํ๋ค๋ฆฌ์ง ๋ง๊ณ "์ฝ๋๊ฐ ์ค์ ๋ก ๋ฌด์์ ์ฝ๊ณ ์ฐ๋๊ฐ"๋ง ๋ฐ๋ผ๊ฐ๋ฉด ๋๋ค.
getKey๊ฐ ๋ฐํ๊ฐ์ ์ ์ฐ๊ณ ๋ฌธ์์ด์ ๋ก๋๋ง ํ๋ ๊ฑธ ๋์ค์ด์ ๋ธ๋ก ํ์ธํ๋ ์๊ฐ, ๋ค ๊ฐ์ ๋ฏธ๋ผ๋ ํ๊บผ๋ฒ์ ๊ฑธ๋ฌ์ก๋ค.
๋ง๋ฌด๋ฆฌ
strings ํ ๋ฐฉ์ผ๋ก ๋๋ ๊ฒ ๊ฐ๋ 769๋ฐ์ดํธ๊ฐ, ์ค์ "์ถ๋ ฅ์ด ๊ณง ๋ต์ด ์๋๋ค"๋ผ๋ ํ ๊ฒน์ ์จ๊ฒจ๋ ๋ฌธ์ ์๋ค. Cortex-M ๋ฒกํฐ ํ
์ด๋ธ์์ ๋ก๋ ์ฃผ์๋ฅผ ์ฝ๊ณ โ Thumb ์ ๋์ค์ด์
๋ธํด ๋ฏธ๋ผ๋ฅผ ๊ฑธ๋ฌ๋ด๊ณ โ ๋ฐ๋ณตํค XOR ์ ์ฐพ์ โ Unicorn ์ผ๋ก ์ค์ธกํ๊ณ โ ๋๋๋ฆฐ๋ค. ๋ง์ง๋ง์ ๋๋ฌธ์ยท์๋ฌธ์ ํ๋๋ก ํค๋งจ ๊ฑด ๋ค์ด์ง๋ง, ๊ทธ ๋์ "์ ์ถ ํ์์ ๋ฌธ์ ์ค๋ช
์์ ๋จผ์ ํ์ธํ์"๋ ๊ธฐ๋ณธ์ ํ ๋ฒ ๋ ๋์๊ฒผ๋ค.
FLAG: acsc{welcometostm32!!!}
Comments
๋๊ธ
๋๊ธ์ ๋จ๊ธฐ๋ ค๋ฉด ๋ก๊ทธ์ธ์ด ํ์ํด์. (๋ค์ด๋ฒ ยท ๊ตฌ๊ธ ๊ณ์ )
๋๊ธ ๋ถ๋ฌ์ค๋ ์คโฆ