๐Ÿ”ฌโ”‚Reversing & Cryptography/๐Ÿ”โ”‚Etc..

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

Jastes 2023. 3. 14. 11:42

์–ด์…ˆ๋ธ”๋ฆฌ์–ด(Assemble)

ํ•™์Šต ๋ชฉํ‘œ์˜ ์ด์œ ๊ฐ€ bootloader๋ฅผ ๊ตฌ์„ฑํ•˜๋Š”๋ฐ ํ•„์š”ํ•˜๋‹ค๊ณ  ํ•˜์‹œ๋„ค์š”
์ฐธ๊ณ ๋กœ ๋ถ€ํŠธ๋กœ๋”๋Š” PC ์‹คํ–‰ ์‹œ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด์˜ˆ์š”

์•Œ๋“ค์‹ ์žก

์–ด์…ˆ๋ธ”๋ฆฌ์–ด(Assembly)์— ๋Œ€ํ•˜์—ฌ ๋ณด์•ˆ๊ด€์ ์—์„œ ํ˜น์€ ๋” ์•Œ์•„๊ฐ€๊ณ 
๋” ๋‚˜์•„๊ฐ€ ํ’€๊ณ  ํ•™์Šตํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์•„๋ก€ ๋งํฌ๋กœ..

 

x86 Assembly: Essential Part

ํ•ด์ปค์˜ ์–ธ์–ด: ์–ด์…ˆ๋ธ”๋ฆฌ๐Ÿ’ฌ PC์—์„œ ๋ณต์žกํ•œ ๋…ผ๋ฆฌ์  ์ธ๊ณผ๊ด€๊ณ„, ์—ฌ๋Ÿฌ ๊ฐœ์ฒด๊ฐ€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋ฉฐ ๊ทธ ์„ธ๊ณ„์—์„œ ํ†ต์šฉ๋˜๋Š” ๊ธฐ๊ณ„์–ด(Machine Code)์–ธ์–ด ํ•ต์‹ฌ! ์‹œ์Šคํ…œ ํ•ดํ‚น์„ ํ•  ๋•Œ๋Š” ์ปดํ“จํ„ฐ ์–ธ์–ด, ์šด์˜์ฒด์ œ, ๋„คํŠธ์›Œ

dystopia050119.tistory.com

 

 

Quiz: x86 Assembly

Quiz: x86 Assembly 1 ์œ„ ๋ฌธ์ œ๋ฅผ ํ•ด์„ํ•œ ๋ถ€๋ถ„์ด๋ฉฐ, Dreamhack์˜ ๋‚ด์šฉ์ž…๋‹ˆ๋‹น ์•ž์ฌ ๋‚ด์šฉ์—์„œ ๋Œ€์ถฉ ๋ช…๋ น์–ด์™€ ํ•ด๋‹น ๋ ˆ์ง€์Šคํ„ฐ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ํ–ˆ์œผ๋ฏ€๋กœ ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•˜๊ณ  ๋„˜์–ด๊ฐˆ๊ป˜์š” dl : RDX(64byte) → EDX(ํ•˜์œ„ 3

dystopia050119.tistory.com

์ œ๊ฐ€ ์–ด์…ˆ ์ •๋ฆฌ๋ž‘ ์˜ˆ์ œ๋ฌธ์„ ๋ณ„๋กœ ์•ˆ ์˜ฌ๋ ค์„œ.. ๊ทธ๋ž˜๋„ ์ด์ •๋„๋ฉด ์ถฉ๋ถ„ํ• ๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.


์–ด์…ˆ์— ๋Œ€ํ•˜์—ฌ..

๊ฐ„๋‹จํ•˜๊ฒŒ ํ•„์š”ํ•œ ์ง€์‹์„ ์•Œ์•˜์œผ๋‹ˆ๊นŒ
๊ณผ์ œ์— ๋Œ€ํ•˜์—ฌ ์•Œ์•„๋ด…์‹œ๋‹ค.


1.์—ฐ์‚ฐ

๊ด€๋ จ ๋ช…๋ น์–ด

 1) ์‚ฐ์ˆ  ์—ฐ์‚ฐ : add, sub, mul, div, inc, dec

