본문 바로가기
Spring/study

spring 16강 자바스크립트 난독화, Proguard를 이용한 자바 코드 난독화

by avvin 2019. 7. 1.

spring 16강 자바스크립트 난독화, Proguard를 이용한 자바 코드 난독화



자바스크립트 난독화

http://dean.edwards.name/packer/


굳이 자바스크립트까지 난독화할 필요는 없지만 중요한 기능이라면 난독화기능을 사용하여 배포하는 것도 좋다.

(어차피 디코딩하면 크게 의미 없음)





<script 태그는 빼고 입력>


alert("안녕하세요");


▼ pack


eval(function(p,a,c,k,e,r){e=String;if(!''.replace(/^/,String)){while(c--)r[c]=k[c]||c;k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('0("안녕하세요");',2,1,'alert'.split('|'),0,{}))



난독화된 스트립트 디코딩도 가능 Decode


위 난독화된 코드를 스크립트 코드안에 넣고 실행시키면 alert("안녕하세요"); 정상 실행됨


단, EL문 안의 값은 난독화하지 않는다.




자바코드 난독화 (Obfuscation)


자바프로그램은 디컴파일(decompile), 디스어셈블(disassemble)이 가능하므로 코드 난독화가 필요함


프로가드(progard) :  대표적인 자바 난독화 라이브러리


변수명, 메서드 이름을 읽기 어렵게 변환함


난독화를 해도 디컴파일은 막기어려움


spring프로젝트보다는 자바 프로젝트에 적합   

(*war파일보다는 jar파일로 export팔 경우에 적합함. 어노테이션, xml 설정 등에는 난독화 적용이 어려움)


*WAR(Web application ARchive[1], 웹 애플리케이션 아카이브) 파일은 소프트웨어 공학에서 자바서버 페이지, 자바 서블릿, 자바 클래스, XML, 파일, 태그 라이브러리, 정적 웹 페이지 (HTML 관련 파일) 및 웹 애플리케이션을 함께 이루는 기타 자원을 한데 모아 배포하는데 사용되는 JAR 파일이다.




Java 디컴파일러 JD-GUI 사용하기

https://www.whatap.io/blog/13/ 


수업 자료실

http://mannaedu.com/bbs/board.php?bo_table=pds&page= (수업자료실에 자바디컴파일러 올라와있음)


jd-gui-0.3.6.windows.zip



JD-GUI 소개

    주요 특징
  • JD-Core 및 JD-GUI는 Java와 Groovy로 개발되었습니다.
  • JD-Core는 아래 버전을 포함한 대부분의 최신 컴파일러에서 동작합니다.
  • jdk1.1.8, jdk1.3.1, jdk1.4.2, jdk1.5.0, jdk1.6.0, jdk1.7.0
  • jrockit90_150_06
  • jikes-1.22
  • harmony-jdk-r533500
  • Eclipse Java Compiler v_677_R32x, 3.2.1
    몇 가지 제약 사항이 있습니다.
  • Java 8 람다 식을 지원하지 않습니다.




실행파일 jd-gui.exe 실행


클래스 파일을 보고 자바 소스파일을 얻어내는 프로그램..?



이 프로그램에서 클래스파일을 열면 소스코드가 그대로 보임


jar파일 안의 .class 파일의 소스를 볼 수 있다.


배포할때는 소스를 war 파일로 배포하게되는데, 이 때 압축을 풀면 .class파일을 볼 수 있음


안드로이드 앱 .apk파일도 .class파일로 이루어져있으므로 소스파일을 모두 볼 수 있다.


그렇기에 배포 전 난독화 과정을 거쳐서 배포하게되는데, 이 때 가장 많이 쓰는 자바코드 난독화 프로그램이 프로가드.




프로가드(proguard) :  대표적인 자바 난독화 라이브러리(오픈 소스), 디컴파일을 막긴 어려움


프로가드 다운로드 : http://sourceforge.net/projects/proguard/files/


(.tar.gz는 리눅스용, 최신버전 .zip파일 다운받는다)


명령프롬프트에서 프로가드 lib 디렉토리까지 접근한 뒤


> java -jar proguardgui.jar 입력하면 프로가드가 실행됨







난독화 하고자하는 자바프로젝트를 JAR 파일로 export해준다.


input/output 메뉴에서 우측의 Add input jar로 export한 자바프로젝트 가져오기


우측의 Add output jar로 난독화할 파일 이름 지정





하단 박스에는 추가적으로 사용한 라이브러리(.jar)파일 추가한 후 [ Next ]



난독화한 .class 파일을 디컴파일러(JD-GUI)에서 읽어본다  ▶ 변수명과 메서드명이 바뀌어있음