[목차]

 

 

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("[+] 힙 검색 종료");  
			}
		})				
	})
})
 

 

돌려보면

인스턴스 정보 출력 완료!

 

 

이와 같이 프리다를 통해

앱의 프로세스 메모리를 읽고

분석하고 함수를 수정하고,

실제 객체(인스턴스)를 찾는 등의

행위가 가능하다.

 

 


 

[도움 출처]

: 보안프로젝트 김태영 팀장

728x90

'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

+ Recent posts