해킹공주의 일상
[FridaLab] 8번 문제풀이 본문
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 클래스로 형변환 하여 확인하고 있으므로, 이를 맞춰주기 위해서 사용했다.
'사이드 프로젝트 > CTF & 워게임' 카테고리의 다른 글
[Lord of SQL Injection] 2번 cobolt 풀이 (0) | 2023.01.06 |
---|---|
[Lord of SQL Injection] 1번 gremlin 풀이 (0) | 2023.01.06 |
[FridaLab] 7번 문제풀이 (0) | 2022.11.28 |
[FridaLab] 5번 문제풀이 (0) | 2022.11.22 |
[FridaLab] 4번 문제풀이 (0) | 2022.11.22 |
Comments