APKTOOL을 이용해 디컴파일이나 재컴파일 시 프레임워크 관련 에러가 뜨는 경우가 있다.

id:2를 가진 패키지의 프레임워크 리소스를 찾을 수 없단다... 뭘까???

더보기

Can't find framework resources for package of id:2. You must install proper framework files, see project website for more info.

 ID 넘버는 애플리케이션의 pkgid와 상응하며 1~30까지 사용 가능함. 어떤 제조사의 기기를 사용하느냐에 따라 id 값이 상이함.


1. Framework파일이란?

Android 앱은 Android OS에서 제공하는 코드와 리소스를 활용하는데 이를 Framework (resources)라고 한다. 

Apktool을 이용해서 Android 앱을 디컴파일하거나 재컴파일할때 이런 framework 파일을 사용하는데 일반적인 앱의 경우 AOSP(Android Open Source Project) 프레임워크를 사용하며 다음 경로에 1.apk로 저장된다.

1.apk는 따로 다운받을 필요없으며, apktool 사용 시 자동으로 다운로드 된다. 

[사용자 경로]\AppData\Local\apktool\framework\1.apk

* 단, 오래된 apktool을 사용하거나 apktool을 사용한지 오래된 경우 다음 명령어를 사용하거나 해당 위치에 접근하여 직접 파일을 지워주고 실행하면 된다.

apktool empty-framework-dir

 

하지만 삼성, LG 등의 폰에 처음부터 빌트인되어 있는 앱(메모, 카메라, 인터넷 등)들을 디컴파일하거나 재컴파일할 때 처음에 언급한것과 같은 에러가 뜬다. 2.apk는 어디서 구하는 것일까??

 

2. Framework 파일 가져오기

대부분 기기의 /system/framework 폴더에 프레임워크 파일이 위치하며, 보통 resources.apk, res.apk, framework.apk 등의 이름으로 저장되어 있다. 

해당 위치에 원하는 파일이 없는 경우, /data/system-framework, /system/app, /system/priv-app 등의 경로에 숨어있는 경우도 있으니 확인하면 된다.

 

내가 테스트한 LG 핸드폰의 경우 /system/framework/lge-res/lge-res.apk이름으로 저장되어 있었다. 

adb pull 명령어를 사용해 해당 apk를 로컬 컴퓨터로 가져와 다음 경로에 위치시키면 된다. 

adb pull /system/framework/lge-res/lge-res.apk [사용자 경로]\AppData\Local\apktool\framework\2.apk

//apk 파일명의 경우 에러에서 표기된 id와 동일하게 저장하면 된다. 

 

3. APKTOOL 사용

올바른 위치에 2.apk가 저장된 것을 확인한 후 다시 apktool을 사용하면 문제없이 디컴파일하거나 재컴파일 할 수 있을것이다!!

 

https://ibotpeaches.github.io/Apktool/documentation/

 

Apktool - Documentation

Introduction Basic First lets take a lesson into apk files. Apks are nothing more than a zip file containing resources and assembled java code. If you were to simply unzip an apk like so, you would be left with files such as classes.dex and resources.arsc.

ibotpeaches.github.io

 


APK-Manager Fix 7.4 (APK 디컴파일 / 컴파일 도구)

: apk 파일을 디컴파일 및 재 컴파일 등을 할 수 있는 툴

  • 최신버전을 다운받을 수 있다면 최신 버전 추천
  • 압축파일을 다운로드 받으면 다음 그림과 같이 여러 폴더와 cmd 파일이 존재한다.
  • cmd 파일을 실행시키면 apktool을 간편하게 사용할 수 있다.


  • 자주 사용하는 기능 및 사용 방법
    • 9 : Decompile APK
    • 14 : Compile APK / Sign APK / Install APK (All in one step)

** 앱은 TeamSIK의 CTF 연습 문제인 app-easy-release.apk를 사용 

1) 앱을 컴퓨터로 추출한다. (adb pull 또는 ASTRO 앱 사용)
                    - adb pull <apk 파일 위치 경로>
                    - 단말기에 설치된 앱 추출 시 ASTRO 앱 사용하면 편리함
                        → 앱 실행 > 앱 > 앱 오른쪽 상단의 메뉴 > 백업 
                        →  컴퓨터에 단말기 연결 후 backups > apps > 해당앱

            2) 추출한 앱(apk파일)을 "place-apk-here-for-modding" 폴더로 이동시킨다. 

            3) script.cmd를 실행시킨 후 22. Set current Project 입력


 4) 디컴파일하려는 앱(apk파일) 번호 입력


          5) 9. Decompile APK 입력하여 디컴파일

          6) Projects 폴더에서 디컴파일된 apk파일 확인

      


        7) 코드 수정 후  14. Compile apk / Sign apk / Install apk 를 입력하면 한번에 컴파일, 서명, 설치까지 가능하다. 
            ** 11. Compile APK로 컴파일 후, 12. Sign APK로 서명, 13. install APK로 단말기에 설치 각각 진행 가능\
            ** 서명까지 완료된 apk 파일은 "plcae-apk-here-for-modding" 폴더에 "signed[본래 파일명]"으로 저장된다.




apktool.jar

위의 방법이 훨씬 더 간단하므로 cmd툴을 이용하는 것을 추천하지만 apktool.jar 명령어에 대해서도 설명한다. 

https://ibotpeaches.github.io/Apktool/에서 최신 버전의 apktool을 다운로드 받은 후 진행하자.


1) 다운로드 받은 apktool.jar 파일이 위치한 경로에서 cmd를 실행시킨다.

       java -jar apktool.jar 
        


2) 디컴파일
    
      java -jar apktool d [apk파일 경로] 



3) 파일 수정 후 재 컴파일

     java -jar apktool b [디컴파일한 소스 폴더] -o [저장할 apk 명] 





4) 단말기에 설치하기 전에 서명을 해줘야 제대로 동작한다. 이때 APK Easy Tool을 사용하면 편리하다.

    [select] 클릭 후, 재 컴파일한 apk파일 선택 > sign selected APK 







+ Recent posts