#1. 드로저(drozer) 설치

https://labs.f-secure.com/tools/drozer/

  • drozer (Agent .apk only) - 안드로이드폰에 설치
  • drozer (msi) - 윈도우 설치 파일
  • Python2 버전 사용 

#2. 드로저 실행

1) 모바일: drozer agent 앱 실행 후 우측 하단의 [ON] 버튼 클릭

    -> 디폴트로 31415 포트를 사용

2) PC: ADB로 단말기와 PC의 포트를 동일하게 설정

 ※ 다음 명령어 실행 전 adb와 모바일이 정상적으로 연결되는지 확인한다. 

adb forward tcp:31415 tcp:31415

정상적으로 포트포워딩이 되었는지 확인하면 31415 포트가 LISTENING 상태인 것을 확인할 수 있다.

netstat -an | findstr 31415 

 

3) PC: 드로저가 설치된 폴더로 이동 후 드로저 실행

drozer.bat console connect

위 명령어 실행 시 다음과 같은 에러가 나는 경우 pip install 명령어를 통해 필요한 모듈을 설치한다.

더보기

C:\Users\Administrator>drozer.bat console connect
Traceback (most recent call last):
  File "C:\Python27\Scripts\drozer", line 30, in 
    __import__("drozer.cli.%s" % (sys.argv[1]))
  File "C:\Python27\lib\site-packages\drozer\cli\console.py", line 8, in 
    from drozer.console import Console
  File "C:\Python27\lib\site-packages\drozer\console\__init__.py", line 4, in 
    from drozer.console.console import Console
  File "C:\Python27\lib\site-packages\drozer\console\console.py", line 5, in 
    from pydiesel.api.protobuf_pb2 import Message
  File "C:\Python27\lib\site-packages\pydiesel\api\__init__.py", line 9, in 
    from pydiesel.api.frame import Frame
  File "C:\Python27\lib\site-packages\pydiesel\api\frame.py", line 3, in 
    from pydiesel.api.protobuf_pb2 import Message
  File "C:\Python27\lib\site-packages\pydiesel\api\protobuf_pb2.py", line 3, in 
    from google.protobuf import descriptor
ImportError: No module named google.protobuf

pip install protobuf
pip install pyopenssl  // ERROR: drozer 2.4.4 requires pyopenssl>=16.2, which is not installed.
pip install pyyaml  // ERROR: drozer 2.4.4 requires pyyaml>=3.11, which is not installed.

pip install twisted
// drozer Server requires Twisted to run. Run 'pip install twisted' to fetch this dependency.

#3. 드로저를 이용한 취약점 분석

1) 앱 취약점 분석

run app.package.attacksurface -h // 옵션 설명
run app.package.attacksurface [패키지명] //패키지 취약점 확인

-> exported 설정된 것이 있는지, 디버깅 설정이 되어 있는지 등을 보여줌

 

2) 액티비티 분석

run app.activity.info -a [패키지명]

-> exported 설정된 액티비티의 권한 확인

 

run app.activity.start --component [패키지명] [액티비티명]

-> ADB로 am start -n [패키지명/액티비티명] 하는 것과 동일

-> 액티비티 무단 접근

 

3) 브로드캐스트 리시버 분석

 

run app.broadcast.info -a [패키지명]

run app.broadcast.info -f [검색하고자 하는 단어] //검색하고자 하는 단어가 포함된 패키지의 브로드캐스트 리비저 정보 검색

run app.broadcast.info -u [-a/-f] [패키지명/검색하고자하는 단어]  //숨겨진 리시버 정보 확인

 

 

JADX

: 이전 포스팅에서 설명한 jd-gui와 동일하게 java 디컴파일러
    ** 하지만 jd-gui 보다 디컴파일 결과가 좋고, dex2jar를 사용하지 않고도 디컴파일이 가능하여 더 많이 사용

다운로드 경로: https://github.com/skylot/jadx

1) jadx-gui.jar 파일 실행 


2) 디컴파일하고자 하는 apk 파일을 가져오면 디컴파일 끝!


JEB2

: java 디컴파일러

JEB는 상용화툴이라 앞서 설명한 두개의 디컴파일러보다 조금 더 기능도 많고 디컴파일 결과가 젤 좋다. 
다음에 설명할 동적 디버깅 또한 지원하는 툴로 모바일 애플리케이션 분석 시 가장 많이 사용하는 디컴파일러이다.

(해당 경로에서는 Free trial만 제공한다)

1) jeb.exe 실행



