멀티덱스 난독화는 실제 코드를 구동하기 위한 스텁 코드와 암호화 된 실제 코드가 리소스 파일에 숨겨져 있는 형태로 구성되어 있다.

 

멀티덱스 난독화가 적용된 앱이 실행되면 리소스 영역에 있는 암호화 된 APK파일을 대칭키를 이용해서 코드를 생성하고, 메모리에 로드한다.

 

대부분 멀티덱스 난독화는 스텁코드에 dexLoader 또는 ~Loader 등과 같은 형식으로 파일을 메모리에 로드를 암시하는 단어가 많다.

 

리소스 영역에 있는 파일은 APK 파일을 디컴파일하면 생성되는 assets 폴더내의 some.dex, somedex 등이 있다면 덱스가드 난독화가 적용된 암호화 된 파일이라고 짐작할 수 있다.

 

하지만, 멀티덱스 난독화도 리패키징을 이용해 대칭키를 찾거나 암호화 된 dex 파일을 복호화를 한 후 삭제하면 원본 코드가 노출되는 치명적인 단점이 존재한다.

 

멀티덱스 난독화도 대칭키가 노출되면 암호화 된 파일을 복호화해서 우회가 가능한 치명적인 단점이 존재한다. 즉, 코드의 실행에 의해서 암호화 된 dex 파일이 SD카드에 복호화 된 dex 파일이 저장된다.

 

복호화 된 dex 파일을 class Loader 또는 dex Load와 같은 동적 로드 메소드를 이용해 SD카드에 저장된 복호화 dex 파일을 메모리에 로드한다.

 

마지막으로 SD카드에 저장된 복호화 dex 파일을 삭제한다. 이 때, 리패키징 기법을 이용해 SD카드에 저장된 복호화 dex 파일을 "삭제" 하는 코드를 찾아서 지운다.

 

수정된 앱을 다시 실행하면 복호화 된 dex 파일을 SD카드에서 삭제되지 않고 그대로 저장된다. 저장된 복호화 dex 파일을 로컬 PC에 업로드하여 디컴파일하면 원본 코드를 얻을 수 있다.

 

대표적인 솔루션으로 덱스가드(dexguard)가 존재한다. 이 솔루션은 프로가드 배포 회사에서 만든 상용 솔루션이다.


  • 카카오톡-공유
  • 네이버-블로그-공유
  • 네이버-밴드-공유
  • 페이스북-공유
  • 트위터-공유
  • 카카오스토리-공유

댓글을 달아 주세요