앱 진단(Android)/FridaLab 실습

1. Change class challenge_01‘s variable ’chall01‘ to:1

보안개구리 2024. 5. 9. 11:08

 FridaLab 실습을 진행하도록 하겠습니다.

 

 FridaLab 접속 시 8가지의 과제가 나오며 이번 시간에 실습할 과제 1. Change class challenge_01‘s variable ’chall01‘ to:1 과제로 'challenge_01' 클래스의 변수 'chall01'의 값을 '1'로 변경하면 됩니다.

 먼저 ' challenge_01 ' 클래스를 확인해보겠습니다.

 

challenge_01 클래스 'chall01' 변수와  'getChall01Int() 메서드를 확인할 수 있는데 변수 값을 1로 변경하거나 return 값을 1로 변경하거나 어느 방법을 사용해도 클리어가 가능합니다. 먼저 첫 번째 방법을 보겠습니다.

 

setImmediate(function(){
	Java.perform(function(){
		var fridalab1 = Java.use('uk.rossmarks.fridalab.challenge_01');
		fridalab1.chall01.value = 1;
		console.log("[***] chapter1 clear [***]")
	});
});

 'chall01' 변수가 static을 사용했기 때문에 Java.use를 사용해서 'uk.rossmarks.fridalab.challenge_01' 클래스를 가져와 'fridalab1 ' 변수에 할당한 후 chall01.value=1을 통해 변수 값을 1로 변경합니다. 그럼 작성한 js 파일을 로드해 보겠습니다.

 

ps 명령어를 통해 PID 확인 후 JS파일을 로드합니다. "[***] chapter1 clear [***] " 메시지가 출력됨을 확인하였습니다. 

 

 FridaLab 앱 접속 후 CHECK 클릭 시 1번 문제가 초록색으로 변한 것을 보아 정상적으로 후킹됐음을 알 수 있습니다.

 다음은 두 번째 방법인  return 값을 1로 변경해 보겠습니다.

 

setImmediate(function(){
	Java.perform(function(){
		var fridalab1 = Java.use('uk.rossmarks.fridalab.challenge_01');
		fridalab1.getChall01Int.implementation = function(){
			return 1;
		};
	});
});

 이번에는 getChall01Int() 메서드에 리턴값을 조작하여 1이 반환되게 하였습니다. 해당 스크립트를 실행해 보도록 하겠습니다.

 

  역시 정상적으로 후킹 된 것을 확인하였습니다.