์‚ฐ์ˆ  ์—ฐ์‚ฐ
add (eax, 3) ๋ง์…ˆ / (eax+=3)
sub (eax, 3) ๋บ„์…ˆ / (eax -=3)
inc (eax) op์˜ ๊ฐ’์„ 1 ์ฆ๊ฐ€ / (eax++)
dec (eax)  op์˜ ๊ฐ’์„ 1 ๊ฐ์†Œ / (eax--)
mul (eax, 3) ๊ณฑ์…ˆ / (eax*3)
div (eax, 3) ๋‚˜๋ˆ—์…ˆ / (eax/3)

 

 2) ๋…ผ๋ฆฌ ์—ฐ์‚ฐ : and, or, xor, test

๋…ผ๋ฆฌ ์—ฐ์‚ฐ
and ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋กœ and(๋‘˜ ๋‹ค 1) ์—ญํ• 
or ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋กœ or(ํ•˜๋‚˜์ด์ƒ 1) ์—ญํ• 
xor ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋กœ xor(1๊ฐœ๋งŒ ์žˆ์œผ๋ฉด ๋ถ€์ •) ์—ญํ• 
not ๋น„ํŠธ ์—ฐ์‚ฐ์ž๋กœ not(๋ถ€์ •) ์—ญํ• 

์ €๊ธฐ์„œ test๋Š” ๋…ผ๋ฆฌ๋ณด๋‹ค๋Š” ๋น„๊ต ์—ฐ์‚ฐ์ž๋กœ ์“ฐ์ด๋Š”๋ฐ ์ž˜๋ชป ์ ์œผ์…จ๋‚˜๋ณด๋„ค์š”

 3) ๋น„๊ต ์—ฐ์‚ฐ: cmp

๋น„๊ต
cmp (op1, op2) ์„œ๋กœ ๊ฐ’์„ ๋น„๊ต, ๋‘ ์ˆ˜๋ฅผ ๋นผ์„œ / (op1 == op2์ธ ์‹์œผ๋กœ) ์ด์ „์— ์ ์€ ํ”Œ๋ž˜๊ทธ๋กœ ํ‘œํ˜„
test ์„œ๋กœ ๊ฐ’์„ and๋กœ ๋น„๊ต / ์ด๊ฑด ๋ณ„๋กœ ์•ˆ ์“ธ๊ฑฐ ๊ฐ™์œผ๋‹ˆ๊นŒ ๋ญ ์ด๋Ÿฐ ์‹์œผ๋กœ๋งŒ ์–‘ํ•ด์š”..

๋‘ ํ”ผ์—ฐ์‚ฐ์ž(OP)์˜ ๊ฐ’์„ ๋น„๊ตํ•˜๊ณ , ๋ธ”๋ž˜๊ทธ๋ฅผ ์„ค์ •

cmp์™€ test๋Š” ZE, JE์™€ ๊ฐ™์€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋น„๊ต์—ฐ์‚ฐ์ž์ธ๋ฐ,
๋ณดํŽธ์ ์œผ๋กœ cmp๋Š” ๋น„๊ต๋ฅผ test๋Š” ๋ ˆ์ง€์Šคํ„ฐ(Ex. RAX)๋‚˜ OP๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ ๋น„๊ต ์—ฐ์‚ฐ์™€ ์„ธํŠธ๋กœ ์˜ค๋Š” ๋…€์„๋“ค์€ ์กฐ๊ฑด์—ฐ์‚ฐ์ž์ธ
์•„๋ก€ ์ด๋ฏธ์ง€๋Š” ์•Œ์•„๋‘๋ฉด ์ข‹์€ ์ƒ์‹์ž…๋‹ˆ๋‹ค


2.๋ฐ์ดํ„ฐ

์ „์†ก ๊ด€๋ จ ๋ช…๋ น์–ด
mov, push, pop, xchg, in, out, xlat, lea, lds, les, lahf


๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ์ด๋™ ๋ช…๋ น์–ด๋กœ์จ, 
์–ด๋–ค ๊ฐ’์„ ๋ ˆ์ง€์Šคํ„ฐ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฎ๊ธฐ๋„๋ก ์ง€์‹œํ•จ

