워게임/FridaLab
FridaLab Write Up - Challenge 08. 'Check' 버튼의 텍스트를 'Confirm'으로 변경하라.
- -
코드 분석
사진과 같이 Button의 값은 여러 파일을 통해 알아낼 수 있다.
res/layout/activity_main.xml에서 정의된 android:text의 값을 confirm으로 변경해야 목표에 도달할 수 있다.
Write Up
Java.perform(() => {
console.log("\n* Hooking Start *")
var challenge08 = () => {
Java.choose('uk.rossmarks.fridalab.MainActivity', {
onMatch: (instance) => {
var R_id = Java.use('uk.rossmarks.fridalab.R$id')
var string = Java.use('java.lang.String')
var button = Java.use('android.widget.Button')
var check_button_id = instance.findViewById(R_id.check.value)
var check_button = Java.cast(check_button_id, button)
check_button.setText(string.$new("Confirm"))
},
onComplete: () => console.log("challenge_08 solved!")
})
}
// Hooking Function Call
challenge08()
})
각 파일에서 값을 가져오기 위해 Java.use()을 사용하였다.
그 중 Button 클래스를 가져온 이유는 Button 클래스의 변수 값을 변경하는 것이기 때문에 변경 시 Button 클래스로 변환할 때가 존재하여 가져왔다.
findViewById()를 이용하여 뷰에 표현된 Button 객체를 가져와서 Java.cast()를 이용해 Button 클래스로 변환하였다. 이후 setText()를 이용하여 String 타입의 데이터를 파라미터로 넘겨 Button의 값을 변경하였다.
최종 Write Up Code
Java.perform(() => {
console.log("\n* Hooking Start *")
var challenge01 = () => {
var challenge_01 = Java.use("uk.rossmarks.fridalab.challenge_01")
challenge_01.chall01.value = 1
console.log("\nchallenge_01 solved!")
}
var challenge02 = () => {
Java.choose("uk.rossmarks.fridalab.MainActivity", {
"onMatch": (instense) => instense.chall02(),
"onComplete": () => console.log("challenge_02 solved!")
})
}
var challenge03 = () => {
var MainActivity = Java.use("uk.rossmarks.fridalab.MainActivity")
MainActivity.chall03.overload().implementation = () => true
console.log("challenge_03 solved!")
}
var challenge04 = () => {
Java.choose("uk.rossmarks.fridalab.MainActivity", {
"onMatch": (instense) => instense.chall04("frida"),
"onComplete": () => console.log("challenge_04 solved!")
})
}
var challenge05 = () => {
var MainActivity = Java.use("uk.rossmarks.fridalab.MainActivity")
MainActivity.chall05.overload('java.lang.String').implementation = function (arg) {
this.chall05("frida")
}
console.log("challenge_05 solved!")
}
var challenge06 = () => {
Java.choose("uk.rossmarks.fridalab.challenge_06", {
"onMatch": (instense) => instense.startTime(),
"onComplete": () => { }
})
setTimeout(() => {
var challenge_06 = Java.use("uk.rossmarks.fridalab.challenge_06")
Java.choose("uk.rossmarks.fridalab.MainActivity", {
"onMatch": (instense) => instense.chall06(challenge_06.chall06.value),
"onComplete": () => console.log("challenge_06 solved!")
})
}, 1000)
}
var challenge07 = () => {
var challenge_07 = Java.use("uk.rossmarks.fridalab.challenge_07")
Java.choose("uk.rossmarks.fridalab.MainActivity", {
"onMatch": (instense) => {
var pin = 1000
while (true) {
if (String(pin) == challenge_07.chall07.value) {
instense.chall07(String(pin))
break
}
pin++
}
},
"onComplete": () => console.log("challenge_07 solved!")
})
}
var challenge08 = () => {
Java.choose('uk.rossmarks.fridalab.MainActivity', {
onMatch: (instance) => {
var R_id = Java.use('uk.rossmarks.fridalab.R$id')
var string = Java.use('java.lang.String')
var button = Java.use('android.widget.Button')
var check_button_id = instance.findViewById(R_id.check.value)
var check_button = Java.cast(check_button_id, button)
check_button.setText(string.$new("Confirm"))
},
onComplete: () => console.log("challenge_08 solved!")
})
}
// Hooking Function Call
challenge01()
challenge02()
challenge03()
challenge04()
challenge05()
challenge06()
challenge07()
challenge08()
})
'워게임 > FridaLab' 카테고리의 다른 글
Contents
당신이 좋아할만한 콘텐츠
-
FridaLab Write Up - Challenge 07. check07Pin()의 chall07 변수 검증을 무차별 대입 공격을 통해 통과하라. 2022.12.15
-
FridaLab Write Up - challenge 06. 적절한 값을 사용하여 10초 후 chall06()를 동작시켜라. 2022.12.15
-
FridaLab Write Up - Challenge 05. 항상 chall05()에 "frida"를 전송하라. 2022.12.15
-
FridaLab Write Up - Challenge 04. chall04()에 "Frida"를 전달하라. 2022.12.15