Security/Reversing

[Reversing] 01μž₯. 리버싱 μŠ€ν† λ¦¬

cho2cee 2021. 11. 21. 11:43

πŸ‘† μœ„ 책을 읽고 μ •λ¦¬ν•œ λ‚΄μš©μž…λ‹ˆλ‹€. 

 

1. λ¦¬λ²„μŠ€ μ—”μ§€λ‹ˆμ–΄λ§ 

λ¦¬λ²„μŠ€ μ—”μ§€λ‹ˆμ–΄λ§(Reverse Engineering, Re: 역곡학) : λ¬Όκ±΄μ΄λ‚˜ 기계μž₯치 ν˜Ήμ€ μ‹œμŠ€ν…œ λ“±μ˜ ꡬ쑰, κΈ°λŠ₯, λ™μž‘ 등을 λΆ„μ„ν•˜μ—¬ κ·Έ 원리λ₯Ό μ΄ν•΄ν•˜λ©° 단점을 λ³΄μ™„ν•˜κ³  μƒˆλ‘œμš΄ 아이디어λ₯Ό μΆ”κ°€ν•˜λŠ” 일련의 μž‘μ—… 

 

2. λ¦¬λ²„μŠ€ μ½”λ“œ μ—”μ§€λ‹ˆμ–΄λ§ 

λ¦¬λ²„μŠ€ μ½”λ“œ μ—”μ§€λ‹ˆμ–΄λ§(Reverse Code Engineering, RCE) : μ†Œν”„νŠΈμ›¨μ–΄ λΆ„μ•Όμ˜ λ¦¬λ²„μŠ€ μ—”μ§€λ‹ˆμ–΄λ§

 

2.1 리버싱(뢄석) 방법 

1) 정적 뢄석 

  • 파일의 겉λͺ¨μŠ΅μ„ κ΄€μ°°ν•˜μ—¬ λΆ„μ„ν•˜λŠ” 방법 
  • 정적 뢄석 λ‹¨κ³„μ—μ„œλŠ” νŒŒμΌμ„ μ‹€ν–‰ν•˜μ§€ μ•ŠμŒ
  • 파일의 μ’…λ₯˜, 크기, 헀더(PE) 정보, Import/Export API, λ‚΄λΆ€ λ¬Έμžμ—΄, μ‹€ν–‰ μ••μΆ• μ—¬λΆ€, 등둝 정보, 디버깅 정보, λ””μ§€ν„Έ μΈμ¦μ„œ λ“±μ˜ λ‹€μ–‘ν•œ λ‚΄μš©μ„ ν™•μΈν•˜λŠ” 것 
  • λ””μŠ€μ–΄μ…ˆλΈ”λŸ¬λ₯Ό μ΄μš©ν•΄μ„œ λ‚΄λΆ€ μ½”λ“œμ™€ κ·Έ ꡬ쑰λ₯Ό ν™•μΈν•˜λŠ” 것 

2) 동적 뢄석 

  • νŒŒμΌμ„ 직접 μ‹€ν–‰μ‹œμΌœμ„œ κ·Έ ν–‰μœ„λ₯Ό λΆ„μ„ν•˜κ³ , 디버깅을 톡해 μ½”λ“œ 흐름과 λ©”λͺ¨λ¦¬ μƒνƒœ 등을 μžμ„Ένžˆ μ‚΄νŽ΄λ³΄λŠ” 방법 
  • 파일, λ ˆμ§€μŠ€νŠΈλ¦¬, λ„€νŠΈμ›Œν¬ 등을 κ΄€μ°°ν•˜λ©΄μ„œ ν”„λ‘œκ·Έλž¨μ˜ ν–‰μœ„λ₯Ό 뢄석 
  • 디버거λ₯Ό μ΄μš©ν•˜μ—¬ ν”„λ‘œκ·Έλž¨ λ‚΄λΆ€ ꡬ쑰와 λ™μž‘ 원리λ₯Ό 뢄석 

 

2.2 Source, Hex, Assembly code

Source Code 

κ°œλ°œλ„κ΅¬(Visual C++)μ—μ„œ μ†ŒμŠ€μ½”λ“œλ₯Ό λΉŒλ“œν•˜λ©΄ .exe μ‹€ν–‰νŒŒμΌμ΄ 생성됨 

 

Hex Code 

μƒμ„±λœ μ‹€ν–‰ νŒŒμΌμ€ 컴퓨터가 이해할 수 μžˆλŠ” 2μ§„μˆ˜ ν˜•μ‹μœΌλ‘œ λ˜μ–΄μžˆμŒ 

2μ§„μˆ˜λ₯Ό 16μ§„μˆ˜(Hex ν˜•μ‹)으둜 λ³€ν™˜μ‹œν‚€λ©΄ 보기에 훨씬 μˆ˜μ›”ν•˜λ‹€.

Hex EditorλŠ” binary ν˜•μ‹μ˜ νŒŒμΌμ„ hex ν˜•μ‹μœΌλ‘œ λ³΄μ—¬μ£ΌλŠ” μœ ν‹Έλ¦¬ν‹° 

 

Assembly Code 

Hex CodeλŠ” μ‚¬λžŒμ—κ²Œ 직관적인 ν˜•νƒœλŠ” μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— μ‚¬λžŒμ΄ μ΄ν•΄ν•˜κΈ° μ‰¬μš΄ μ–΄μ…ˆλΈ”λ¦¬ μ½”λ“œλ‘œ λ³€ν™˜ν•œλ‹€.

Ollydbgλ₯Ό μ΄μš©ν•΄ .exe μ‹€ν–‰νŒŒμΌμ„ μ–΄μ…ˆλΈ”λ¦¬ μ½”λ“œ ν˜•νƒœλ‘œ λ³Ό 수 있음