본문 바로가기

모바일 앱 해킹

FridaLab 5 ~ 8 풀이

FridaLab 05

>> chall05() 메소드에 frida 문자열을 항상 전송하기

 

함수를 재작성하기 위해 Java.use 사용함

check 버튼을 누를 때마다 chall05()가 실행됨

setImmediate(function() {
	Java.perform(function(){
		var chall_05 = Java.use("uk.rossmarks.fridalab.MainActivity");
		chall_05.chall05.implementation = function(arg1){
			// 기존 함수와 동일한 로직
			this.chall05("frida");
			console.log("\nSolved Chall05");
		}
	})
})

 

 

 

 

FridaLab 06

>> 올바른 값으로 10초 후 chall06() 메소드 실행하기

 

setTimeout()은 시간 지연 함수로 첫 번째 인자는 실행할 함수, 두 번째 인자는 실행 전 대기시간(밀리초)

setTimeout(function(){
	setImmediate(function(){
		Java.perform(function(){
			var chall_06 = Java.use("uk.rossmarks.fridalab.challenge_06");
			chall_06.addChall06.implementation = function(arg1){
				Java.choose("uk.rossmarks.fridalab.MainActivity", {
					onMatch : function(instance){
						instance.chall06(chall_06.chall06.value);
					},
					onComplete : function(){
						console.log("\nSolved Chall06");
					}
				})
			}
		})
	})
}, 10000);

 

 

 

 

FridaLab 07

>> chall07Pin() 메소드를 브루트포스해서 chall07() 메소드로 확인하기

 

setImmediate(function() {
	Java.perform(function(){
		var chall_07 = Java.use("uk.rossmarks.fridalab.challenge_07");
		Java.choose("uk.rossmarks.fridalab.MainActivity", {
			onMatch : function(instance){
				for(var i = 1000; i<=9999; i++){
					var boan = String(i);
					if(chall_07.check07Pin(boan)){
						instance.chall07(boan);
						break;
					}
				}
			},
			onComplete : function(){
				console.log("\nSolved Chall07");
			}
		});
		
	})
})

 

 

 

 

FridaLab 08

>> check 버튼의 텍스트를 Confirm으로 변경하기

 

 

findViewById : 리소스 id를 통해서 레이아웃에 있는 뷰 객체들 중 일치하는 뷰를 가져오는 메소드

뷰는 안드로이드 기본 화면을 구성하는 모든 기본 화면의 구성요소이다.

버튼, 테이블, id/pw 입력 칸 등등 모든 것이 뷰가 된다.

 

getText() 등의 메소드를 사용하기 위해 findViewByID의 반환 값을 Button 객체로 지정

=> Java.cast(반환값, Java.use로 가져온 Button 클래스)

 

단순히 문자열이 아닌 Confirm이라는 새로운 String 객체를 생성하는 것이기 때문에

.$new 라는 연산자로 새로운 객체를 생성함

 

setText(string.$new("Confirm"));

 

java.lang.String

java.lang.CharSequence 두 개는 같다고 보면 됨

 

setImmediate(function() {
	Java.perform(function(){
		var klass = Java.use("android.widget.Button");
		Java.choose("uk.rossmarks.fridalab.MainActivity", {
			onMatch : function(instance){
				var checkid = instance.findViewById(0x7f07002f);
				var check = Java.cast(checkid, klass);
				var string = Java.use("java.lang.String");
				check.setText(string.$new("Confirm"));
			},
			onComplete : function(){
				console.log("\nSolved Chall08");
			}
		})
	})
})