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 소개
- 주요 특징
- 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)에서 읽어본다 ▶ 변수명과 메서드명이 바뀌어있음
'Spring > study' 카테고리의 다른 글
spring 17강 드래그앤드롭, ajax 방식의 파일업로드 (0) | 2019.07.01 |
---|---|
REST API (이후에 다시 정리) (0) | 2019.07.01 |
spring 15강 인터셉터(Interceptor) (0) | 2019.06.28 |
spring 14강 AOP와 트랜잭션 처리 실습 (0) | 2019.06.28 |
spring 13강 AOP의 개요, 로그수집 예제 (0) | 2019.06.27 |