역어셈블러

역컴파일은 클래스 파일을 가지고 원래 소스로 변환하는 것을 말하지만, 역어셈블은 클래스 파일의 내부의 기본 구조와 역어셈블코드(JVM의 바이너리 코드)만을 나오게 됩니다.

 

특정 클래스의 내부 전체를 보고 싶은 경우는 역컴파일러를 이용하셔야 하고, 클래스 내부의 상수/함수들의 목록을 간단히 보고자 할때는 javap를 이용하는 것이 대부분입니다
 

[출처] javap의유용성|작성자 하자두
 

javap -c HelloWorld1 -> 역어셈블한 결과를 화면에 출력 
javap -c HelloWorld1 > HelloWorld1.txt -> 역어셈블한 결과를 text File에 기록
javap -private HelloWorld1  -> All Class&Member  



역컴파일러
jad -r -8 -d ./src -s java /home/*.class

-r : 해당 패키지 형태로 디렉토리 구조를 만듬( restore package directory structure)
-d : 디컴파일될 디렉토리(-d <dir> - directory for output files)
-s java : 디컴파일된 파일의 확장자를 java로 하라
-8 : 유니코드를 ascii 코드로 변환하는것이다. 
/home/*.class : /home 디렉토리 아래의 모든 클래스들 지정

* jad 실행파일

jad.exe






Java 언어의 단점이자 장점이 바로 역컴파일(Decompile)이 쉽다는 겁니다. 특히 개발자 입장에서는 남의 소스를 API만 보고 이해하기가 쉽지 않은데(특히나 한국 개발자가 만든 API는... ㅡㅡ;) JAD를 활용하면 아주 쉽게 소스를 볼 수 있습니다.

Eclipse 개발환경을 사용한다면 딱 2 가지만 있으면 됩니다.

  • JAD Decompiler  : 역컴파일러
  • JadClipse Plugin : JAD를 사용할 수 있는 Eclipse Plugin

※ 가끔 오해하시는 경우가 있는데, JadClipse에는 역컴파일 기능이 없습니다. 그리고 JAD는 command 창에서 실행되는 프로그램입니다. 반드시 2개를 다 설치해야 작동이 되요.

1. 다운로드


2. 설치
  • JAD는 원하는 위치에 압축을 품면 끝입니다. Eclipse에서만 사용한다면 Path 등록도 필요없습니다.
  • JadClipse는 Update Site 를 통해 설치합니다. : http://jadclipse.sourceforge.net/update
    (Help > Install New Softwares)



Next > Next > Accept > Finish > Ok > Yes > Restart


3. 설정
설치가 잘 되었다면 아래그림처럼 Window > Preference 에서 좌측과 같이 'Decompiler' 메뉴가 나옵니다.
Decompiler로 Jad 선택하시고 formatter 사용 체크하세요.


제일중요한 거... Jad 메뉴의 'Path to decompiler'부분에 위에서 압축 풀었던 jad의 위치를 적어줍니다.

그 외에 특별히 설정해줄 건 없습니다. 

여기 까지 했는데 잘 안되는 경우가 있습니다. 파일 연결이 잘 안되어 있거나, Editor Viewer의 캐쉬가 남아 있는 경우인데 아래 그림 처럼 .class 파일의 기본에디터로 Decompiled Class File Viewer가 선택되어 있는지 확인해 봅니다. 그리고 이미 열려 있던 파일말고 다른 .class 파일을 열거나 eclipse를 다시 시작해보시면 잘 되요.



4. FAQ
  • JAD에는 치명적인 단점이 하나 있습니다. 바로 jar 를 지원하지 않습니다. jar 라이브러리의 압축이 풀려있어야 하는데, Eclipse의 Project Explorer에는 jar 라이브러리를 볼수 있도록 내부에서 압축을 풀어줍니다. 여기서 .class파일을 열면 정상 작동됩니다.
  • 두번 째 문제는... 개발이 중단된것 같습니다. JAD 개발자(Pavel Kouznetsov) 홈페이지가 없어졌습니다. 현재까지의 완성도만으로도 충분하긴 하지만, 향후 java 7 이 나오고 하면 문제가 될 수 있겠네요.
  • Java 역컴파일러는 JAD만 있는게 아닙니다. JD(Java Decompiler)JODE(Java Optimize and Decompile Environment) 라는 것도 있습니다. JAD를 보편적으로 많이 사용하네요. 
    JD-Eclipse Update site : http://java.decompiler.free.fr/jd-eclipse/update


출처 : http://powerhan.tistory.com/116










[Java] Java Decompiler (역컴파일러, 디컴파일러)
 by Sigel

그동안 Java 코드의 역컴파일(decompile)이 필요할 때면 jad를 찾아서 쓰곤 했다. 그다지 많지 않은 빈도로 사용하기 때문에 가지고 있지도 않고 필요할 때 마다 받아서 썼는데.. 내 머리에는 지우개가 있다. 어쩌면 메멘토를 찍고 있을지도 =ㅅ= 어디서 jad를 받아서 사용했는지 전혀 기억이 나질 않는다.

그래서 검색 도중.. 오~~ 이클립스에서 편하게 역컴파일을 할 수 있는 녀석을 발견했다. JadClipse라는 것인데.. 이클립스에서 class 파일을 더블클릭하면 jad를 실행해서 지정된 임시폴더로 역컴파일을 해서 넣고, 그 파일을 보여주는 것이다. 원래는 무료였으나, 지금은 상용으로 변경되었고 비상업적으로 이용하는 경우는 무료라고 한다.

첨부된 파일(jadnt158-rogerrb.zip)은 Eclipse 3.3(Europa)에서만 동작한다고 한다. 다른 버전의 JadClipse는 sourceforge(http://jadclipse.sourceforge.net/)에서 찾아보자.
Eclipse 3.4(Ganymede)에서도 동작한다.(2008. 11. 19. 수정)



설치 방법은 간단하다.
1. jad와 jadclipse JAR 파일을 받는다.
2. 받은 jadclipse JAR 파일을 이클립스의 plugins 폴더에 넣는다.
3. jad 파일을 적당한 위치에 넣는다. (앞으로 역컴파일이 필요할 때 마다 이 파일을 실행시키니 삭제되지 않을 수 있는 폴더로 결정한다. e.g. C:\Program Files\Jad\jad.exe)
4. 이클립스를 실행하여 Window > Preferences... > Java > JadClipse > Path to Decompiler의 설정값을 jad 파일로 설정한다. (e.g. C:\Program Files\Jad\jad.exe)
5. 역컴파일된 java 파일을 넣을 임시폴더를 Window > Preferences... > Java > JadClipse > Directory for temporary files에서 설정한다. (이 부분은 굳이 바꿔주지 않아도 된다.)

6. Window > Preferences... > General > Editors > File Associations 중 "*.class"의 설정값이 "JadClipse Class File Viewer"로 설정되었는지 확인한다. 끌-*




+ 한글이 깨지는 경우 Window > Preferences... > Java > JadClipse > Misc > Convert Unicode strings into ANSI strings를 체크해 주자.

+ 더블클릭 시 마다 역컴파일하는 수고를 덜기 위해 Window > Preferences... > Java > JadClipse > Reuse code buffer를 체크해 주자. 그러면 class 파일을 처음 더블클릭했을 때만 역컴파일을 하여 임시 폴더에 넣고, 다음부터는 그 폴더의 내용을 가져와서 보여준다.
jadnt158-rogerrb.zip : Eclipse 3.3 Europa용 JadClipse + jad

+ 소식 접한 곳
http://blog.naver.com/rogerrb/100041261641
http://blog.naver.com/ddoll22/10015500677 



출처 -  http://blog.naver.com/hazard11?Redirect=Log&logNo=80028989392 

http://standcode.blog.me/10005305787 






이클립스에서 자바 클래스 decompile 결과 보기


1. Help -> Install New Software... 를 누릅니다


Add 버튼을 눌러 Location에 http://jadclipse.sf.net/update 을 적고 OK를 누릅니다.

밑 플러그인 목록에 JDT Decompiler Features를 체크 하여 설치합니다.

이클립스를 재시작합니다.



2. Window -> Preferences

General -> Editors -> File Associations 에서

*.class를 선택하고 밑에서 편집기를 Decompiled Class File Viewer를 선택하여 Default 로 지정합니다.



Java -> Decompilers 에서

Decompiler를 Jad를 선택합니다.



3. http://www.varaneckas.com/jad 에서 jad를 다운받습니다.


압축을 풀어 이클립스 실행파일이 있는 폴더에 복사합니다.



4. 이제 편집기에서 소스가 궁금한 클래스명을 선택하고 F3을 누르면..

디컴파일된 소스가 보이게 됩니다.. 클래스에 따라서.. 결과가 제대로 나오지 않을 수도있습니다.. 

참고로 실제 소스와 완전히 같지 않기 때문에 디버깅시에 전혀 엉뚱한 라인을 가리킵니다..ㄱ-



출처 - http://zsoo.net/68











Posted by linuxism
,