728x90

๋ฆฌ๋ฒ„์‹ฑ ์—”์ง€๋‹ˆ์–ด๋ง(Reverse Engineering)

  • ๋ฆฌ๋ฒ„์‹ฑ ์—”์ง€๋‹ˆ์–ด๋ง(Reverse Engineering)์€ ๊ธฐ์กด์˜ ์†Œํ”„ํŠธ์›จ์–ด๋‚˜ ํ•˜๋“œ์›จ์–ด๋ฅผ ๋ถ„์„ํ•˜์—ฌ ์›๋ž˜ ์„ค๊ณ„, ๊ตฌ์กฐ, ์ฝ”๋“œ, ๋™์ž‘ ์›๋ฆฌ๋ฅผ ํŒŒ์•…ํ•˜๋Š” ๊ธฐ์ˆ ์  ๊ณผ์ •์œผ๋กœ ๋ณดํ†ต ์†Œํ”„ํŠธ์›จ์–ด ๋ฆฌ๋ฒ„์‹ฑ์˜ ๊ฒฝ์šฐ, ์ปดํŒŒ์ผ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ(์‹คํ–‰ ํŒŒ์ผ)์„ ์—ญ๋ถ„์„ํ•˜์—ฌ ์†Œ์Šค ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ์ดํ•ดํ•˜๊ณ , ํ”„๋กœ๊ทธ๋žจ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€๋ฅผ ๋ถ„์„ํ•˜๋Š”๋ฐ ์ดˆ์ ์„ ๋‘”๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์ด๋ž€?

  • ์—ฐ์‚ฐ์žฅ์น˜๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋™์ž‘์„ ์ •์˜ํ•œ ์ผ์ข…์˜ ๋ฌธ์„œ๋กœ binary๋ผ๊ณ  ๋งํ•œ๋‹ค.

๊ณ ๊ธ‰์–ธ์–ด๊ฐ€ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ๋˜๋Š” ๊ณผ์ •

์ „์ฒ˜๋ฆฌ → ์ปดํŒŒ์ผ → ์–ด์…ˆ๋ธ” → ๋งํฌ → EXE ํŒŒ์ผ

1. ์ „์ฒ˜๋ฆฌ(Preprocess)

  • ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ์ปดํŒŒ์ผํ•˜๊ธฐ ์ „์— ํ•„์š”ํ•œ ํ˜•์‹์œผ๋กœ ๊ฐ€๊ณตํ•˜๋Š” ๊ณผ์ •
  • ์ฃผ์š” ๊ธฐ๋Šฅ
    • ์ฃผ์„ ์ œ๊ฑฐ
    • ๋งคํฌ๋กœ ์น˜ํ™˜
    • ํŒŒ์ผ ๋ณ‘ํ•ฉ

2. ์ปดํŒŒ์ผ(Compile)

  • C๋กœ ์ž‘์„ฑ๋œ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ.
  • ์ด ๊ณผ์ •์—์„œ ๋ฌธ๋ฒ•์  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅ
  • ์ตœ์  ๊ธฐ์ˆ  ์ ์šฉ(์˜ต์…˜)

3. ์–ด์…ˆ๋ธ”(Assemble)

  • ์ปดํŒŒ์ผ๋กœ ์ƒ์„ฑ๋œ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ์ฝ”๋“œ๋ฅผ ELF ํ˜•์‹์˜ Object file๋กœ ๋ณ€ํ™”ํ•˜๋Š” ๊ณผ์ •
  • Object file๋กœ ๋ณ€ํ™˜์ด ๋˜๋ฉด ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๊ฐ€ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ๋จ.
  • Gcc์—์„œ -c ์˜ต์…˜์„ ํ†ตํ•ด add.S๋ฅผ ๋ชฉ์ ํŒŒ์ผ๋กœ ๋ณ€ํ™˜๊ฐ€๋Šฅ. 