๋ฐ์ดํ„ฐ ์ด๋™
mov (rdi, rsi) ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋„ฃ๊ธฐ๋งŒ ํ•จ / (ris์˜ ๊ฐ’์„ rdi์— ๋Œ€์ž…)
lea (rsi, [rbx+8* rcx]) ์ฃผ์†Œ๋ฅผ ๊ฐ€์ ธ์˜ด / (rbx+8*rcx๋ฅผ rsi์— ๋Œ€์ž…)

๋‚˜๋จธ์ง€๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ด€๋ จ์ด ๊นŠ์€๋ฐ์š”
๋จผ์ € ์Šคํƒ์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋ณด์‹ค ์นœ๊ตฌ๋“ค์ธ..

  • push val : rsp๋ฅผ 8๋งŒํผ ๋นผ๊ณ , ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์— val์„ ์Œ“๋Š”๋‹ค
  • pop reg : ์Šคํƒ ์ตœ์ƒ๋‹จ์˜ ๊ฐ’์„ reg์— ๋„ฃ๊ณ , rsp๋ฅผ 8๋งŒํผ ๋”ํ•จ
push 0xdeadbeef      ; push a value to the stack
pop eax              ; eax is now 0xdeadbeef

; swap contents of registers
push eax
mov eax, ebx
pop ebx
  • xchg(exchange data) eax esi : temp๋กœ์จ ์ •๋ณด๋ฅผ ๋ฐ”๊พธ๋Š” ๋‚ด์šฉ์ธ๋ฐ..
    ์ฃผ๋กœ Array์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ฎ์–ด์“ฐ๊ธฐ์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
int a,b,temp;

//exchange
temp=a;
a=b;
b=a;

  • in/out <port> : in/out ๋ช…๋ น์–ด๋Š” ์™ธ๋ถ€ ์žฅ์น˜๋‚˜ I/O ํฌํŠธ์—์„œ ๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ช…๋ น์–ด
in a, <port>

 ์—ฌ๊ธฐ์„œ a๋Š” ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ, <port>๋Š” ์ฝ์–ด์˜ฌ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, in ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์™ธ๋ถ€ ์žฅ์น˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๊ฑฐ๋‚˜, ํ‚ค๋ณด๋“œ ์ž…๋ ฅ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

out ๋ช…๋ น์–ด๋Š” out ํฌํŠธ, ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

out <port>, a

 <port>๋Š” ์ถœ๋ ฅํ•  ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, a๋Š” ๋ฐ์ดํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋œ ๊ฐ’์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, out ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ LED๋ฅผ ์ผœ๊ฑฐ๋‚˜, ์ถœ๋ ฅ ์žฅ์น˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


  • xlat : ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด์„œ ๋ˆ„์‚ฐ๊ธฐ(AL)์— ์ €์žฅ

ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์œ ์šฉํ•จ

xlat
  • lea : ์ฃผ์†Œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์ฃผ์†Œ ๊ฐ’์„ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ

๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ์— ํ• ๋‹นํ•˜๊ฑฐ๋‚˜, ๋ณ€์ˆ˜ ์ฃผ์†Œ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

lea <๋ ˆ์ง€์Šคํ„ฐ>, <๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๋˜๋Š” ๋ณ€์ˆ˜ ์ฃผ์†Œ>

  • lds : ์Šคํƒ ์ƒ์˜ ์ฃผ์†Œ๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ์™€ ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ์— ๋กœ๋“œ

๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ์— ์žˆ๋Š” ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉ

lds <๋ ˆ์ง€์Šคํ„ฐ>, <๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ>
  • las : ์Šคํƒ ์ƒ์˜ ์ฃผ์†Œ๋ฅผ ๋ ˆ์ง€์Šคํ„ฐ์™€ ์‹คํ–‰ ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ์— ๋กœ๋“œ

์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ์— ์žˆ๋Š” ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ ์‚ฌ์šฉ

les <๋ ˆ์ง€์Šคํ„ฐ>, <๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ>
  • lahf : ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ AH ๋ ˆ์ง€์Šคํ„ฐ์— ๋กœ๋“œ

