1. JDB
The Java Debugger, jdb, is a simple command-line debugger for Java classes. It is a demonstration of the Java Platform Debugger Architecture that provides inspection and debugging of a local or remote Java Virtual Machine.
[출처] http://docs.oracle.com/javase/7/docs/technotes/tools/windows/jdb.html
간단히 정리하면 로컬 혹은 원격 자바 가상머신에서 실행되는 자바 프로그램을 디버깅할 수 있는 디버거입니다.
이 JDB를 이용하여 앱을 디버깅 할 수 있습니다.
위치 : ..../JDK_HOME/bin/jdb
2. 안드로이드 앱에 JDB Attach방법
2.1 디버깅 앱 포트번호 알아내기
먼저, 안드로이드 앱에서 사용하고 있는 포트번호를 알아내야합니다.
앱 실행 전 adb jdwp 실행 결과와 디버깅할 앱 실행 후 adb jdwp 결과를 비교하여 앱에서 실행하는 포트를 알아냅니다.
아래는 결과물을 diff하여 알아낸 창입니다.
보통은 맨 아래에 추가가 되는 형태인 듯하네요. 예시에서 디버깅 할 앱에서 사용하고있는 포트 번호는 8160입니다.
2.2 디버깅 포트를 로컬 포트로 포워딩
adb 명령어를 통해 디버깅 포트를 로컬 포트로 포워딩해줍니다.
adb forward tcp:[로컬포트] jdwp:[디버깅포트]
2.3 jdb실행
로컬포트를 이용하여 jdb를 attach합니다.
위의 예시는 디버깅포트가 8218을 사용하고 있고, 로컬포트 11111로 포워딩 해주고 난 후
jdb -connect com.sun.jdi.SocketAttach:hostname=localhost,port=11111(포워딩한 로컬포트) 를 실행하여
JDB를 Attach하였습니다.
3. 기본 JDB 명령어
명령어 |
사용법 |
설명 |
next |
next |
다음 라인 실행 |
local |
local |
현재 로컬 영역 변수 보기 |
threads |
threads |
현재 실행 중인 스레드 확인 |
methods |
methods [Class Name] |
해당 클래스가 사용하는 메서드 출력 |
stop in |
stop in [method name] |
해당 메서드에 브레이크포인트 설정 |
print [value] |
특정 변수 값 출력 |
|
eval |
eval [Java Code] |
자바코드를 실행시킴 |
run | run | 현재 브레이크 포인트 |
[참조] 안드로이드 모바일 앱 모의 해킹(지은이. 조정원, 김명근, 조승현, 류진영, 김광수)
'Study > 안드로이드' 카테고리의 다른 글
aarch64에서 LD_PRELOAD Injection을 통한 함수후킹(실패) (0) | 2017.04.10 |
---|---|
Drozer 기본 명령어 (0) | 2017.02.09 |
안드로이드 재서명 하기 (2) | 2016.05.08 |
안드로이드 apk서명 (0) | 2016.05.02 |
안드로이드 apk꺼내기 (0) | 2016.05.02 |