๋ฌธ์ : DreamHack โ multipoint ๋ถ๋ฅ: Reversing ๋์ด๋: ๐ฅ Gold 1 FLAG:
DH{Poly_m0ly_mult1pl1c4t1on_m0dular~!}
์ด ๋ฌธ์ ๋ ์ฌ์ค ์ด๋ฒ์ด ์ธ ๋ฒ์งธ ์๋๋ค. ์ง๋ ๋ ์ธ์ ๋ชจ๋ "์๊ณ ๋ฆฌ์ฆ์ ์๋ชป ์ฝ์ ๊ฒ ๊ฐ๋ค"๋ ๊ฒฐ๋ก ์ ๋ด๋ฆฌ๊ณ ๋ณด๋ฅํ์๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ทธ ๊ฒฐ๋ก ์์ฒด๊ฐ ํ๋ ธ๋ค โ ์๊ณ ๋ฆฌ์ฆ์ ์ฝ์ ๊ฑด ์ฒ์๋ถํฐ ๋ง์๊ณ , ๋ฌธ์ ๋ ๊ทธ ์๊ณ ๋ฆฌ์ฆ์ด ๋๋ ํ์๋ฅผ ๋ ๋ฒ ๋ค ๊ณผ์ํ๊ฐํ๊ณ ์ค๊ฐ์ ์ค์บ์ ๋ฉ์ถ ๊ฒ์ด์๋ค. ์ค๋์ ๊ทธ ์ค์๋ฅผ ์ ๋ฉด์ผ๋ก ๋ค์ ํ์ธํ๊ณ , ์ง์ง ๊ตฌ์กฐ๋ฅผ ๋๊น์ง ์ฝ์ด์ ํ์๋ค.
๋ฌธ์ ๊ฐ์
file๊ณผ checksec๋ถํฐ ํ์ธํ๋ค. PIE, ํ RELRO, ์คํ ์นด๋๋ฆฌ, NX โ ํน๋ณํ ๊ฒ ์๋ ๊ธฐ๋ณธ ๋ณดํธ๊ธฐ๋ฒ ์กฐํฉ์ x86-64 ๋ฐ์ด๋๋ฆฌ๋ค. Strip๋ผ ์์ด ์ฌ๋ณผ์ ์๋ค.
main์ objdump๋ก ์ด์ด๋ณด๋ฉด ๋ก์ง ์์ฒด๋ ์งง๋ค. read()๋ก ์ ํํ 39๋ฐ์ดํธ(0x27)๋ฅผ ์
๋ ฅ๋ฐ๊ณ , 39๊ฐ ์๋๋ฉด ์ฆ์ ์คํจ ๋ฉ์์ง๋ฅผ ์ฐ๊ณ ์ข
๋ฃํ๋ค. 39๋ฐ์ดํธ๋ฅผ ๋ค ๋ฐ์ผ๋ฉด ์ด๋ค ๋ฃจํ๋ฅผ ๋๋ ค 38๋ฐ์ดํธ์ง๋ฆฌ ๋ฒํผ(buf1)๋ฅผ ์ฑ์ฐ๊ณ , ๊ทธ๊ฑธ 0x21bd60 ์์น์ 38๋ฐ์ดํธ ์ ๋ต๊ฐ๊ณผ memcmp๋ก ๋น๊ตํ๋ค. ๊ทธ ๋น๊ต๊ฐ ํต๊ณผํ๋ฉด Correct, ์๋๋ฉด ๋ค๋ฅธ ๋ฉ์์ง๊ฐ ๋์จ๋ค โ ์ ํ์ ์ธ "์
๋ ฅ โ ๊ฒฐ์ ๋ก ์ ๋ณํ โ ๋ชฉํ๊ฐ๊ณผ ๋น๊ต" ๊ตฌ์กฐ๋ค.
๊ด๊ฑด์ ๊ทธ "๊ฒฐ์ ๋ก ์ ๋ณํ"์ด ์ ํํ ๋ญ ํ๋๋์๋ค. ๋ฃจํ ๋ณธ๋ฌธ์ ํ๋์ฉ ๋ฐ๋ผ๊ฐ๋ฉด์ ์ฃผ์์ ๋ฌ์๋ค.
์ ๋ฆฌํ๋ฉด ๋ฃจํ ํ ๋ฒ(๋ ์ฝ๋ ํ๋)์ด ํ๋ ์ผ์ ์ด๋ ๋ค.
f0, f1, f2, f3 = table[i*4 .. i*4+3] # ๋ ์ฝ๋ 4๋ฐ์ดํธ
buf1[f0] = (buf1[f0] + f3 * input[f1] * table3[f2]) % 251
i += 1๊ทธ๋ฆฌ๊ณ ์ข ๋ฃ ์กฐ๊ฑด์ "์ ํด์ง ํ์๋งํผ"์ด ์๋๋ผ ๋ค์ ๋ ์ฝ๋ 4๋ฐ์ดํธ๋ฅผ 32๋นํธ ์ ์๋ก ์ฝ์์ ๋ ๊ทธ๊ฒ 0์ด๋ฉด ๋ฉ์ถ๋ค์๋ค. ์ฒซ ์ธ์ ์๋ ์ด๊ฑธ "39๋ฒ ๊ณ ์ ๋ฐ๋ณต"์ผ๋ก ์๋ชป ์ง์์๊ณ , ๋ ๋ฒ์งธ ์ธ์ ์์ ์ด ๋ถ๋ถ์ ๋ฐ๋ก์ก์๋ค. ๋ฌธ์ ๋ ๊ทธ๋ค์์ด์๋ค.
โถ๐ณ๏ธ ์ฝ์ง โ ํ ์ด๋ธ์ด ์ด์ํ ๊ฒ ์๋๋ผ ์ ๋ง ๊ทธ๋งํผ ์ปธ๋ค
์ข
๋ฃ ์กฐ๊ฑด์ ๋ฐ๋ก์ก๊ณ ๋์, "๊ทธ๋ผ ์ค์ ๋ก ๋ช ๊ฐ์ ๋ ์ฝ๋๊ฐ ์๋์ง" ํ์ธํ๋ ค๊ณ ํ์ผ์์ ํ
์ด๋ธ ์์ ์ฃผ์(0x201020)๋ถํฐ 4๋ฐ์ดํธ์ฉ ์ฝ์ผ๋ฉฐ all-zero ๋ ์ฝ๋๋ฅผ ์ฐพ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋๋ ธ๋ค. ์ฒ์์ 1000๊ฐ ๋ ์ฝ๋(4000๋ฐ์ดํธ)๋ง ํ์ด๋ดค๋ค.
for i in range(1000):
off = table_off + i*4
if struct.unpack('<I', data[off:off+4])[0] == 0:
found = True
break
1000๊ฐ๋ฅผ ํ์ด๋ ์ข
๊ฒฐ ๋ ์ฝ๋๊ฐ ํ๋๋ ์ ๋์๋ค. ์ฌ๊ธฐ์ "์ด๊ฑด ๋ญ๊ฐ ์ด์ํ๋ค โ ์ง์ง ์ด๋ ๊ฒ ํฐ ํ
์ด๋ธ์ผ ๋ฆฌ๊ฐ ์๋ค, ๋ด๊ฐ ์ฃผ์๋ฅผ ์๋ชป ์ง์๊ฑฐ๋ ๋ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ค๋
ํ ๊ฒ ๋ถ๋ช
ํ๋ค"๊ณ ํ๋จํด๋ฒ๋ ธ๋ค. ๊ทธ ํ๋จ์ ๊ทผ๊ฑฐ๋ก GDB์์ ์ค์ ์คํ ์ค์ธ buf1 ๊ฐ์ ์์ ์
๋ ฅ(input[i] = i+1)์ ๋ํด ์ฐ์ด๋ณด๊ณ ๋ด ํ์ด์ฌ ๋ชจ๋ธ์ ์์ธก๊ฐ๊ณผ ๋น๊ตํ๋๋ฐ, ์์ ํ ๋ค๋ฅธ ๊ฐ์ด ๋์๋ค. ์ด ๋ถ์ผ์น๋ฅผ "์๊ณ ๋ฆฌ์ฆ ๋ชจ๋ธ ์์ฒด๊ฐ ํ๋ ธ๋ค"๋ ์ฆ๊ฑฐ๋ก ๋ฐ์๋ค์ด๊ณ ๋ ๋ฒ์งธ ์ธ์
๋ ๊ทธ๋๋ก ๋ณด๋ฅํ๋ค.
๋์ด์ผ๋ณด๋ฉด ์ด GDB ๋น๊ต ์์ฒด๊ฐ ์๋ชป๋ ์คํ์ด์๋ค โ ์ ์ด์ ๋ชจ๋ธ์ด "39๋ฒ๋ง ๋ฐ๋ณตํ๋ค"๊ณ (์๋ฌต์ ์ผ๋ก) ๊ฐ์ ํ ์ฑ๋ก ๋ง๋ ์์ธก๊ฐ๊ณผ ์ค์ธก์ ๋น๊ตํ์ผ๋, ๋ฃจํ๊ฐ ์ค์ ๋ก๋ ํจ์ฌ ๋ ๊ธธ๊ฒ ๋๋ ์ด์ ์ ๋ง๋ ๊ฒ ๋น์ฐํ๋ค. ์ง์ง ์์ธ์ ์๊ณ ๋ฆฌ์ฆ์ ์๋ชป ์ฝ์ ๊ฒ ์๋๋ผ ์ค์บ์ ์ค๊ฐ์ ๋ฉ์ถ๊ณ "์ด์ํ๋ค"๋ ๊ฐ(ๆ)์ ๊ทผ๊ฑฐ๋ก ๊ฒฐ๋ก ์ ๋ด๋ ค๋ฒ๋ฆฐ ๊ฒ์ด์๋ค.
์ด๋ฒ์ ๊ทธ ์์ฌ์ ๋ฒ๋ฆฌ๊ณ ์ค์บ์ ๋๊น์ง ์ด์ด๊ฐ๋ค. table3๊ฐ ์์๋๋ ์ฃผ์(0x21bd20)๊น์ง ํ์ผ์ ์๋ ๊ทธ๋๋ก ๊ณ์ ์ฝ์๋๋, ์ ํํ i=27455์์ ์ง์ง ์ข
๊ฒฐ ๋ ์ฝ๋(4๋ฐ์ดํธ ๋ชจ๋ 0)๊ฐ ๋์๋ค. table ์์๋ถํฐ table3 ์์๊น์ง์ ๊ฐ๊ฒฉ์ 109824๋ฐ์ดํธ โ 27455 ร 4 + 4(์ข
๊ฒฐ ๋ ์ฝ๋) ์ ์ ํํ ์ผ์นํ๋ค. ํ
์ด๋ธ์ ์ด์ํ ๊ฒ ์๋๋ผ, ์ ๋ง๋ก ๊ทธ๋งํผ ์ปธ์ ๋ฟ์ด์๋ค.
์ฐธ๊ณ ๋ก ์ด ๋ฐ์ด๋๋ฆฌ๋ GDB๋ก ๋ค๋ฃฐ ๋๋ ํ ๊ฐ์ง ๋ ํจ์ ์ด ์์๋ค โ PIE ๋ฒ ์ด์ค๊ฐ ํต์ ๊ฐ์ ํ๋ 0x555555554000์ด ์๋๋ผ .text๋ 0x555555400000, .data๋ 0x555555600000์ผ๋ก ๋ฐ๋ก ๋ก๋๋๋ค(.data๊ฐ ๋ณ๋์ ํฐ LOAD ์ธ๊ทธ๋จผํธ๋ฅผ ์๊ตฌํ ๋งํผ ํฌ๊ธฐ ๋๋ฌธ). ํ์ผ ์คํ์
๊ทธ๋๋ก ๋ธ๋ ์ดํฌํฌ์ธํธ๋ฅผ ๊ฑธ๋ฉด ๊ณง๋ฐ๋ก ์คํจํ๋ค.