์กฐ๊ฑด ๋ถ„๊ธฐ ๋ช…๋ น์–ด์—์„œ ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

lahf

3.์กฐ๊ฑด

์ œ์–ด ๊ด€๋ จ ๋ช…๋ น์–ด
call, jmp, ret, je/jz, jne/jnz, loop, int, int0, iret

  • call: ์„œ๋ธŒ๋ฃจํ‹ด์„ ํ˜ธ์ถœํ•˜๋Š” ๋ช…๋ น์–ด
    - ํ˜„์žฌ ์œ„์น˜๋ฅผ ์ €์žฅํ•˜๊ณ , ์„œ๋ธŒ๋ฃจํ‹ด์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋กœ ๋ถ„๊ธฐ
    - ์„œ๋ธŒ๋ฃจํ‹ด์ด ๋๋‚˜๋ฉด ๋‹ค์‹œ ์ด์ „ ์œ„์น˜๋กœ ๋Œ์•„๊ฐ

  • jmp: ๋ฌด์กฐ๊ฑด ๋ถ„๊ธฐํ•˜๋Š” ๋ช…๋ น์–ด
    - ์ฃผ์–ด์ง„ ์ฃผ์†Œ๋กœ ๋ถ„๊ธฐํ•ฉ๋‹ˆ๋‹ค.

  • ret: ์„œ๋ธŒ๋ฃจํ‹ด์—์„œ ๋ฉ”์ธ ๋ฃจํ‹ด์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ๋ช…๋ น์–ด
    - ์„œ๋ธŒ๋ฃจํ‹ด์˜ ๋์—์„œ ์‹คํ–‰๋˜๋ฉฐ, ์ €์žฅ๋œ ๋ฆฌํ„ด ์ฃผ์†Œ๋กœ ๋Œ์•„๊ฐ

  • je/jz, jne/jnz: ์กฐ๊ฑด ๋ถ„๊ธฐ ๋ช…๋ น์–ด
    - je/jz๋Š” ZF ํ”Œ๋ž˜๊ทธ๊ฐ€ 1์ผ ๊ฒฝ์šฐ ๋ถ„๊ธฐ
    - jne/jnz๋Š” ZF ํ”Œ๋ž˜๊ทธ๊ฐ€ 0์ผ ๊ฒฝ์šฐ ๋ถ„๊ธฐ

  • loop: ๋ฃจํ”„๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ช…๋ น์–ด
    - ECX ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์„ 1 ๊ฐ์†Œ์‹œํ‚ค๊ณ , 0๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„ ๊ฒฝ์šฐ์—๋งŒ ๋ฃจํ”„๋ฅผ ์‹คํ–‰
  • int: ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋ช…๋ น์–ด
    - ์ง€์ •๋œ ์ธํ„ฐ๋ŸฝํŠธ ๋ฒˆํ˜ธ์— ํ•ด๋‹นํ•˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‹คํ–‰


  • int0: ๋””๋ฒ„๊น… ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ์ธํ„ฐ๋ŸฝํŠธ
  • iret: ์ธํ„ฐ๋ŸฝํŠธ ํ•ธ๋“ค๋Ÿฌ

์–ด์…ˆ๋ธ”๋ฆฌ์–ด ์„ค๋ช…์„ ์ž์„ธํžˆ ํ• ๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ.. ๋„ˆ๋ฌด ํž˜๋“ค์–ด์„œ ์ค‘๊ฐ„์— ๋ฒ„๋ ธ๋„ค์š”
์•„๋ก€ ์ž๋ฃŒ๋„ ๋น„์Šทํ•˜๊ธด ํ•œ๋ฐ ์ฐธ๊ณ ํ•ด๋„ ์ข‹์„ ๊ฑฐ ๊ฐ™์•„์š”

 

'์–ด์…ˆ๋ธ”๋ฆฌ์–ด์™€ ์•…์„ฑ์ฝ”๋“œ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (3 Page)

 

nan491.tistory.com


์ฐธ๊ณ  ์ž๋ฃŒ

์ฐธ๊ณ  ์ด๋ฏธ์ง€