보안개구리
7. Bruteforce check07Pin() then confirm with chall07() 본문
7. Bruteforce check07Pin() then confirm with chall07()
보안개구리 2024. 6. 28. 22:30FridaLab 실습을 진행하도록 하겠습니다.
지난 실습에서는 6. Run chall06() after 10 seconds with correct value를 진행하였고 이번 실습에서는 7. Bruteforce check07Pin() then confirm with chall07()를 진행하겠습니다. 이해가 되지 않기 때문에 직접 확인해보겠습니다.
먼저 MainActivity 내 존재하는 chall07() 메서드입니다. 문자열 'str'을 입력받고 있으며 challenge_07.check07Pin(str)로 알 수 있듯이 challenge_07클래스 내 check07Pin 메서드로 문자열 인자인 str을 넘겨준 후 반환되는 반환값이 true일경우 문제 해결 그렇지 않을 경우 실패입니다.
challenge_07 클래스를 확인해보도록 하겠습니다.
challenge_07 메서드는 static으로 선언된 String 변수인 chall07, setChall09 메서드, check07Pin 메서드로 구성되어 있습니다. 먼저 우리가 확인해야 할 check07Pin메서드를 확인해보면 문자열 str 인자를 입력받고 retrun 값으로는 'str'값과 chall07값을 비교 후 일치하면 'true'값을 일치하지 않으면 'false'값을 반환합니다.
let fridalab7 = Java.use('uk.rossmarks.fridalab.challenge_07');
Java.choose('uk.rossmarks.fridalab.MainActivity', {
onMatch: function(instance){
instance.chall07(fridalab7.chall07.value);
},
onComplete: function(){
console.log("[***]Challenge07_Sucess!!![***]");
}
});
사실 MainActivity 내 chall07 메서드가 호출될 시 인자값을 전해주는데 해당 인자값을 challenge_07.chall07.value로 설정하게 되면 'str'의 값과 chall07의 값은 항상 일치하기 때문에 true값을 반환합니다. 따라서 위 같이 스크립트를 작성하고 실행해도 문제는 해결이 됩니다. 하지만 위 방법은 문제가 원하는 답이 아니기 때문에 다른 풀이를 해보겠습니다.
setchall07() 메서드는 1000~9999까지의 랜덤한 수를 생성하여 chall07 필드에 저장합니다. 이 필드에 저장된 값이 check07Pin() 메서드에서 전달받은 인자값과 같아야 문제가 해결됩니다.
Brutefoce라는 문제 취지에 맞게 check07Pin() 메서드에서 전달받은 인자값과 chall07 필드에 저장된 값이 같을때까지1000~9999까지의 인자를 전달하는걸 반복하겠습니다.
// Challenge 07
let fridalab7 = Java.use('uk.rossmarks.fridalab.challenge_07');
for(let i=1000; i<10000; i++){
if(fridalab7.check07Pin(String(i))){
Java.choose('uk.rossmarks.fridalab.MainActivity', {
onMatch: function(instance){
instance.chall07(String(i));
},
onComplete: function(){
console.log("[***]Challenge07_Sucess!!![***]")
}
});
}
}
'앱 진단(Android) > FridaLab 실습' 카테고리의 다른 글
6. Run chall06() after 10 seconds with correct value (0) | 2024.06.28 |
---|---|
5. Always send "frida" to chall05() (0) | 2024.06.28 |
4. Send "frida" to chall04() (0) | 2024.05.09 |
3. Make chall03() return true (0) | 2024.05.09 |
2. Run chall02() (0) | 2024.05.09 |