์ด๋ฒ ํ์ด ์์ฒด์ ๊ฒฐ๊ตญ GDB๊ฐ ํ์ ์์์ง๋ง(ํ์ผ์์ ์ง์ ์ฝ์ด ์ ์ ์ผ๋ก ํ๋ ธ๋ค), ์ด ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ค์ ๋ง์ง ์ผ์ด ์๋ค๋ฉด info proc mappings๋ถํฐ ํ์ธํด์ผ ํ๋ค๋ ๊ฑธ ๋ค์ ํ๋ฒ ํ์ธํ ์
์ด๋ค.
๐ฃ ํต์ฌ โ 27455๋ฒ ๋์ฐ๋ผ๋, ๊ณ์๊ฐ ์์๋ฉด ๊ทธ๋ฅ ์ ํ์ด๋ค
๋ ์ฝ๋ ํ๋์ ์ฐ์ฐ์ ๋ค์ ๋ณด์.
buf1[f0] += f3 * input[f1] * table3[f2] (mod 251)์ฌ๊ธฐ์ f0, f1, f2, f3๋ ์ ๋ถ ํ
์ด๋ธ์ ๋ฐํ ์๋ ๊ณ ์ ๋ฐ์ดํธ๊ณ , table3[f2]๋ ํ์ผ ์์ ์ ์ ๋ฃฉ์
ํ
์ด๋ธ ๊ฐ์ด๋ค. ์ฆ f3 * table3[f2]๋ ๋งค ๋ ์ฝ๋๋ง๋ค ์ปดํ์ผ ์์ ์ ์ด๋ฏธ ์ ํด์ง ํ๋์ ์์๋ค. ์ด ์์๋ฅผ c๋ผ๊ณ ํ๋ฉด ๋ ์ฝ๋ ํ๋๊ฐ ํ๋ ์ผ์ ๊ฒฐ๊ตญ buf1[f0] += c * input[f1] ๋ฟ์ด๋ค โ input[f1]์ ๋ํด ์์ ํ 1์ฐจ์์ด๋ค.
mod 251์ ๋ง์
์ ๋ถ๋ฐฐ๋๋ค((a+b) mod n = ((a mod n) + (b mod n)) mod n์ด ๋ฐ๋ณต ์ ์ฉ๋๋ฏ๋ก). ๊ทธ๋ฌ๋ 27455๋ฒ์ ๋๋ ๋์ ์ค๊ฐ์ ๋งค๋ฒ mod๋ฅผ ์ทจํ๋ , ๋ค ๋ํ ๋ค์ ๋ง์ง๋ง์ ํ ๋ฒ๋ง mod๋ฅผ ์ทจํ๋ ์ต์ข
๊ฒฐ๊ณผ๋ ๊ฐ๋ค. ๊ฒฐ๊ตญ buf1[f0]์ ์ต์ข
๊ฐ์ ๊ทธ f0๋ฅผ ๋์์ผ๋ก ํ๋ ๋ชจ๋ ๋ ์ฝ๋์ c * input[f1] ํญ์ ์ ๋ถ ๋ํ ๊ฒ๊ณผ ๊ฐ๋ค.
์ด๊ฑด ์ ํํ ํ๋ ฌ-๋ฒกํฐ ๊ณฑ์ด๋ค.
buf1 = M ยท input (mod 251)์ฌ๊ธฐ์ M์ 38ร39 ํ๋ ฌ์ด๊ณ , M[f0][f1]์ "๊ทธ (f0, f1) ์กฐํฉ์ ๊ฐ๋ ๋ชจ๋ ๋ ์ฝ๋์ f3 * table3[f2] ๊ฐ์ ๋ค ๋ํ ๊ฒ"์ด๋ค. 27455๊ฐ ๋ ์ฝ๋๋ฅผ ํ ๋ฒ ์ํํ๋ฉฐ ์ด ํ๋ ฌ์ ๊ทธ๋๋ก ์กฐ๋ฆฝํ ์ ์๋ค.
M = [[0]*39 for _ in range(38)]
i = 0
while True:
rec = data[table_off + i*4 : table_off + i*4 + 4]
if struct.unpack('<I', rec)[0] == 0:
break
f0, f1, f2, f3 = rec
M[f0][f1] = (M[f0][f1] + f3 * table3[f2]) % 251
i += 1์ด์ M ยท input โก target (mod 251)์ ํธ๋ ํ์ค ์ ํ๋์ ๋ฌธ์ ๋ก ๋ฐ๋๋ค. 251์ ์์๋ผ์ ๋๋์
(๋ชจ๋๋ฌ ์ญ์)์ด ํญ์ ์กด์ฌํ๊ณ , GF(251) ์์์ ๊ฐ์ฐ์ค ์๊ฑฐ๋ฅผ ๊ทธ๋๋ก ์ธ ์ ์๋ค.
๐ฏ ์์ฒด ์๊ฒฐ solve
M์ ์กฐ๋ฆฝํ ๋ค [M | target] ์ฆ๊ฐํ๋ ฌ์ GF(251)์์ ํ์ค ๊ฐ์ฐ์ค ์๊ฑฐ๋ก ํ ์ฌ๋ค๋ฆฌ๊ผด๋ก ๋ง๋ค๋ฉด ๋๋ค. ๊ฐ ์ด(ํผ๋ฒ ์ด)์์ 0์ด ์๋ ์์๋ฅผ ์ฐพ์ ๊ทธ ํ์ ์ ๊ทํ(๋ชจ๋๋ฌ ์ญ์์ ๊ณฑํด 1๋ก ๋ง๋ฆ)ํ๊ณ , ๋ค๋ฅธ ๋ชจ๋ ํ์์ ๊ทธ ์ด ์ฑ๋ถ์ ์ ๊ฑฐํด๋๊ฐ๋ ๋ฐฉ์์ด๋ค.
def inv(a):
return pow(a, 251 - 2, 251) # ํ๋ฅด๋ง ์์ ๋ฆฌ๋ก ๋ชจ๋๋ฌ ์ญ์
A = [row[:] + [target[r]] for r, row in enumerate(M)]
pivot_cols = []
r = 0
for c in range(39):
piv = next((rr for rr in range(r, 38) if A[rr][c] % 251), None)
if piv is None:
continue
A[r], A[piv] = A[piv], A[r]
iv = inv(A[r][c])
A[r] = [(x * iv) % 251 for x in A[r]]
for rr in range(38):
if rr != r and A[rr][c]:
f = A[rr][c]
A[rr] = [(A[rr][k] - f * A[r][k]) % 251 for k in range(40)]
pivot_cols.append(c)
r += 1์คํํด๋ณด๋ฉด ๋ญํฌ๊ฐ 38๋ก ๋์จ๋ค โ ๋ฐฉ์ ์ 38๊ฐ(buf1์ 38๋ฐ์ดํธ)๊ฐ ์ ๋ถ ๋
๋ฆฝ์ด๋ผ๋ ๋ป์ด๋ค. ๋ฏธ์ง์๋ 39๊ฐ(input์ 39๋ฐ์ดํธ)์ด๋ฏ๋ก ์์ ๋๊ฐ ์ ํํ 1 ๋จ๋๋ฐ, ๊ทธ ์์ ๋ณ์๊ฐ ํํ input[38](์
๋ ฅ์ ๋ง์ง๋ง ๋ฐ์ดํธ) ๊ทธ ์์ฒด์๋ค. ์ด๋ค ๋ ์ฝ๋๋ f1=38์ ์ฐธ์กฐํ์ง ์๋๋ค โ ์ด ๋ฐ์ดํธ๋ ์ ์ด์ ๊ฒ์ฆ ๋ก์ง์ ์ ํ ๊ด์ฌํ์ง ์๋๋ค.
input[0..37]์ ์ ์ผํ๊ฒ ๊ฒฐ์ ๋๊ณ , input[38]์ ๋ญ ๋ฃ์ด๋ ๊ฒ์ฆ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค โ read()๊ฐ ์๊ตฌํ๋ 39๋ฐ์ดํธ๋ฅผ ์ฑ์ฐ๊ธฐ ์ํ ์๋ฆฌ์ผ ๋ฟ์ด๋ค(ํฐ๋ฏธ๋์ flag๋ฅผ ์
๋ ฅํ๊ณ Enter๋ฅผ ์น๋ฉด ์์ฐ์ค๋ฝ๊ฒ ๊ทธ ๊ฐํ ๋ฌธ์๊ฐ 39๋ฒ์งธ ๋ฐ์ดํธ๋ก ์ฑ์์ง๋ ๊ตฌ์กฐ๋ก ๋ณด์ธ๋ค). ๋์จ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋๋ก ๋ก์ปฌ ๋ฐ์ด๋๋ฆฌ์ ๋ฃ์ด ์ค์ ๋ก ๊ฒ์ฆํ๋ค.
DH{Poly_m0ly_mult1pl1c4t1on_m0dular~!}
Input : Correct, exit=0. ์ด ๋ฌธ์ ๋ needs_vm=False๋ผ ๋ณ๋ ์๊ฒฉ ์๋ฒ ์์ด ์ด ๋ฐ์ด๋๋ฆฌ ์์ฒด๊ฐ ๊ณง ์ฑ์ ๊ธฐ๋ค โ ๋ก์ปฌ์์ ํต๊ณผํ ๊ฒ ๊ณง ์ ๋ต์ด๋ผ๋ ๋ป์ด๋ค. ๋๋ฆผํต์ ์ ์ถํด "์ ๋ต! ํด๊ฒฐ ์ฒ๋ฆฌ๋จ"์ผ๋ก ํ์ ๋๋ค.
๐ ๊ฒฐ๋ก
์ด ๋ฌธ์ ๊ฐ ์ค ์ง์ง ๊ตํ์ ๋ฆฌ๋ฒ์ฑ ์๊ณ ๋ฆฌ์ฆ ์์ฒด๋ณด๋ค "์ด์ํ๋ค"๋ ์ง๊ฐ์ ๊ฒ์ฆ ์์ด ๊ฒฐ๋ก ์ผ๋ก ์น๊ฒฉ์ํค๋ฉด ์ ๋๋ค๋ ์ชฝ์ ๋ ๊ฐ๊น์ ๋ค.
- "๋ง์ด ์ ๋๊ฒ ํฌ๋ค/์ด์ํ๋ค"๋ ํ๋จ์ด ๋ค๋ฉด, ๊ทธ ํ๋จ ์์ฒด๋ฅผ ์์ฌํ๊ธฐ ์ ์ ๋จผ์ ๋๊น์ง ํ์ธํด์ผ ํ๋ค. 1000๊ฐ ๋ ์ฝ๋๋ฅผ ์ค์บํด์ ์ข ๊ฒฐ ์กฐ๊ฑด์ ๋ชป ์ฐพ์์ ๋, "ํ ์ด๋ธ์ด 27000๊ฐ๊ฐ ๋์ ๋ฆฌ ์๋ค"๋ ์ ์ ๋ฅผ ์ธ์ฐ๊ณ ์๊ณ ๋ฆฌ์ฆ ์ค๋ ์ชฝ์ผ๋ก ๋ฐฉํฅ์ ํ์๋ ๊ฒ ๋ ์ธ์ ์ ๋ ๋ฆฐ ๊ทผ๋ณธ ์์ธ์ด์๋ค. ํ์ผ์์ ์ง์ ๋๊น์ง ์ฝ์ด๋ณด๋ ๋ฐ๋ ๋ช ์ด๋ ์ ๊ฑธ๋ฆฐ๋ค โ ๊ฒ์ฆ ๋น์ฉ์ด ์ด๋ ๊ฒ ๋ฎ์ ๋ ๊ฐ์ผ๋ก ํ๋จ์ ๋ด๋ฆด ์ด์ ๊ฐ ์๋ค.
- ๋์ฐ ๋ฃจํ๊ฐ ์๋ฌด๋ฆฌ ๊ธธ์ด๋, ๊ฐ ํญ์ ๊ณ์๊ฐ ์
๋ ฅ๊ณผ ๋ฌด๊ดํ ์์๋ผ๋ฉด ์ ์ฒด๋ ์ ํ์ด๋ค. "๋ณต์กํด ๋ณด์ด๋ ๋ฐ๋ณต๋ฌธ"๊ณผ "์ค์ ๋ก ๋ณต์กํ ๋ฌธ์ "๋ ๋ค๋ฅด๋ค. 27455๋ฒ ๋ฐ๋ณต์ด๋ผ๋ ์ซ์ ์์ฒด์ ๊ฒ๋จน์ง ์๊ณ ๊ฐ ํญ์ ๊ตฌ์กฐ(
f3 * input[f1] * table3[f2]์์input์ ๋บ ๋๋จธ์ง๊ฐ ์ ๋ถ ์์)๋ฅผ ์ง์ด๋ด๋ฉด, ๋ฌธ์ ๋ ์์๊ฐ์ ํ์ค ์ ํ๋์๋ก ํ์๋๋ค. ์ด๋ฐ ํจํด์ ๋คํญ์ ํ๊ฐ, ์ฒดํฌ์ฌ, ํด์๋ฅ ๊ฒ์ฆ๊ธฐ์์ ๋ฐ๋ณต์ ์ผ๋ก ๋ํ๋๋ค โ "๊ฐ์ ๋์ ํ๋ค"๋ ๊ฒ๊ณผ "๊ทธ ๋์ ์ด ์ ๋ ฅ์ ๋ํด ๋น์ ํ์ด๋ค"๋ ๊ฒ์ ๋ณ๊ฐ์ ์ด์ผ๊ธฐ๋ค. - ์์ ๋๊ฐ ๋จ๋ ์์คํ
์์๋ "๊ฒ์ฆ๋์ง ์๋ ๋ฐ์ดํธ"๊ฐ ์ด๋์ธ์ง๋ถํฐ ํ์ธํ๋ ๊ฒ ๋น ๋ฅด๋ค. ๋ญํฌ๊ฐ ๋ฏธ์ง์ ๊ฐ์๋ณด๋ค ํ๋ ์์ ๋, ๊ทธ ์์ ๋ณ์๊ฐ ์ ํํ ์ด๋ค ์
๋ ฅ ๋ฐ์ดํธ์ ๋์ํ๋์ง ๋ณด๋ฉด(์ด๋ฒ์
input[38]) ๊ทธ ๋ฐ์ดํธ๊ฐ ๊ฒ์ฆ ๋ก์ง์์ ์์ ํ ๋ฐฐ์ ๋๋ค๋ ๊ฑธ ๋ฐ๋ก ์ ์ ์๋ค โ ์์๊ฐ์ ๋ฃ์ด๋ ๋๋ ์ด์ ๋ฅผ ์ถ์ธกํ ํ์ ์์ด ์์คํ ์ด ์ค์ค๋ก ์๋ ค์ค๋ค. - GDB๋ก ์ค์ธกํ๋ ์ต๊ด์ ์ข์ง๋ง, ๋น๊ต ๋์์ด ๋๋ "์์ธก ๋ชจ๋ธ" ์์ฒด๊ฐ ํ๋ ธ๋ค๋ฉด ๋ถ์ผ์น๋ ์๋ฌด๊ฒ๋ ์ฆ๋ช ํ์ง ๋ชปํ๋ค. ๊ทธ๋์์ GDB ์ค์ธก๊ณผ ์์ธก์ ๋ถ์ผ์น๋ฅผ "์ ์ ๋ถ์์ด ํ๋ ธ๋ค"๋ ํ์ฆ์ผ๋ก ์ผ์๋๋ฐ, ์ฌ์ค ์์ธก ๋ชจ๋ธ์ด ์ ์ด์ ๋ฃจํ ๊ธธ์ด๋ฅผ ์๋ชป ๊ฐ์ ํ ์ฑ๋ก ๋ง๋ค์ด์ก์ผ๋ ์ ๋ง๋ ๊ฒ ๋น์ฐํ๋ค. ๋์ ๊ฒ์ฆ์ "์ด ๋ชจ๋ธ์ด ๋ง๋์ง"๋ฅผ ํ์ธํ๋ ๋๊ตฌ์ง, ๋ชจ๋ธ์ ์ ์ ์์ฒด๊ฐ ์๋ชป๋์ ๋ ์์ธ์ ์๋ ค์ฃผ๋ ๋๊ตฌ๋ ์๋๋ค.
๋ฐฉ์ด์ ๊ด์ ์์ ๋ณด๋ฉด, ์ด๋ฐ "ํ๋ฉด์ ์ผ๋ก๋ ๋ณต์กํด ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ์ ํ์ธ" ๊ฒ์ฆ ๋ก์ง์ ๋ฆฌ๋ฒ์ฑ ๋์ด๋๋ฅผ ์ฌ๋ฆฌ๋ ๋ฐ ๊ทธ๋ค์ง ํจ๊ณผ์ ์ด์ง ์๋ค. ์ง์ง ๋น์ ํ์ฑ(S-box, ๋ผ์ด๋ ํจ์์ ๋นํธ์ฐ์ฐ, ์กฐ๊ฑด ๋ถ๊ธฐ์ ๋ฐ๋ฅธ ๊ฒฝ๋ก ๋ค์ํ)์ด ์์ด์ง ์๋ ํ, ์๋ฌด๋ฆฌ ๋ฐ๋ณต ํ์๋ฅผ ๋๋ ค๋ ์ ํ๋์ ํ ๋ฐฉ์ผ๋ก ํ๋ฆฌ๋ ๊ตฌ์กฐ๋ผ๋ ๊ฑธ ์ด๋ฒ ๋ฌธ์ ๊ฐ ์ ๋ณด์ฌ์ค๋ค.
Comments
๋๊ธ
๋๊ธ์ ๋จ๊ธฐ๋ ค๋ฉด ๋ก๊ทธ์ธ์ด ํ์ํด์. (๋ค์ด๋ฒ ยท ๊ตฌ๊ธ ๊ณ์ )
๋๊ธ ๋ถ๋ฌ์ค๋ ์คโฆ