Notice
Recent Posts
Recent Comments
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
07-21 10:52
Today
Total
관리 메뉴

해킹공주의 일상

[FridaLab] 8번 문제풀이 본문

사이드 프로젝트/CTF & 워게임

[FridaLab] 8번 문제풀이

h4ckpr1n 2022. 11. 29. 11:30

1. 문제파악

- 아래에있는 CHECK 버튼에 있는 글자가 Confirm 이 되도록 해봐라..! 그거어떡게하는건데

 

 

 

2. 문제풀이

- MainActivity 코드 내 8번 문제 관련 코드는 다음과 같다

//MainActivity
public void onClick(View view) {
    if (MainActivity.this.chall08()) {
        MainActivity.this.completeArr[7] = 1;
    }

public boolean chall08() {
    return ((String) ((Button) findViewById(R.id.check)).getText()).equals("Confirm");
}

chall08 함수 : R.id.check에는 어떤 아이디값이 담겨있는데, findViewById를 통해서 가리키는 아이디에 해당하는 뷰를 받아온다. 지금은 저 아이디 값이 가리키고 있는게 화면에 있는 CHECK 버튼이다 그 값이 Confirm 이면 참, 아니면 거짓을 출력한다

onClick 함수 : 버튼을 클릭하면 chall08 함수를 실행해서 참을 반환하면 completeArr[7]에 1을 넣는다

 

findViewById
: id 값을 사용하여 특정 뷰를 받아오는 메소드.

 

CHECK 버튼 뷰의 값을 가져와서 텍스트 값을 Confirm 으로 변경하면 된다!

 

 

 

- Hooking 코드는 다음과 같다. 설명은 코드 내 작성하였다.

setImmediate(function() {
	Java.perform(function(){
	
	var buttonClass = Java.use("android.widget.Button")
	
	Java.choose("uk.rossmarks.fridalab.MainActivity",{
		onMatch : function(instance){
			// R.check.id(2131165231)값으로 인스턴스를 button 으로 형변환
			var R_check_id = instance.findViewById(2131165231)
			var load_button = Java.cast(R_check_id, buttonClass)

			// 새로운 문자열로 텍스트 값 변경
			var string = Java.use("java.lang.String")
			load_button.setText(string.$new("Confirm"))
		},
		onComplete: function(){}
		})
	})
})

 

Java.cast(handle, class)
handle에 전달된 인스턴스를 전달된 클래스(class)로 캐스팅하는 함수이다.

여기서는 chall08() 함수에서 findViewById() 메소드로 가져온 인스턴스를 Button 클래스로 형변환 하여 확인하고 있으므로, 이를 맞춰주기 위해서 사용했다.
Comments