ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • REVERSING ์‹œ์ž‘ํ•˜๊ธฐ - ๊ธฐ์ดˆ ๊ฐœ๋…2 :: ๋ ˆ์ง€์Šคํ„ฐ(Register)
    SECURITY/REVERSING 2020. 7. 8. 17:10

     

    ๋ ˆ์ง€์Šคํ„ฐ(Register)

    : CPU ๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๋‹ค๋ชฉ์  ๊ณต๊ฐ„์ด๋‹ค.

    ๊ทนํžˆ ์†Œ๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋‚˜ ์ฒ˜๋ฆฌ ์ค‘์ธ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ๊ธฐ์–ตํ•ด ๋‘๋Š” ์˜์—ญ์ด๋‹ค.

    RAM ์„ ๊ฑฐ์น˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. ๋งŒ์ผ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ๋ชจ์ž๋ผ๋ฉด Stack ์„ ์‚ฌ์šฉํ•œ๋‹ค. 

    EAX > EDX > ECX > EBX ์ˆœ์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค

     

     

    ๋ ˆ์ง€์Šคํ„ฐ(32bit) ์˜ ์ข…๋ฅ˜

     

     

    1. ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ (EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP ๋“ฑ)

    : ๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋“ค.

      ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์ž„์‹œ ์ €์žฅ ๊ณต๊ฐ„์œผ๋กœ, ์—ฐ์‚ฐ ์ฒ˜๋ฆฌ ๋ฐ ๋ฒˆ์ง€ ์ง€์ •์„ ๋„์™€์ค€๋‹ค.

      ๊ฐ ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ๋“ค์˜ ํฌ๊ธฐ๋Š” 32 bit ์ด๋‹ค.

      (์ฐธ๊ณ : ๊ฐ ๋ ˆ์ง€์Šคํ„ฐ ์•ž์˜ E ๋Š” Extended ๋ฅผ ์˜๋ฏธํ•˜๊ณ ,

       32bit ํ™˜๊ฒฝ์ด ๋˜๋ฉด์„œ 16bit ๋ ˆ์ง€์Šคํ„ฐ์ธ AX, BX ๋“ฑ์„ ํ™•์žฅํ•œ ๊ฒƒ์ด๋‹ค.

       AX ๋„ 8bit ๋‘ ๊ฐœ๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ, ์™ผ์ชฝ 8 bit ๋ฅผ '์ƒ์œ„(High)' ๋ผ๊ณ  AH, ์˜ค๋ฅธ์ชฝ 8 bit ๋ฅผ 'ํ•˜์œ„(Low)'๋ผ๊ณ  AL ์ด๋ผ ํ•œ๋‹ค.)

     

     

    1) EAX (Extended Accumulator Register)

    : ์‚ฐ์ˆ  ๊ณ„์‚ฐ & ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’ ์ €์žฅ

      (ex. ๋”ํ•˜๊ธฐ, ๋นผ๊ธฐ, return false)

     

    2) EBX (Extended Base Register)

    : ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ €์žฅ

      ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ๋” ํ•„์š”ํ•  ๋•Œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋‚˜ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์•Œ์•„์„œ ๋งŒ๋“ค์–ด ์“ด๋‹ค.

     

    3) ECX (Extended Counter Register)

    : ๋ฐ˜๋ณต๋ฌธ์—์„œ ์นด์šดํŒ….

      ECX ์— ์–‘์ˆ˜๊ฐ’์„ ๋„ฃ๊ณ , ๊ฐ์†Œ์‹œํ‚ค๋ฉฐ ์นด์šดํ„ฐ๊ฐ€ 0์ด ๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต๋ฌธ์„ ์‹คํ–‰ํ•œ๋‹ค.

      ์นด์šดํŒ…ํ•  ํ•„์š”๊ฐ€ ์—†์„ ๋•Œ๋Š” ๋ณ€์ˆ˜๋กœ ์‚ฌ์šฉํ•œ๋‹ค. 

     

    4) EDX (Extended Data Register)

    : ๊ฐ์ข… ์—ฐ์‚ฐ. EAX ์™€ ๋ฆฌํ„ด๊ฐ’ ์ œ์™ธํ•˜๊ณ ๋Š” ์—ญํ• ์ด ๊ฐ™๋‹ค.

    ์ฃผ๋กœ ๋” ํฐ ์—ฐ์‚ฐ์„ EAX ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋œ๋‹ค.

     

    ์ด ๋„ค ๊ฐ€์ง€๋Š” ์ฃผ๋กœ ์—ฐ์‚ฐ๊ณผ ๋ฐ์ดํ„ฐ์— ์‚ฌ์šฉ๋œ๋‹ค.

     

     

    ESI ์™€ EDI ๋Š” ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ, ๊ฐ์ข… ๋ฐ˜๋ณต ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋“ฑ์— ์‚ฌ์šฉํ•œ๋‹ค.

    5) ESI (Extended Sourse Index Register) : ์‹œ์ž‘์ง€ ์ธ๋ฐ์Šค

    6) EDI (Extended Destination Index Register) : ๋ชฉ์ ์ง€ ์ธ๋ฑ์Šค

     

     

    ESP ์™€ EBP ๋Š” Stack ์„ ๊ด€๋ฆฌํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ์ด๋‹ค.

     

    7) ESP (Extended Stack Point Register)

    : ์Šคํƒ์˜ ๋งˆ์ง€๋ง‰ ์ฃผ์†Œ๋ฅผ ์ €์žฅ

      PUSH, POP ๋ช…๋ น์— ๋”ฐ๋ผ ESP ๊ฐ’์ด 4 byte ์”ฉ ์ด๋™

     

    8) EBP(Extended Base Point Register)

    : ์Šคํƒ์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ์ €์žฅ

      ์Šคํƒํ”„๋ ˆ์ž„์ด ์†Œ๋ฉธ๋˜์ง€ ์•Š๋Š” ์ด์ƒ EBP ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์€ ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

      ํ˜„์žฌ์˜ ์Šคํ…ํ”„๋ ˆ์ž„์ด ์†Œ๋ฉธ๋˜๋ฉด ์ด์ „์— ์‚ฌ์šฉํ–ˆ๋˜ ์Šคํƒ ํ”„๋ ˆ์ž„์„ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค.

     

    ESI, EDI, ESP, EBP ๋Š” ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค.

     

     

    * Stack Frame ์Šคํƒ ํ”„๋ ˆ์ž„

    :  (ESP ๊ฐ€ ์•„๋‹Œ) EBP ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํƒ ๋‚ด์˜ ๋กœ์ปฌ ๋ณ€์ˆ˜, ํŒŒ๋ผ๋ฏธํ„ฐ, ๋ณต๊ท€ ์ฃผ์†Œ์— ์ ‘๊ทผํ•˜๋Š” ๊ธฐ๋ฒ•

      ์ฆ‰, ๊ฐ ํ•จ์ˆ˜๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์Šคํƒ์˜ ์˜์—ญ

     

     

    ์‹ค์ œ ์‚ฌ์šฉ ์‹œ์—๋Š” EAX, ECX ๋Š” ์œ„์— ์จ์ง„ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ, ๋‚˜๋จธ์ง€ ๋ ˆ์ง€์Šคํ„ฐ๋Š” OS ๊ฐ€ ์ง€์ •ํ•ด์„œ ํ•˜๋ฏ€๋กœ ์ € ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์„ ๋–„๊ฐ€ ๋งŽ๋‹ค.

     

     

     

    2. ์„ธ๊ทธ๋จผํŠธ(Segment) ๋ ˆ์ง€์Šคํ„ฐ (CS, SS, DS ๋“ฑ)

    ์ด 6๊ฐœ๊ฐ€ ์žˆ๊ณ , ํฌ๊ธฐ๋Š” ๊ฐ๊ฐ 16 bit ์ด๋‹ค. 

    ๋ฉ”๋ชจ๋ฆฌ์˜ ํŠน์ • ์˜์—ญ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ์ด๋‹ค.

    ๋ฉ”๋ชจ๋ฆฌ์˜ ์˜์—ญ์„ ์šฉ๋„์— ๋”ฐ๋ผ ์„ธ๊ทธ๋จผํŠธ๋กœ ๋‚˜๋ˆ„์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

     

    ํŽ˜์ด์ง•์ด ์—†๋˜ ์‹œ์ ˆ, ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ๊ด€๋ฆฌ/๋ถ„๋ฆฌ ๋“ฑ์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉ๋˜์—ˆ๊ณ , ์˜›๋‚  ์‹œ์Šคํ…œ๊ณผ์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋“ค์€ ๊ทธ๋Œ€๋กœ 16 bit ๋กœ ๋‚จ์•„์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

     

    ๊ฐ ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์„ธ๊ทธ๋จผํŠธ ๋””์Šคํฌ๋ฆฝํ„ฐ์™€ ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์กฐํ•ฉ๋˜์–ด ์„ ํ˜• ์ฃผ์†Œ๊ฐ€ ๋˜๋ฉฐ, ํŽ˜์ด์ง• ๊ธฐ๋ฒ•์— ์˜ํ•ด ์„ ํ˜• ์ฃผ์†Œ๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ณ€ํ™˜๋œ๋‹ค. (๋งŒ์•ฝ OS ์—์„œ ํŽ˜์ด์ง•์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์„ ํ˜• ์ฃผ์†Œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฌผ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๋œ๋‹ค)

     

    CS (Code Seagment) ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ์ €์žฅ
    SS (Stack Segment) ์Šคํƒ ์‹œ๊ทธ๋จผํŠธ์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ์ €์žฅ
    DS (Data Seagment) ๋ฐ์ดํ„ฐ ์˜์—ญ์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ์ €์žฅ
    ES (Extra Segment) ๋ฌธ์ž์—ด ๋ช…๋ น์—์„œ ๋ชฉ์ ์ง€ ์—ฐ์‚ฐ์ž๊ฐ€ ์œ„์น˜ํ•˜๋Š” ์„ธ๊ทธ๋จผํŠธ ์ฃผ์†Œ
    GS ๊ธฐํƒ€ ์—ฌ๋ถ„
    FS ๊ธฐํƒ€ ์—ฌ๋ถ„

    ๊ฐ ์„ธ๊ทธ๋จผํŠธ ์ฃผ์†Œ์— ๋ช…๋ น์–ด ํฌ์ธํŠธ ๋ ˆ์ง€์Šคํ„ฐ/์Šคํƒ ํฌ์ธํ„ฐ(SP) ๋ ˆ์ง€์Šคํ„ฐ์˜ ์˜คํ”„์…‹ ๊ฐ’์„ ๋”ํ•˜๋ฉด, ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์™€์•ผ ํ•  ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ/์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์Šคํƒ์˜ ํ˜„์žฌ ์œ„์น˜๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.

    ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์ด ๋ ˆ์ง€์Šคํ„ฐ๋“ค์„ ์ง์ ‘ ์ฐธ์กฐํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

     

    (16 bit ์„ธ๊ทธ๋จผํŠธ ์‹œ์Šคํ…œ์—์„œ๋Š” ์ขŒ์ธก์œผ๋กœ  4bit ์‹œํ”„ํŠธ๋ฅผ ํ•˜๊ณ  ์˜คํ”„์…‹ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์‹œํ”„ํŠธํ•œ ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ์™€ ํ•ฉํ•˜์—ฌ ์œ„์น˜๋ฅผ ์ •ํ•œ๋‹ค.)

     

     

     

    3. ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ (ZF, OF, SF, CF ๋“ฑ)

     

    32bit EFlag ๋Š” ์ปดํ“จํ„ฐ ํ–‰๋™(์‚ฐ์ˆ  ์—ฐ์‚ฐ ๋“ฑ)์˜ ์ƒํƒœ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ํ”Œ๋ž˜๊ทธ ๋น„ํŠธ๋ฅผ ์ €์žฅํ•œ๋‹ค.

    ์‹คํ–‰ ์ˆœ์„œ์˜ ๋ถ„๊ธฐ(์กฐ๊ฑด๋ฌธ ๋“ฑ)์„ ์ •ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

     

    ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์ •ํ•ด์ง€๋Š” ์ƒํƒœ ํ”Œ๋ž˜๊ทธ์™€ ํ”„๋กœ์„ธ์„œ์˜ ๋™์ž‘ ์ƒํƒœ๋ฅผ ์ œ์–ดํ•˜๋Š” ์ œ์–ด ํ”Œ๋ž˜๊ทธ๋กœ ๋‚˜๋‰œ๋‹ค.

     

    3.1 ์ƒํƒœ ํ”Œ๋ž˜๊ทธ

    ZF (Zero Flag) ๋น„ํŠธ 6 ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ 0 ์ด๋ฉด 1๋กœ ์„ธํŠธ, ์•„๋‹ˆ๋ฉด 0์œผ๋กœ ๋ฆฌ์…‹
    OF (Overflow Flag) ๋น„ํŠธ 11 overflow/underflow ๋ฐœ์ƒ ์‹œ 1๋กœ ์„ธํŠธ, ์•„๋‹ˆ๋ฉด 0์œผ๋กœ ๋ฆฌ์…‹
    SF (Sign Flag) ๋น„ํŠธ 7 ์ตœ์ƒ์œ„ ๋น„ํŠธ๊ฐ€ 1์ผ ๋•Œ 1๋กœ ์„ธํŠธ, ์•„๋‹ˆ๋ฉด 0์œผ๋กœ ๋ฆฌ์…‹
    CF (Carry Flag) ๋น„ํŠธ 0 ์ตœ์ƒ์œ„ ๋น„ํŠธ์— ์ž๋ฆฌ์˜ฌ๋ฆผ(CARRY) / ๋นŒ๋ฆผ(BORROW) ๋ฐœ์ƒ ์‹œ 1๋กœ ์„ธํŠธ, ์•„๋‹ˆ๋ฉด 0์œผ๋กœ ๋ฆฌ์…‹
    PF (Parity Flag) ๋น„ํŠธ 2 1๋กœ ๋œ ๋น„ํŠธ์˜ ์ˆ˜๊ฐ€ ์ง์ˆ˜๊ฐœ์ผ ๋•Œ 1๋กœ ์„ธํŠธ, ํ™€์ˆ˜๊ฐœ์ผ ๋•Œ 0์œผ๋กœ ๋ฆฌ์…‹
    AF (Auxilary Flag) ๋น„ํŠธ 4 ํ•˜์œ„ ๋น„ํŠธ๋กœ๋ถ€ํ„ฐ ์ƒ์œ„ ๋น„ํŠธ๋กœ ์ž๋ฆฌ์˜ฌ๋ฆผ/๋นŒ๋ฆผ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ 1๋กœ ์„ธํŠธ, ์•„๋‹ˆ๋ฉด 0์œผ๋กœ ๋ฆฌ์…‹

    CF, AF ๋Š” ์ž‘์„ฑ๋œ ์‚ฌํ•ญ ์™ธ์˜ ๊ฒฝ์šฐ์—๋„ ์‚ฌ์šฉ๋˜๊ธฐ๋„ ํ•œ๋‹ค.

     

     

    3.2 ์ œ์–ด ํ”Œ๋ž˜๊ทธ

    DF (Direction Flag) ๋น„ํŠธ 10 ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ์˜ ๋ฐฉํ–ฅ์„ ์ œ์–ด. 0 ์ด๋ฉด ์ฆ๊ฐ€, 1์ด๋ฉด ๊ฐ์†Œ
    IF (Interrupt enable Flag) ๋น„ํŠธ 9 ์™ธ๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ์˜ ํ—ˆ์šฉ์„ ์ œ์–ด. 1์ด๋ฉด ํ—ˆ์šฉ, 0์ด๋ฉด ๊ธˆ์ง€
    TF (Trap enable Flag) ๋น„ํŠธ 8 ๋‚ด๋ถ€ ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์ œ์–ด. 1์ด๋ฉด ํ•˜๋‚˜์˜ ๋ช…๋ น์–ด ๋๋‚  ๋•Œ๋งˆ๋‹ค ๋ฐœ์ƒ (= trace bit)

     

    ๋น„ํŠธ ์œ„์น˜๋ฅผ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

    15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
            OF DF IF TF SF ZF   AF   PF   CF

    (ํšŒ์ƒ‰ ์นธ์€ ์˜๋ฏธ ์—†์Œ)

     

    4. ์ธ์ŠคํŠธ๋Ÿญ์…˜ ํฌ์ธํ„ฐ (IP) = PC (Program Counter)

    16 bit ๋กœ, ์‹คํ–‰์ฝ”๋“œ์˜ ์–ด๋Š ์œ„์น˜๋ฅผ ์‹คํ–‰ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ์ด๋‹ค.

    ์ฆ‰, ๋‹ค์Œ์— ์‹คํ–‰๋  ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ง€๊ณ  ์‹คํ–‰ํ•  ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ์˜ ์œ„์น˜๋ฅผ ์ง€์ •ํ•œ๋‹ค.

     

    ์ธํ…”์˜ x86 ๊ณ„์—ด์˜ CPU ์—์„œ IP ๋ผ๊ณ  ํ•œ๋‹ค.

    ๋Œ“๊ธ€

Designed by Tistory.