카테고리 없음

난독화 list 조사

snejs 2025. 5. 2. 14:01

loop-switch 구조에 효과적일 수 있는 난독화에 대해 조사하고

난독화 사용에 있어 효과적인 난독화 조합에 대해서도 조사하였다.

조사에는 Gpt의 도움을 받았다.

 


난독화 기법

바이너리 코드에 대한 분석을 하는 것을 감안,

단독으로 사용될 수 있는 난독화보다는 조합적으로 사용할 수 있는 난독화에 대해 조사하였다.

 

1. EncodeLiterals

- 핵심 효과 : 흐름 제어에 쓰이는 키값들을 정적으로는 해석할 수 없도록 인코딩

- switch case의 분기 키나 VM opcode 식별값이 숨겨지면 flow recovery가 어려움

 

 

2. DeadCode

- 핵심 효과 : 실행되지 않는 (죽은) 코드를 프로그램에 삽입해서 혼란스럽게 만듦

- switch 흐름을 직접적으로 교란하진 않지만, flatten된 구조에 간접적으로 사용 시 혼란을 유발 할 수 있음

- 단일로는 효율이 떨어짐

 

 

3. Split

- 핵심 효과 : 하나의 함수를 여러 개의 작은 함수로 분할하여 분석 난이도를 증가시킴

- dispatcher 구조처럼 tight loop 안에서 switch가 동작하는 경우에는 split이 적용 안 될 수 있음

 

 


난독화 조합

추천 : 

- Virtualize + EncodeLiterals  : VM 흐름 및 키 추적 차단

- Virtualize + OpaquePredicate : 가상화 + 조건 분기 불분명화

 

추가 :

가상화 + 흐름 난독화 (non-switch code > switch 구조 > 방해)
- Flatten + DeadCode : FSM 형태에 가짜 흐름 삽입 (노이즈 증가)
- Virtualize + Split : 함수 분할 + 조건 흐름을 애매하게 만들어 추적 방해

 

흐름 난독화 (switch code > 방해)

- Split + OpaquePredicate : 가상화된 흐름을 함수 단위로 분할 (정적 분석 복잡화)

 


루프 기반 switch 흐름에서 효과적인 난독화 

1. state 값 추적 차단 : Opaque Predicate, EncodeLiterals

2. switch 안의 분기 흐름 교란 : DeadCode

3. 분기 순서를 예측하기 어렵게 만듦 : Virtualize, Split