본문 바로가기

개발/Android

html 난독화는 가능한가 (Android Assets APK 압축해제)

반응형

html 난독화는 가능한가 (Android Assets APK 압축해제)

 

Assets이라는 외부리소스 폴더에 html, js, css 등의 파일들을 넣고

해당 경로를 읽어 보여주는 웹뷰 형태로 안드로이드 앱을 개발한 후 APK를 생성하였다

 

APK는 알집 7집 등 여러 압축해제 프로그램으로 압축해제가 가능하며 압축을 해제하면 Assets 속의 파일이 그대로 보여진다

어떻게하면 html 파일을 제대로 볼 수 없게 할것인가를 고민해보았다

 

1. 파일 자체를 암호화 후 복호화해서 보여준다 (쉽게 복호화가 가능한 base64등의 인코딩이 아니라면 가장 확실한 방법인 것 같다)

 

2.귀찮으니까 바로 알아보기 어렵게만 작업해보자

 1) 안드로이드 웹뷰를 생성할때 헤더 속 User-Agent 값을 변경할 수 있는데 특정 문자열을 삽입해봤다

webview.getSettings().setUserAgentString(webSettings.getUserAgentString()
	.replace("Android", "niphyang 6developer Android"));   

  - User-Agent의 문자열 중 "Android"를 "niphyang 6developer Android"로 변경하였다 

  - 곧 이 값을 읽어올 예정이다

 

 

 2) user-agent 값을 체크하여 "6developer"라는 문자열이 없으면 html 태그를 날려버리는 스크립트를 작성한다

function checkDevice(){
  var userAgent=navigator.userAgent.toLowerCase();
  if(userAgent.indexOf('6developer')>-1){
      
  }else{
     document.getElementsByTagName("html")[0].remove();
  }
}
checkDevice();

  - 위 소스에서 볼 수 있듯이 checkDevice() function을 실행하면 userAgent값을 체크하고 특정 값이 없으면 html태그를 삭제한다

var _0x550c=['userAgent','toLowerCase','indexOf','6developer','html','remove'];(function(_0x2bd3c3,_0x5b1d8b){var _0x279f6e=function(_0x471e05){while(--_0x471e05){_0x2bd3c3['push'](_0x2bd3c3['shift']());}};_0x279f6e(++_0x5b1d8b);}(_0x550c,0x1e6));var _0x56ae=function(_0xee206e,_0x405e6a){_0xee206e=_0xee206e-0x0;var _0x3e3658=_0x550c[_0xee206e];return _0x3e3658;};function checkDevice(){var _0x4b81bb=navigator[_0x56ae('0x0')][_0x56ae('0x1')]();if(_0x4b81bb[_0x56ae('0x2')](_0x56ae('0x3'))>-0x1){}else{document['getElementsByTagName'](_0x56ae('0x4'))[0x0][_0x56ae('0x5')]();}}checkDevice();

  - 일단 js를 알아보기 어렵게 변경했더니 조금 어려워 졌고 이 소스를 모든 js파일에 넣고 모든 html파일에 넣었다

  - 내 웹뷰가 아닌곳에서 실행되면 빈화면이 보여진다. 아직 부족하다

 

 3) html 파일에 있는 모든 내용을 UTF-16 코드 유닛으로 변경하였다

<script language=javascript>document.write(String.fromCharCode(60,47,120,109,112,62,60,104,116,109,108,62,10,60,104,101,97,100,62,10,60,47,104,101,97,100,62,10,60,98,111,100,121,62,10,32,97,115,100,102,32,97,115,100,102,32,97,115,100,102,32,97,115,100,102,32,97,59,108,107,115,106,100,102,108,59,107,97,106,115,100,102,10,32,60,112,62,32,60,47,112,62,10,60,115,112,97,110,62,32,60,47,115,112,97,110,62,10,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,32));</script>

  - 후에 UTF-16 코드 유닛을 다시 문자열로 변경 후 document.write로 뿌려줬다 

  - 해당 문자열에는 당연히 userAgent 값을 체크하여 html 태그를 삭제하는 로직이 들어가있다

 

 

첫번째 방법이 가장 확실하겠지만

내 소스를 탐내는 누군가가 그래도 어느정도 수고는 해야하지 않겠나 싶어서 주저리 주저리 적어보았다

 

이 밖에도 각종 난독화 도구들이 많이 있다 찾아보자

반응형