21.06.03
공부한 것을 정리하는 용도의 글이므로 100% 정확하지 않을 수 있습니다.
참고용으로만 봐주시고, 내용이 부족하다고 느끼신다면 다른 글도 보시는 것이 좋습니다.
+ 틀린 부분, 수정해야 할 부분은 언제든지 피드백 주세요. 😊
※ 해당 내용은 Mac환경에서 실행되었습니다.
by. ryalya
👉 실행 가능한 프로그램 코드를 사람이 읽을 수 있는 고급 프로그래밍 언어로 변환하는 것.
👉 여기서는 apk 파일을 가지고 원본 java 코드를 복원해내는 작업을 말함.
🚫 불법적 목적이 아니라 앱 분석 및 디버깅, 유지 보수 등에 합법적인 범위 내에서 사용되어야 함.
내부 파일을 확인만 해볼 경우
- ApkTool 이용, apk -> jar 파일 변환
- jar 파일 확인
파일을 수정하고 앱 재빌드 하는 경우
- Apk 압축 풀기
- dex -> jar 파일 변환
- jar 파일 확인
- 파일 수정
- 다시 빌드하기
- 서명 및 설치
apktool d [apk파일 위치]
→ 터미널에 위의 명령어를 실행하면 해당 경로에 apk의 이름으로 폴더가 하나 생성되며,
폴더 안에는 아래 이미지처럼 smali 폴더가 생긴 것을 확인할 수 있다.

만약 특정 경로를 지정해주고 싶다면 아래처럼 결과 폴더명을 추가해주면 된다!
apktool d [결과 폴더] [apk파일 위치]
소스를 열어보기 위해서는 jadx-gui가 필요하다.
아래 사이트에서 최신 version을 다운 받을 수 있다.
http://java-decompiler.github.io/
( ※ 운영체제에 따라 다르므로 확인 후 다운 받으세요. )

다운받은 후, 압축을 풀어주고 JD-GUI를 실행하였는데
Mac은 보안을 굉장히 신경써주기 때문에 아래처럼 바로 쓰레기통에 버려주려고 한다...

근데 그러면 소스를 볼 수 없게 되므로 시스템 환경설정 → 개인정보 보호 및 보안에서 열기로 실행시켜주기!
자신있게 실행시켜줬는데 Java version이 1.8 이상이 아니라서 실행이 불가능하다는데
'그럴리 없는데?'라고 생각하며 터미널에서 호다닥 version 검사를 해보니
...? 1.8 version 맞잖앙.... 나한테 왜그래....
진짜 나는 뭐 하나 하면서 한 번에 제대로 되는 꼴을 못봄...
그냥 Java 버전이나 업데이트 시켜주자 하면서 시스템 환경설정 하단에 Java 아이콘을 눌렀는데...
제어판 다시 열기를 아무리 눌러도 버튼만 잠시 사라졌다가 아래처럼 다시 나타날 뿐 이동이든 업데이트든 아무것도 안됨......

시스템 환경설정 > 언어 및 지역 에서 대한민국을 다른 나라로 적당히 변경해주면 된다.
나는 적당히 미국을 선택했다... 그냥 뭔가.... 미국이 제일 괜찮아보였어...(?)
변경 후, 다시 Java 아이콘을 클릭하면 아래와 같은 창이 뜸!
'지금 업데이트'를 클릭하여 업데이트 해주기!
근데 그래도 똑같이 아래와 같은 에러가 뜬다면???
No suitable Java version found on your system!
This program requires Java 1.8+.
Make sure you install the required Java version.
1. JD-GUI 오른쪽 클릭해서 패키지 내용 보기 클릭

2. Contents/MacOS/universalJavaApplicationStub.sh
그럼 Contents 폴더가 보일텐데 위처럼 계속 폴더를 타고 들어가서
universalJavaApplicationStub.sh를 수정해줘야 한다.
Xcode로 수정하든 편집기로 수정하든 Visual Studio로 수정하든 상관X!
3. export JAVA_HOME=$(/usr/libexec/java_home -v11) 추가
universalJavaApplicationStub.sh를 클릭하여 45번째 줄 정도까지 내리면
#resolve symlinks 라고 적혀있는데 위쪽 아무 곳에 아래 한 줄을 추가하면 된다.
export JAVA_HOME=$(/usr/libexec/java_home -v11)
