1. 개념

특정 기계를 분석하고 동작을 관찰하여 제조 방법, 동작 원리, 설계도 등을 파악하는 방법이다. 

소프트웨어 공학에서는 주로 역어셈블한 코드를 해독하거나 디버거를 통해 소프트웨어 동작을 분석하는 것을 뜻한다.

흔히 역공학(逆工學)이라고 부른다.

* 역어셈블 : 기계어 코드를 어셈블러 코드로 변환


2. 취지

소프트웨어 프로그래머라면 프로세서가 기계어를 해석하고 실행하는 것이 프로그램의 기본 동작 방식이라는 것을 알고 있다. 하지만 실제 그 기계어를 역어셈블하고 동작을 따라가는 행위는 일반적인 프로그래머에게 필요한 능력은 아니다.


3. 언어별 역공학

3-1. 자바

자바는 디컴파일하여 소스를 취득하기 쉽다.

가장 널리 사용되는 툴은 JD이다. (https://github.com/java-decompiler/jd-gui/releases)


4. Ghidra

다운로드 : https://ghidra-sre.org/