보안개구리

5. Always send "frida" to chall05() 본문

앱 진단(Android)/FridaLab 실습

5. Always send "frida" to chall05()

보안개구리 2024. 6. 28. 00:23

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

 

 지난 실습에서는 04. Send "frida" to chall04()를   진행하였고 이번 실습에서는 5. Always send "frida" to chall05()를 진행하겠습니다. 해석하면 chall05() 메서드에 frida를 보내라고 하는데 해당 메서드를 확인해 보겠습니다.

 

 jadx 내 challo5() 메서드 검색 후 해당 메서드가 존재하는 MainActivity로 이동하여 확인해 보겠습니다.

 

 chall05() 메서드 확인 시 문자열 'str'을 인자값으로 받고 있으며 만약 해당 문자열이 "frida"일 경우  this.completeArr[4] = 1;을 수행하고 그렇지 않다면  this.completeArr[4] = 0;을 수행합니다. 아마 문자열이 일치할 경우 CHECK 버튼 클릭 시 문자 색을 초록색으로 그렇지 않다면 빨간색으로 유지하라는 의미로 추측할 수 있습니다. 

 지난 04 실습과 유사하나 여기서 확인해야 할 부분이 한 가지 더 있습니다.

 

 해당 부분은  CHECK 버튼이 눌렀을 때 실행되는 부분으로 CHECK 버튼 클릭 시 chall05() 메서드에 "notfrida!" 인자를 보내게 됩니다. 즉 challenge04처럼 스크립트를 작성하여 후킹해도 CHECK 버튼을 누르는 순간 "notfrida!"라는 인자값을 보내기 때문에 문제 해결이 되질 않습니다. 이 문제를 해결하기 위해서는 후킹 하여 chall05() 메서드를 호출할 때마다 "frida"라는 인자값을 받게 해야 합니다.

 

// Challenge 05
var fridalab5 = Java.use('uk.rossmarks.fridalab.MainActivity');
fridalab5.chall05.implementation = function(str){
	str = "frida";
	this.chall05(str);
};	
console.log("[***]Challenge05_Sucess!!![***]");

 Java.use()를 사용하여 chall05 메서드에 접근 후 해당 메서드가 호출될 때마다 "frida"라는 문자열을 인자값으로 받도록 설정하였습니다. 해당 스크립트 작성 후 프리다를 통해 스크립트 파일을 로드해 보겠습니다.

 

 CHECK 버튼 클릭 시 정상적으로 인자가 전달되어 5번 문제가 해결된 것을 확인하였습니다