4. ๋งํฌ(Link)

  • ์—ฌ๋Ÿฌ ๋ชฉ์  ํŒŒ์ผ๋“ค์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์‹คํ–‰๊ฐ€๋Šฅํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •
  • ๋งํฌ๋ฅผ ํ•˜๋ฉด ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” exe ํŒŒ์ผ, ์ฆ‰ ํ”„๋กœ๊ทธ๋žจ์ด ์™„์„ฑ๋จ.

๋””์Šค์–ด์…ˆ๋ธ”(Disassemble)

  • ๊ธฐ๊ณ„์–ด๋กœ ์ž‘์„ฑ๋œ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์„ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…
  • ์ปดํ“จํ„ฐ๊ฐ€ ์ง์ ‘ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋Š” ์ธ๊ฐ„์—๊ฒŒ ์ฝ๊ธฐ ์–ด๋ ต๊ธฐ ๋•Œ๋ฌธ์—, ๋””์Šค์–ด์…ˆ๋ธ” ๊ณผ์ •์„ ๊ฑฐ์ณ ์‚ฌ๋žŒ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.

๋””์ปดํŒŒ์ผ(Decompile)

  • ๋””์ปดํŒŒ์ผ์€ ๋””์Šค์–ด์…ˆ๋ธ”๋ณด๋‹ค ํ•œ ๋‹จ๊ณ„ ๋” ๋‚˜์•„๊ฐ€, ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋ณ€ํ™˜๋œ ์ฝ”๋“œ๋ฅผ ๊ณ ๊ธ‰ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…
  • ์ด๋ฅผ ํ†ตํ•ด ์›๋ž˜์˜ ์†Œ์Šค ์ฝ”๋“œ์™€ ์œ ์‚ฌํ•œ ํ˜•ํƒœ๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋””์Šค์–ด์…ˆ๋ธ” ๋ฐ ๋””์ปดํŒŒ์ผ ์ดํ›„ ๋ถ„์„ ๋ฐฉ๋ฒ•

์ •์  ๋ถ„์„(Static Analysis)

  • ํ”„๋กœ๊ทธ๋žจ์„ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ , ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ํ”„๋กœ๊ทธ๋žจ์˜ ์•ˆ์ „์„ฑ์„ ์œ ์ง€ํ•œ ์ฑ„๋กœ ๋ถ„์„์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์•…์„ฑ ์ฝ”๋“œ๋‚˜ ์œ„ํ—˜ํ•œ ์ฝ”๋“œ์˜ ์‹คํ–‰์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋™์  ๋ถ„์„(Dynamic Analysis)

  • ํ”„๋กœ๊ทธ๋žจ์„ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜๋ฉด์„œ, ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์„ ์ถ”์ ํ•˜๊ณ  ๋ถ„์„ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • ํ”„๋กœ๊ทธ๋žจ์ด ์‹ค์ œ๋กœ ์–ด๋–ค ํ–‰๋™์„ ํ•˜๋Š”์ง€ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‹คํ–‰ ์‹œ์ ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ๋‚˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ณผ์ • ๋“ฑ์„ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ปดํ“จํ„ฐ ๊ตฌ์กฐ(Computer Architecture)

  • ์ปดํ“จํ„ฐ๊ฐ€ ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋“œ์›จ์–ด ๋ฐ ์†Œํ”„ํŠธ์›จ์–ด ๊ธฐ๋Šฅ์„ ๊ณ ์•ˆํ•˜๊ณ , ์ด๋“ค์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•
  • CPU์— ๋Œ€ํ•œ ์„ค๊ณ„ = ๋ช…๋ น์–ด ์ง‘ํ•ฉ ๊ตฌ์กฐ
    • ARM, x86 or x86-64, x64๋“ฑ
  • x86-64 ๋ฐ x64์˜ ์•„ํ‚คํ…์ฒ˜ : ๋ ˆ์ง€์Šคํ„ฐ
    • ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ - eax, ebx, ecx, edx
    • ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ
    • ๋ช…๋ น์–ด ํฌ์ธํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ
    • ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ

๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ

  • eax: ๊ณฑ์…ˆ๊ณผ ๋‚˜๋ˆ—์…ˆ ๋ช…๋ น์—์„œ ์ž๋™์œผ๋กœ ์‚ฌ์šฉ, ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์ด ์ €์žฅ
  • ebx: ESI๋‚˜ EDI์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ์ธ๋ฑ์Šค์— ์‚ฌ์šฉ
  • ecx: ๋ฐ˜๋ณต ๋ช…๋ น์–ด ์‚ฌ์šฉ ์‹œ ์นด์šดํ„ฐ๋กœ ์‚ฌ์šฉ
  • edx: eax์™€ ๊ฐ™์ด ์‚ฌ์šฉ, ๋ถ€ํ˜ธํ™•์žฅ ๋ช…๋ น
  • esp: stack point(์Šคํƒ์œผ๋กœ๋งŒ ๋ชจ๋“  ๊ฒƒ๋“ค์„ ๊ตฌ๋ณ„) 
  • ESI: ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜, ๋ณต์‚ฌ ์‹œ์— ์†Œ์Šค ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ
  • EDI: ๋ณต์‚ฌ ์‹œ์— ๋ชฉ์ ์ง€์˜ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ

Q) AX์— E21F๋ฅผ ๋Œ€์ž…ํ•˜๋ฉด

A) AH = E2, AL = 1F

 

Q) EAX์— 1234 0000์„ ๋Œ€์ž…ํ•˜๋ฉด? ๊ทธ ํ›„ AL์— 12๋ฅผ ๋Œ€์ž…?

A) AX = 0000, AH = 00, AL = 00

AL = 12, AX = 0012, EAX = 12340012

์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ

  • 6๊ฐ€์ง€ ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ ์กด์žฌ - CS, DS, ES, FS, GS
  • ๊ฐ ๋ ˆ์ง€์Šคํ„ฐ์˜ ํฌ๊ธฐ๋Š” 16๋น„ํŠธ
  • X64๋กœ ์•„ํ‚คํ…์ฒ˜๊ฐ€ ํ™•์žฅ๋˜๋ฉด์„œ ์šฉ๋„์— ํฐ ๋ณ€ํ™”๊ฐ€ ์ƒ๊น€

๋ช…๋ น์–ด ํฌ์ธํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ

  • ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ์ž‘์„ฑ๋˜์–ด ์žˆ์Œ
  • ์ด ์ค‘์—์„œ CPU๊ฐ€ ์–ด๋Š ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ• ์ง€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ
  • x64์—์„œ๋Š” rip

ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ

  • ํ”„๋กœ์„ธ์„œ์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๋ ˆ์ง€์Šคํ„ฐ
    • CF(Carry Flag): ๋ถ€ํ˜ธ ์—†๋Š” ์ˆ˜์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋น„ํŠธ์˜ ๋ฒ”์œ„๋ฅผ ๋„˜์„ ๊ฒฝ์šฐ ์„ค์ •
    • ZF(Zero Flag): ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ€ 0์ผ ๊ฒฝ์šฐ ์„ค์ •
    • SF(Sign Flag): ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๊ฐ€ ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ ์„ค์ •
    • OF(Overflow Flag): ๋ถ€ํ˜ธ ์žˆ๋Š” ์ˆ˜์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋น„ํŠธ ๋ฒ”์œ„๋ฅผ ๋„˜์„ ๊ฒฝ์šฐ ์„ค์ •

์–ด์…ˆ๋ธ”๋ฆฌ์–ด

์–ด์…ˆ๋ธ”๋ฆฌ์–ด ๊ตฌ์กฐ

 

