안드로이드 스튜디오(Android Studio)를 이용한 동적디버깅

1. 디버깅할 APP을 apktool로 디컴파일

2. 디컴파일한 폴더의 AndroidManifest.xml를 열고 <application> 태그 내에 android:debuggable="true" 옵션 추가 후 저장
ex) <application android:icon="@drawable/app_icon" android:debuggable="true" ...
** 일반적으로 앱스토어에서 다운받은 앱은 android:debuggalbe 속성이 존재하지 않거나 false로 처리되어있다.  
→ true인 경우, 앱스토어에 올릴 수 없음


3. 재컴파일 후 디바이스에 설치

4. 디버거 연결 대기 ON  :: 디바이스에서 설정 > 개발자 옵션 > USB 디버깅 ON > 디버깅할 앱 선택 > debuggable 옵션을 준 앱 선택 



6. 안드로이드 스튜디오에 설치한 뒤 재시작 :: File > Settings > Plugins > Install plugin from disk...


7. 안드로이드 스튜디오 실행 시 Open an existing Android Studio project를 클릭하여 디버깅할 앱의 smali 폴더를 지정하여 실행
* android studio를 켰을 때 좌측에 파일들이 보이지 않을 경우 상단의 Android라고 되어 있는 부분을 클릭하여 Project로 선택

8. Run > Edit Configurations > + > Remote 선택하여 나온 탭에서 Settings의 Port를 8700으로 변경 후 저장


9. [Help - Find Action] 클릭 후 monitor 검색 및 실행
* 만약 안켜질 경우 [SDK 설치 폴더 - tools - monitor.bat] 실행
ex) C:\Users\KJY\AppData\Local\Android\Sdk\tools 


10. 진단폰에서 디버깅할 APP 실행 시 디버거 대기 창이 뜨고 이 때 monitor에서 빨간색 디버깅모양이 뜨면 정상

11. 안드로이드 스튜디오 내에서 브레이크 포인트를 건 뒤 Shift+F9를 눌러 디버깅 



JEB2를 이용한 동적디버깅

    1. 위의 1~4과정 진행 혹은 dirtyC0w를 이용하여 디버깅 가능상태 만들기

    2. 디버깅할 앱의 패키지와 액티비티명 확인

    3. 현재 실행중인 애플리케이션 중에서 디버깅 플래그 값을 확일할 수 있게끔 명령어 실행

        adb shell am start -D -n [패키지 이름/액티비티]
                 
    -D : 디버깅 가능하도록 플래그 추가
                 -n : 네이티브 힙메모리 덤프



    4. JEB2에서 디버깅 시작 :: Debugger > Start (혹은 벌레모양 아이콘 클릭)


    5. 디버거에 디버깅할 앱 Attach
    ** 하단의 Suspend all threads 체크한다


    6. 필요한 곳에 break point를 설정하여 디버깅 진행 (Ctrl+b)


    + Recent posts