IT & Security/Reversing

리버싱 기초

μ •λ³΄λ³΄μ•ˆπŸŒ 2020. 9. 3. 22:46
λ°˜μ‘ν˜•

λͺ¨λ“ λ‚΄μš©μ˜ μΆœμ²˜λŠ” ꡬ글, ꡬ글 μœ„ν‚€λ°±κ³Ό, κ·Έμ™Έμ˜ λΈ”λ‘œκ·Έ 등을 μ°Έκ³  ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

λ˜ν•œ 학ꡐ μˆ˜μ—…μ‹œκ°„μ˜ 자료λ₯Ό μ°Έκ³ ν•˜μ—¬ 글을 μž‘μ„±ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

리버싱 κΈ°μ΄ˆμ— λŒ€ν•œ 도움이 될 λ“― ν•˜μ—¬ μ˜¬λ € 놓은 것이며,μƒμš©λͺ©μ μ΄ μ•„λ‹™λ‹ˆλ‹€.

 


 

1-1. 리버싱 μ—”μ§€λ‹ˆμ–΄λ§

 

λ¦¬λ²„μŠ€ μ—”μ§€λ‹ˆμ–΄λ§(reverse engineering, RE) λ˜λŠ” μ—­κ³΅ν•™(逆ε·₯ε­Έ)은 μž₯치 λ˜λŠ” μ‹œμŠ€ν…œμ˜ 기술적인 원리λ₯Ό κ·Έ ꡬ쑰뢄석을 톡해 λ°œκ²¬ν•˜λŠ” 과정이닀. 이것은 μ’…μ’… λŒ€μƒ(기계 μž₯치, μ „μž λΆ€ν’ˆ, μ†Œν”„νŠΈμ›¨μ–΄ ν”„λ‘œκ·Έλž¨ λ“±)을 μ‘°κ°λ‚΄μ„œ λΆ„μ„ν•˜λŠ” 것을 ν¬ν•¨ν•œλ‹€. 그리고 μœ μ§€ 보수λ₯Ό μœ„ν•΄, λ˜λŠ” 같은 κΈ°λŠ₯을 ν•˜λŠ” μƒˆ μž₯치λ₯Ό μ›λ³Έμ˜ 일뢀λ₯Ό μ΄μš©ν•˜μ§€ μ•Šκ³  λ§Œλ“€κΈ° μœ„ν•΄ λŒ€μƒμ˜ 세뢀적인 μž‘λ™μ„ λΆ„μ„ν•˜λŠ” 것을 ν¬ν•¨ν•œλ‹€.

 

λ¦¬λ²„μŠ€ μ—”μ§€λ‹ˆμ–΄λ§μ˜ 기원은 상업적 λ˜λŠ” κ΅°μ‚¬μ μœΌλ‘œ ν•˜λ“œμ›¨μ–΄λ₯Ό λΆ„μ„ν•œ κ²ƒμ—μ„œ μ‹œμž‘λ˜μ—ˆλ‹€. λͺ©μ μ€ 원본 μƒμ‚°μ˜ μ ˆμ°¨μ— κ΄€ν•œ 지식이 거의 μ—†λŠ” μƒνƒœμ—μ„œ, μ΅œμ’… μ œν’ˆμ„ κ°€μ§€κ³  λ””μžμΈ 결정과정을 μΆ”λ‘ ν•˜λŠ” 것이닀. 같은 기술이 λ ˆκ±°μ‹œ μ†Œν”„νŠΈμ›¨μ–΄ μ‹œμŠ€ν…œμ„ μ‘μš©ν•˜κΈ° μœ„ν•΄ ν˜„μž¬ μ—°κ΅¬λ˜κ³  μžˆλŠ”λ°, μ‚°μ—…μ΄λ‚˜ ꡭ방이 μ•„λ‹ˆκ³ , 였λ₯˜, λ―Έμ™„μ„±, μ ‘κ·Ό λΆˆκ°€μΈ λ¬Έμ„œλ₯Ό μˆ˜μ •ν•˜κΈ° μœ„ν•¨μ΄λ‹€. (ꡬ글 μœ„ν‚€λ°±κ³Ό)

 

 

1-2. λ°”μ΄λ„ˆλ¦¬

 

-  λ°”μ΄λ„ˆλ¦¬λž€ 2μ§„μˆ˜ λΌλŠ” μ˜λ―Έλ‘œμ„œ, λ°”μ΄λ„ˆλ¦¬ νŒŒμΌμ€ 0κ³Ό1, 즉 2μ§„μˆ˜λ‘œ 이뀄진 νŒŒμΌμ„ μ˜λ―Έν•œλ‹€. ν•˜μ§€λ§Œ 'λ°”μ΄λ„ˆλ¦¬ 뢄석'μ—μ„œμ˜ λ°”μ΄λ„ˆλ¦¬λŠ” 이것보닀 μ œν•œμ μΈ 의미λ₯Ό κ°€μ§„λ‹€. 쒋은 의미둜 μ‹€ν–‰ κ°€λŠ₯ν•œ ν˜•μ‹μ˜ 데이터 νŒŒμΌμ„ λ§ν•œλ‹€. ν˜•μ‹μœΌλ‘œλŠ” μœˆλ„μš°μ˜ PEλ‚˜ λ¦¬λˆ…μŠ€μ˜ ELF같은 것이 μžˆλ‹€. 

 

