Write-up/FridaLab

fridalab-challenge 01

연양 2023. 2. 17. 21:29

 

해당 문제의 경우, 클래스  challenge_01의 변수’chall01’을 ‘1’로 변경해야한다. 

 


1. 소스 코드 분석

소스 코드를 한 줄 단위로 살펴보면 다음과 같다.

public class Challenge_01 { 
//'Challenge_01' 이라는 클래스 생성
	static int chall01;
	//int(정수형)의 static(정적)변수 'chall01' 선언
	// call01은 클래스 변수이다. 

	public static int getChall01Int() {
	//static(정적) getChall01Int 메소드 생성
	return chall01;
	//chall01를 반환
	}
}

 

.value 를 통해 chall01() 메소드를 직접 변경을 하거나 .implementation으로 함수를 재작성하여 1을 반환하도록 해야한다. .

 

참고로 static 정적 변수는 초깃값을 지정하지 않으면 default 값이 0이다. 여기서는 따로 chall01 변수의 값을 지정하지 않았으니, 초깃값은 0으로 자동 초기화가 되는 것이다. 

2. chall01() 초기 값 확인

setImmediate(function(){
//프로세스 자동 종료 방지
	Java.perform(function(){
// 단말기가 연결되어 있는지 확인 및 함수 호출
		var change_value = Java.use("uk.rossmarks.fridalab.challenge_01");
//메소드를 후킹하기 위해 앱에서 사용하는 클래스와 연동되는 변수 선언
		var result = change_value.getChall01Int()
		console.log("[*] chall01 value", result);
	});
});

여기서 getChall01Int 함수는 변수가 아닌 메소드 형태이기 때문에 함수명()  으로 해줘야 한다. 

 

더보기

처음에는 변수로 생각해서 getChall01Int.value 했다가 아래와 같은 결과가 나왔다.

 그래서 찾아보니 위에서는 getchall01Int를 호출할 때 change_value라는 변수를 통해서 challenge_01이라는 클래스를 호출하고 있으며,  메소드를 수행하기 위해서는 객체를 통해서 메소드를 수행할 수 있다는 사실을 알고 수정했다. 

 

물론, 변수에 직접 접근 후 초기값을 불러와도 된다. 

setImmediate(function(){
	Java.perform(function(){
		var change_value = Java.use("uk.rossmarks.fridalab.challenge_01");
		console.log("[*] check chall01 value =" ,change_value.chall01.value);
	});
});

 

3-1. 문제 풀이(1) - 변수 value를 직접 설정

setImmediate(function(){
	Java.perform(function(){
		
		console.log("[*] start");
		var change_value = Java.use("uk.rossmarks.fridalab.challenge_01");
		//메소드를 후킹하기 위해 앱에서 사용하는 클래스와 연동되는 변수 선언
		console.log("[*] before chall01 value =" ,change_value.chall01.value);
		change_value.chall01.value = 1;
		// chall01변수의 값을 직접 설정
		console.log("[*] after chall01 value =" ,change_value.chall01.value);
		console.log("[*] clear chall01");
	});
});

 

3-2. 문제풀이(2) - 함수 재작성(implementation)

setImmediate(function(){
	Java.perform(function(){
		
		console.log("[*] start");
		var change_value = Java.use("uk.rossmarks.fridalab.challenge_01");
		//메소드를 후킹하기 위해 앱에서 사용하는 클래스와 연동되는 변수 선언
		console.log("[*] before chall01 value =" ,change_value.chall01.value);
		change_value.chall01.value = 1;
		// chall01변수의 값을 직접 설정
		console.log("[*] after chall01 value =" ,change_value.chall01.value);
		console.log("[*] clear chall01");
	});
});

 

CLEAR

 

'Write-up > FridaLab' 카테고리의 다른 글

fridalab-challenge 04  (1) 2023.04.02
fridalab-challenge 03  (2) 2023.04.02
fridalab-challenge 02  (0) 2023.04.02