파이썬3을 사용해서 안되는 것이 거의 없어졌지만 여전히 파이썬 버전2를 사용해야 되는 것들이 간혹 있다...

예를 들면 드로저 같은...?

그래서 파이썬 2.7과 파이썬 3버전을 동시에 설치해놓고 사용할 수 있도록 만드는 방법을 찾아봤다.


1. 파이썬 2.7 버전 설치

   그냥 디폴트값으로 설치하면 된다. 

   설치 경로는 C:\Python2.7이 된다. 

 

2. 파이썬 3 설치

   1) 설치파일을 실행시킨뒤 [Customize installation] 클릭

   2) Optional Features : 모두 체크 후 [Next] 클릭

   3) Advanced Options : Customize install location 부분에 경로를 C:\Python3으로 변경 

      * 원하는 경로로 설정 가능

   4) [Install] 클릭하고 설치

 

3. 환경변수 설정

   시스템 변수 > Path > 새로만들기 > 다음 경로(4개) 추가

   C:\Python3

   C:\Python3\Scripts

   C:\Python27

   C:\Python27\Scripts

 

4. python.exe 파일명 변경

   python3와 python27 폴더에 위치한 python.exe 파일명이 같으므로 둘 중 하나를 변경시켜 준다

   * 둘다 변경해도 무방하지만 나는 주로 python3를 사용하므로 python27만 python2.exe로 변경함

 

5. 확인

명령줄에 python 입력 시 python3이 실행되며 python2 입력 시 python2.7이 실행됨!

 

** python2.7 경로에 모듈을 추가하고 싶은 경우 다음 명령어 입력!

> python2 -m pip install [모듈명] 

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

 

#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] [패키지명/검색하고자하는 단어]  //숨겨진 리시버 정보 확인

 

 

+ Recent posts