-  μ–΄λ–€ ν”„λ‘œκ·Έλž¨μ΄ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ 뢄석할 λ•Œ, μš°μ„  μ‹€μ œλ‘œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•΄ 보면 μ–΄λ–€ λ™μž‘μ„ ν•˜λŠ”μ§€ λŒ€λž΅μ μœΌλ‘œ μ•Œ 수 μžˆλ‹€. 그리고 λ”μš± μžμ„Ένžˆ μ•Œκ³  싢은 뢀뢄이 μžˆλ‹€λ©΄ μ½”λ“œλ₯Ό ν™•μΈν•œλ‹€. ν•˜μ§€λ§Œ λŒ€λΆ€λΆ„μ˜ 경우 μ†ŒμŠ€μ½”λ“œκ°€ μ—†μœΌλ―€λ‘œ μ†ŒμŠ€μ½”λ“œκ°€ μ•„λ‹Œ λ‹€λ₯Έ ν˜•νƒœμ˜ μ½”λ“œλ₯Ό 읽어야 ν•œλ‹€. λ™μž‘μ„ 확인해보기 μœ„ν•΄μ„œλŠ” μš°μ„  μ‹€ν–‰ν•΄λ³΄λŠ” 것이 μ œμΌμ΄λ‹€.

ν•˜μ§€λ§Œ μ΄κ²ƒλ§ŒμœΌλ‘œλŠ” ν‘œμ€€ μž…μΆœλ ₯ μ΄μƒμ˜ 정보λ₯Ό 얻을 수 μ—†μœΌλ―€λ‘œ λ‹€μ–‘ν•œ 정보λ₯Ό 얻을 수 μžˆλŠ” μ „μš© ν”„λ‘œκ·Έλž¨μ„ μ‚¬μš©ν•΄ 도움을 λ°›λŠ” 것이 μ’‹λ‹€. 그리고 λ°”μ΄λ„ˆλ¦¬ μ½”λ“œλ₯Ό μ½λŠ”λ‹€. 단 λ°”μ΄λ„ˆλ¦¬μ˜ μ½”λ“œλŠ” ν•œλ²ˆ 컴파일된 것이기 λ•Œλ¬Έμ— μ†ŒμŠ€μ½”λ“œκ°€ μ•„λ‹ˆλΌ disassembleμ΄λΌλŠ” 처리 κ³Όμ •μœΌλ‘œ μ–»μ–΄μ§„ μ–΄μ…ˆλΈ”λ¦¬ μ½”λ“œλ₯Ό 읽게 λ˜λŠ”κ²ƒμ΄λ‹€. 이것이 mov add와같은 assembly어이닀. disassembleμ΄λž€ κΈ°κ³„μ–΄λ‘œ 된 μ½”λ“œλ₯Ό μ‚¬λžŒμ΄ ν•΄μ„ν•˜κΈ° μ‰¬μš΄ μ–΄μ…ˆλΈ”λ¦¬ μ–Έμ–΄λ‘œ λ³€ν™˜ν•˜λŠ” 것이닀.

1-3. λ°”μ΄λ„ˆλ¦¬ 뢄석

 

λ°”μ΄λ„ˆλ¦¬ 뢄석(Binary Analysis) νˆ΄μ€ μ–΄λ–€ 패컀λ₯Ό μ΄μš©ν•΄μ„œ λ°”μ΄λ„ˆλ¦¬λ₯Ό νŒ¨ν‚Ήν–ˆλŠ”μ§€, μ–΄λ–€ μ–Έμ–΄λ‘œ μ œμž‘λœ ν”„λ‘œκ·Έλž¨μΈμ§€λ₯Ό μ•Œμ•„λ‚Ό λ•Œ μ‚¬μš©λœλ‹€. νŒŒμΌμ„ 열어도 되고 λ“œλž˜κ·Έ μ•€ λ“œλ‘­μ„ ν•˜μ—¬ νŒŒμΌμ„ 넣을 μˆ˜λ„ μžˆλ‹€.

