미리 말하기 : obfuscation 에셋 사용 안해봤읍니다..
난독화 개념과 어떤 식으로 사용하는지 느낌만 인터넷에 찾은 정보들 (with ai) 로 정리한 블로그.
빌드된 코드와 데이터를 분석하기 어렵게 만들어 리버스 엔지니어링, 치팅, 소스/에셋 도용을 막는 보호 기법이다.
특히 C#은 디컴파일이 너무 쉽기 때문에 별도 조치 없이 빌드하면 해킹에 매우 취약하다.
이름 바꾸기
네임스페이스, 클래스, 메서드, 필드, 프로퍼티, 이벤트 이름을 의미 없는 문자로 치환한다..
제어 흐름 난독화
깔끔한 if/for 구조를 goto 와 상태 머신으로 뒤엉킨 스파게티로 바꿔서, 디컴파일러가 로직 흐름을 재구성하지 못하게 만든다.
문자열 암호화
코드 안에 하드코딩된 문자열을 암호화 해서 런타임에만 복호화 한다.
Free 버전에서는 Monobehaviour 난독화는 안된다고 하니 참고할 것
ProjectSetting -> GuardingPearSoftware -> Obfuscator
여기서 활성화 하고 설정 조정
매 빌드마다 자동으로 난독화 실행
기존 범용 .NET 툴과는 다르게 unity 전용으로 이름을 바꾸는 동시에 참조하고 있는 에셋도 함께 패칭
또한 직접 제외하지 않아도 난독화에 자동으로 빠지는 것들이 있는데
UI 에 연결한 메서드들은 손대지 않아도 안 깨진다. 다만 자동 감지에서 놓친 것들은 [DoNotRename] 등의 attribute로 관리하면 된다.
"이름으로 접근하는 것들은 제외" 시킨다고 학습할 것.
맵 파일 보관
난독화시에는 크래시 리포트의 스택 트레이스도 난독화된 이름으로 나온다. 디난독화용 map 파일을 꼭 보관 해야 한다.
obfuscator 기준으론,
1. Unity ProjectSetting
2.GuardingPearSoftware -> Obfuscator
3. Optional 탭에서 Renaming Component 찾기
4. 매핑 생성(mapping generation) 옵션 활성화
5. 매핑 파일이 저장될 출력 경로(output path) 지정
여기서 핵심은, 릴리즈 빌드 전에 반드시 켜둬야 한다. 안켜고 빌드하면 그 빌드의 크래시는 나중에 되돌릴 방법이 없다.
빌드시에 지정한 경로에 json 매핑 파일이 만들어진다.
실제 디코딩 할 때는
1. mapping file path - json 매핑 파일 경로 입력하거나 browse로 선택한다. (보통 자동으로 채워져 있다)
2. stacktrace - 유저가 보낸 난독화된 스택 트레이스를 텍스트 영역에 붙여넣는다.
3. deobfuscate 버튼 클릭
4. 아래 deobfuscated stack trace 영역에 원본 클래스, 메서드 이름이 복원된다.