2) 디컴파일하고자 하는 apk 파일을 가져오기 후 Bytecode 선택 (smali 코드 추출)


3) 커서를 해당 페이지에 놓고 q를 눌러 디컴파일 끝~!




dex2jar

: APK 파일은 안에 classes.dex라는 파일이 있는데 이 파일을 Android Dalvik이 인식할 수 있도록 class 파일을 바이트 코드로 변환하는 툴


1) apk 파일의 압축을 푼다.



2) 압축을 푼 classes.dex파일을 d2j-dex2jar.bat이 위치한 폴더로 이동시킨다.

3) cmd를 열고 다음 명령어를 실행하여 dex파일을 jar파일로 변환한다.


4) 해당 폴더 내 jar 파일이 위치하는 것 확인


5) jar파일의 내용을 확인하려 하지만 깨져서 확인 불가ㅠㅠ



이때 사용하는 것이 다음의 jd-gui 툴이다!


JD-GUI

: 자바 디컴파일러로 위에서 dex2jar로 추출해낸 jar파일을 디컴파일해 주는 툴

    ** 하지만 디컴파일이 완벽하게 100% 가능한 것이 아니므로 참고하장...ㅠㅠ

다운로드 경로: http://jd.benow.ca/

1) 다운받은 jd-gui.exe 실행


2) 디컴파일할 jar 파일 가져오기



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 








안드로이드 APK 취약점 점검 환경 구성

안드로이드 APK 취약점 점검을 하려면 일단 내 호스트 PC에 환경 설정을 해야한다. 

  1. 안드로이드폰을 루팅
            일단, 대부분의 취약점 점검이 루팅된 환경에서 진행되므로 안드로이드폰을 루팅해야한다. 

            - 루팅 방법에 대해서는 가지고 있는 핸드폰의 안드로이드 버전 및 비트(32/64bit)를 확인 후에 진행하도록 한다. 
            - 검색하면 루팅툴들이 많이 존재하므로 각 핸드폰에 맞는 툴을 이용하는 것을 추천
            - 나는 KingRoot라는 앱을 이용해서 루팅을 진행했는데 여전히 많이 사용하고 있는 툴인것 같다. 
        • 루팅 확인 :  플레이 스토어에 검색하면 여러 툴이 나오므로 다운로드 후 사용 

  1. 단말기 제조사 드라이브 설치
            단말기를 컴퓨터에 제대로 연결하기 위해 각 제조사의 통합 드라이버를 설치한다.
            ex) LG USB 통합 드라이버, SAMSUNG 통합 드라이버 등...

  3. Android SDK 설치
            이클립스, 안드로이드 스튜디오 등 여러 SDK 툴이 존재하지만 안드로이드 스튜디오 설치시 추후에 필요한 
            개별 실행파일, adb 등이 같이 설치되므로 안드로이드 스튜디오를 추천
            
            - 자세한 설치 과정은 설명하지 않는다.

  1. adb 환경변수 설정
            단말기를 PC에 연결하기 위해서 SDK의 adb라는 프로그램이 사용된다.

            1) 안드로이드 SDK 설치  경로에 platform-tools폴더 내 adb.exe파일이 있는 것을 확인 후 해당 경로 복사
                ex) C:\Users\Users\AppData\Local\Android\Sdk\platform-tools
            2) 위의 경로를 환경변수의 Path에 저장
            3) cmd 창 열고 "adb" 명령어 실행 시 정상 실행 확인

  5.  단말기 개발자 옵션 및 디버깅모드 켜기
            해당 설정을 하지 않으면 adb shell로 PC에 연결이 불가능하다.

            - 환경설정 > 개발자 옵션 켜기 > USB 디버깅 체크
                ** 개발자 옵션이 없는 경우, 디바이스 정보 > 소프트웨어 정보 > 빌드 번호를 7번 터치하면 생성됨

            



            
       6. 단말기와 PC 연결 및 확인
           이제 USB 케이블을 이용하여 단말기와 PC를 연결한다.
           
            - USB 케이블이 정상적으로 연결되면 "USB 디버깅을 허용할까요?" 라는 경고창이 뜨는데 [확인]을 클릭한다.
            - 이제 cmd창을 켜서 adb 명령어를 실행한다.
            


            ** adb devices :  연결된 device 목록 확인
            ** adb shell : 연결된 디바이스의 리모트 쉘 실행
            ** adb 명령어에 대해서는 추후 포스팅할 예정임.



+ Recent posts