μ†ŒμŠ€ μ½”λ“œλ₯Ό λΆ„μ„ν•΄μ„œλŠ” μ΄λŸ¬ν•œ μ„ μ²œμ  취약점과 같은 결함이 μžˆλŠ”μ§€ μ•Œ 방법이 μ—†μ§€λ§Œ 이λ₯Ό μ°Ύμ•„λ‚Ό 길은 μ—„μ—°νžˆ μ‘΄μž¬ν•œλ‹€. λ°”λ‘œ λ°”μ΄λ„ˆλ¦¬ νŒŒμΌμ„ λΆ„μ„ν•˜λŠ” 것이닀. λ°”μ΄λ„ˆλ¦¬ 파일 뢄석은 μ†Œν”„νŠΈμ›¨μ–΄ μ‹€ν–‰ 파일 자체λ₯Ό λΆ„μ„ν•˜λ―€λ‘œ 더 직접적이고 λͺ…ν™•ν•˜κ²Œ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό 뢄석할 수 μžˆλŠ” 방법이기도 ν•˜λ‹€.(좜처 : https://gnu-cse.tistory.com/22?category=601172)

 

 

 

 

1-4. 곡격쒅λ₯˜(νƒ€μž…)

 

 

 

 

 

1-5. λ°”μ΄λ„ˆλ¦¬ 뢄석 도ꡬ

 

 

- showString

 

κ³΅κ²©νƒ€μž…μ€ Binary Analyysis둜 ν”„λ‘œκ·Έλž¨ λ‚΄λΆ€ μŠ€νŠΈλ§μ„ λ³΄μ—¬μ£ΌλŠ” 도ꡬ이닀.

 

 

 

- Resource Hacker Plus

 

 

κ³΅κ²©νƒ€μž…μ€ Binary Analyysis둜 μ†Œν”„νŠΈμ›¨μ–΄ λ¦¬μ†ŒμŠ€λ₯Ό νŽΈμ§‘ν•  수 μžˆλŠ” 도ꡬ이닀.

 

 

 

 

- Windbg

 

 

κ³΅κ²©νƒ€μž…μ€ Debugger 둜 디버깅을 ν•  수 μžˆλŠ” 도ꡬ이닀.

 

 

- Ollydbg

 

 

κ³΅κ²©νƒ€μž…μ€ Debugger, Disassembler 둜, κ°€μž₯ λ²”μš©μœΌλ‘œ μ‚¬μš©λ˜λŠ” 디버그, λ””μŠ€μ–΄μ…ˆλΈ”λŸ¬ νˆ΄μ΄λ‹€.

 

OllyDbg (λ§Œλ“ μ΄μΈ Oleh Yuschuk의 이름을 λ”΄)λŠ” λ°”μ΄λ„ˆλ¦¬ μ½”λ“œ 뢄석을 μœ„ν•œ x86 λ””λ²„κ±°λ‘œμ„œ, μ†ŒμŠ€ μ½”λ“œκ°€ 없을 λ•Œ μœ μš©ν•˜κ²Œ μ‚¬μš©λœλ‹€. 이것은 λ ˆμ§€μŠ€ν„°λ₯Ό μΆ”μ ν•˜κ³ , ν•¨μˆ˜API ν˜ΈμΆœ, Switch λ¬Έν‘œ (table)μƒμˆ˜ κ·Έλ¦¬κ³  λ¬Έμžμ—΄μ„ μΈμ‹ν•˜λ©°, 였브젝트 파일과 λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ λ£¨ν‹΄λ“€μ˜ μœ„μΉ˜λ₯Ό μ°Ύμ•„μ€€λ‹€.

 

 

- VBDE

 

 

 

κ³΅κ²©νƒ€μž…μ€ Decompiler 둜, λΉ„μ£Όμ–Όλ² μ΄μ§μœΌλ‘œ λ§Œλ“€μ–΄μ§„ ν”„λ‘œκ·Έλž¨ 뢄석 νˆ΄μ΄λ‹€.

 

 

 

- W32dsm9b

 

 

 

κ³΅κ²©νƒ€μž…μ€ Desassembler둜, 기계어λ₯Ό μ–΄μ…ˆλΈ”λ¦¬μ–΄λ‘œ λ²ˆμ—­ν•΄μ£ΌλŠ” νˆ΄μ΄λ‹€.

 

 

- WinHex

 

 

 

κ³΅κ²©νƒ€μž…μ€ Hex Editor둜 이진 νŒŒμΌμ„ μ½λŠ” νˆ΄μ΄λ‹€.

 

 

 

- Procexp

 

 

κ³΅κ²©νƒ€μž…μ€ Monitoring 으둜, μ‹œμŠ€ν…œ λͺ¨λ‹ˆν„°λ§μ„ ν•  수 μžˆλŠ” νˆ΄μ΄λ‹€.

 

 

 

 

- Exeinfo PE & VMUnpacker

 

 

 

 

 

λ‘˜λ‹€ κ³΅κ²©νƒ€μž…μ€ Unpacker이며, μ–ΈνŒ¨ν‚Ήμ„ ν•  수 μžˆλŠ” νˆ΄μ΄λ‹€.

κ·Έ 외에도 νƒ€μž…μ— λ”°λΌμ„œ, λ§Žμ€ νˆ΄λ“€μ΄ μ‘΄μž¬ν•œλ‹€.

(좜처 : https://myeonguni.tistory.com/1672)

λ°˜μ‘ν˜•