2013-04-13 7 views
1

안타깝게도 Android 소스 코드를 삭제했습니다. dex2jar와 baksmali를 사용하여 jar를 얻으려고 시도했고 jd-gui를 사용하여 .apk 파일을 사용하여 Java 소스 파일을 얻었습니다. 네, 파일을 가지고 있지만 문제는 자바 파일의 더 많은 곳에서 코드가 바이트 형식이라는 것입니다. 자신을 앞으로 나아갈 수 있도록 읽을 수있는 형식으로 가져와야합니다..apk 파일에서 Java 파일을 추출하는 방법

답변

2

디 컴파일은 완벽한 과학이 아니며 입력 한 정확한 Java 코드를 거의 반환하지 않습니다.

코드를 컴파일 할 때 많은 최적화가 이루어 지므로 원래 코드를 얻으려는 경우 디 컴파일이 더 어려워집니다.

기껏해야 디 컴파일 된 코드가 바이트 코드와 함께 많이 생성됩니다. 당신은 원래의 코드를 작성하면서 보았을 때, 프로그램에서의 위치에 기반하여 그 바이트 코드를 대체 할 Java 코드를 알아낼 수 있어야합니다.

대부분의 간단한 응용 프로그램의 경우 디 컴파일 한 것보다 디 컴파일 된 코드를 수정하려고하는 것보다 처음부터 다시 쓰는 것이 더 쉽습니다.

tl; dr : 코드를 백업하는 것을 잊지 마십시오. 이제까지.

+0

하지만 가장 중요한 운영 및 비즈니스 논리는 바이트 형식이었습니다. 그걸 돌려받을 방법이 없다는 뜻인가요? 내가 처음부터 가야할까요? – Joseph

+2

@Joseph 온라인에서 사용할 수있는 바이트 테이블이 있습니다. 실제로이 코드를 사용하면 바이트 코드에서 해당 Java로 수동 변환 할 수 있지만 시간이 오래 걸릴 수 있습니다. 나는 처음부터 시작하는 것이 좋습니다. –

+0

많은 최적화가 필요합니까? 'Javac '은 실제로 최적화를 수행하지 않습니다. 안드로이드 툴체인도 마찬가지입니다. – Antimony

0

일반적으로 목표가 읽기 가능한 소스를 얻는 것이라면 JD-Gui와 같은 것이 최선의 방법입니다. 그러나 실패한 경우에는 작성한 디 컴파일러 Krakatau을 시도해 볼 수 있습니다.

Krakatau는 클래스 파일을 디 컴파일 할 수 있도록 설계되었지만 Java에서 난독 화되었거나 컴파일되지 않은 경우에도 클래스 파일을 디 컴파일 할 수 있습니다. 그러나 Java 컴파일러에 의해 남겨진 패턴을 이용하지 않기 때문에 결과는 JD-Gui와 같이 읽기 쉽지 않습니다. 완벽하지는 않지만 확실히 시도해 볼 가치가 있다고 생각합니다.

P. Krakatau는 JVM 바이트 코드만을 지원합니다. 디 컴파일하기 전에 Android에서 Java 바이트 코드로 다시 변환 할 방법이 필요합니다.