[목차]
1. 기본 용어 정리
2. 이전 시간 복습 및 학습 목표
3. 힙에서 인스턴스화된 android.view.View 객체 찾기
1. 기본 용어 정리
- 객체 : 소프트웨어 세계에서 구현해야 할 대상 (자동차)
- 클래스 : 객체를 구현하기 위한 설계도 (자동차 설계도)
- 인스턴스 : 클래스(설계도)를 따라서 소프트웨어 세계에 구현된 실체(포르쉐)
그럼 실습에서 다루는 API는
- Java.use : 객체를 다루는 API
- Java.choose : 인스턴스(포르쉐)를 찾는 API
라 할 수 있겠다.
2. 이전 시간 복습 및 학습 목표
이전 시간에
onResume 함수에 대해 '클래스 객체'를
반환하는 Java.use API 함수를 사용해
함수 재작성(implmentation) 및 후킹을
실습했다면
Java.perform(function(){
var hook_resume = Java.use("android.app.Activity")
hook_resume.onResume.implementation = function() {
console.log("[+] onResume() 가 호출 되었습니다!");
this.onResume();
}
})
이번에는 Java.choose API를 활용해
인스턴스화된 객체를 찾아본다.
인스턴스화된 객체를 찾는 코드에서
다룰 클래스는 android.view.View
객체!
3. 힙에서 인스턴스화된
android.view.View 객체 찾기
android.view.View 객체는
앱을 실행했을 때 눈에 보이는
이미지, 버튼 등을 가리키며
화면 layout, 사용자와 상호작용 처리하는
기본 사용자 인터페이스 클래스를 표시해 주는
클래스이다.
# 코드 작성 후
setImmediate(function(){ //에뮬레이션 시간초과 되더라도 프리다가 스크립트를 백그라운드에서 자동 실행해줌
Java.perform(function(){ // 현재 쓰레드가 가상머신에 연결되었는지 확인
Java.choose("android.view.View", { // android.view.View 클래스의 인스턴스화 된 객체를 찾는데
"onMatch" : function(instance){ // 매칭이 되면 인스턴스를 인자로 받아
console.log("[+] 인스턴스 객체 찾음!"); // 로그를 출력!
},
"onComplete" : function() { // 모두 찾아지면
console.log("[+] 힙 검색 종료"); // 힙에서 찾는 작업이 끝남!
}
})
})
})
돌려보면
android.view.View 클래스에 대한
인스턴스화된 객체 총 8개 찾아지는데
각각의 인스턴스가 어떤 값, 정보를
가지고 있는지 확인해 본다.
# 코드 추가 후
setImmediate(function(){
Java.perform(function(){
Java.choose("android.view.View", {
"onMatch" : function(instance){
console.log("[+] 인스턴스 객체 값: " + instance.toString()); // 인스턴스 값 출력!
},
"onComplete" : function() {
console.log("[+] 힙 검색 종료");
}
})
})
})
돌려보면
인스턴스 정보 출력 완료!
이와 같이 프리다를 통해
앱의 프로세스 메모리를 읽고
분석하고 함수를 수정하고,
실제 객체(인스턴스)를 찾는 등의
행위가 가능하다.
[도움 출처]
: 보안프로젝트 김태영 팀장
'APP 진단 > Android 2' 카테고리의 다른 글
7. 프리다 연습 - FridaLab (1) 환경 구성 (0) | 2022.12.10 |
---|---|
6. Python 바인딩 (0) | 2022.12.09 |
4. 프리다 기본 실습 (1) | 2022.12.03 |
3. 프리다 기본 문법 (이론) (0) | 2022.12.02 |
2. 프리다 기능 살펴보기 (0) | 2022.12.02 |