ํ”ผ์—ฐ์‚ฐ์ž

  • ์ƒ์ˆ˜
  • ๋ ˆ์ง€์Šคํ„ฐ
  • ๋ฉ”๋ชจ๋ฆฌ
    • BYTE(1byte)
    • WORD(2byte)
    • DWORD(4byte)
    • QWORD(8byte)

ex) QWORD PTR[0x8048000]: 0x8048000์˜ ๋ฐ์ดํ„ฐ๋ฅผ 8๋ฐ”์ดํŠธ๋งŒํผ ์ฐธ์กฐํ•˜๋ผ.

 


๋ช…๋ น์–ด

๋ฐ์ดํ„ฐ ์ด๋™

  • mov dest, src

์‚ฐ์ˆ  ์—ฐ์‚ฐ

  • INC reg
    • INC: ํ”ผ์—ฐ์‚ฐ์ž์— 1์„ ๋”ํ•จ
  • DEC reg
    • DEC: ํ”ผ์—ฐ์‚ฐ์ž์— 1์„ ๋นผ๊ธฐ
  • ADD dsst, src
    • ADD: dest์— src๊ฐ’์„ ๋”ํ•ด์„œ dest์— ์ €์žฅ
    • ์—ฐ์‚ฐ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ZF, OF, CF๊ฐ€ ์„ค์ •๋จ
  • SUB dest, src
    • SUB: dest์— src๊ฐ’์„ ๋นผ์„œ dest์— ์ €์žฅ
    • ์—ฐ์‚ฐ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ZF, CF๊ฐ€ ์„ค์ •๋จ
  • MUL reg
    • MUL: ๋ถ€ํ˜ธ ์—†๋Š” AL, AX, EAX์˜ ๊ฐ’์„ ํ”ผ์—ฐ์‚ฐ์ž์™€ ๊ณฑ์…ˆ
    • ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ OF, ZF ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •
  • DIV reg
    • DIV: 8, 16, 32๋น„ํŠธ ๋ถ€ํ˜ธ์—†๋Š” ์ •์ˆ˜์˜ ๋‚˜๋ˆ—์…ˆ ์ˆ˜ํ–‰
    • ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ CF, OF, ZF ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •
    • ๋‚˜๋จธ์ง€ = DX, ๋ชซ = AX

๋น„๊ต ์—ฐ์‚ฐ

  • CMP dest, src
    • CMP: ๋‘ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๊ณ , ํ”Œ๋ž˜๊ทธ ์„ค์ •
    • dest - src ํ•ด์„œ ๋น„๊ต
      • dest = src => ZF = 1
      • dest != src => ZF = 0
      • ZF ์ดˆ๊นƒ๊ฐ’ = 0

๋ถ„๊ธฐ ์—ฐ์‚ฐ

: rip๋ฅผ ์ด๋™์‹œ์ผœ์„œ ์‹คํ–‰ํ๋ฆ„์„ ๋ฐ”๊ฟˆ

  • jmp addr: addr๋กœ rip ์ด๋™
  • je addr: ์ง์ „์— ๋น„๊ตํ•œ ๋‘ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ๊ฐ™์œผ๋ฉด ์ ํ”„
  • je ๋ฐ˜๋Œ€ = jne

ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ช…๋ น์–ด

  • CALL reg
    • CALL: ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์–ด
    • jmp์™€ ๊ฐ™์ด ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํ๋ฆ„์ด ๋ณ€๊ฒฝ๋˜์ง€๋งŒ return ์ฃผ์†Œ๋ฅผ ์Šคํƒ์— ์ €์žฅ

'EVI$ION > 7th' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[EVI$ION] Pwnable  (2) 2024.11.21
[EVI$ION] #3 - Digital Forensic Assignment  (5) 2024.10.06
[EVI$ION] #2 - Web Hacking Assignment  (1) 2024.09.26
[EVI$ION] #1 - Web Hacking Assignment  (1) 2024.09.19

+ Recent posts