강의 : 프리다(frida)를 이용한 안드로이드 앱 모의해킹
6주차 활동 : 섹션7(프리다 챌린지로 연습 7-8) 섹션8(FRIDA 활용 1-3)
7. 챌린지 풀어보기, 일곱번째
7. Bruteforce check07Pin() then confirm with chall07()
@uk.rossmarks.fridalab.MainActivity
@uk.rossmarks.fridalab.challenge_07
True가 되는 조건, 문제해결
check07() 입력값 1,000부터 9,999까지 chall07 클래스변수 범위 내 수 브루트보스로 다 입력해보기,
8. 챌린지 풀어보기, 여덟번째
8. Change 'check' buttons's text value to 'Confirm'
@uk.rossmarks.fridalab.MainActivity
'check'버튼의 텍스트를 'Confirm'으로 바꿔야한다.
안드로이드의 UI 함수들은 Main UI Thread에서 동작한다.
그래서 Main instance를 불러온 상태에서 findViewByld를 사용할 수 있고,
@uk.rossmarks.fridalab.R.id
True가 되는 조건.
import frida
jscode = """
Java.perform(function(){
//chall08
var main;
Java.choose('uk.rossmarks.fridalab.MainActivity', {
onMatch: function(instance) {
main = instance;
},
onComplete: function() {}
});
var id = main.findViewById(2131165231);
var button = Java.use('android.widget.Button');
var checkButton = Java.cast(id, button);
var string = Java.use('java.lang.String');
checkButton.setText(string.$new('Confirm'));
});
"""
process = frida.get_usb_device().attach('uk.rossmarks.fridalab')
script = process.create_script(jscode)
script.load()
raw_input()
}
}
});
"""
process = frida.get_usb_device().attach('uk.rossmarks.fridalab')
script = process.create_script(jscode)
script.load()
raw_input()
1. FRIDA 활용, 루팅 탐지 우회
앱 UnCrackable-Level1.apk
다운로드 후 앱 실행 시 'Root detected' 루팅 탐지에 걸려 실행시킬 수 없다.
@sg.vantagepoint.uncrackable1.MainActivity
루팅 탐지 우회 : Onclick 실행 시, System.exit 실행안 되도록
setImmediate(function(){
Java.perform(function(){
var exitBypass = Java.use("java.lang.System");
exitBypass.exit.implementation = function () { // function (arg) 받아도 상관 없음
console.log("[*] 루팅 탐지 후킹 성공!");
}
})
})
2. FRIDA 활용, 로그인 우회
앱 sieve.apk
로그인, 회원가입 창이 뜨고 ID PW 입력하는 창을 띄우는 기능 존재.
임의의 ID, PW로 회원가입한다.
우회 대상: 잘못된 PIN 입력시 'This password is incorrect' 문구 출력
@com.mwr.example.sieve.MainLoginActivity
loginsSucessful 메서드 후킹한다.
checkKeyResult Input 항상 true
setImmediate(function(){
Java.perform(function(){
var login_bypass = Java.use("com.mwr.example.sieve.MainLoginActivity");
login_bypass.checkKeyResult.implementation = function(arg){ // 인자값 하나 받고 있음 checkKeyResult(boolean status)
console.log("\n[+] 로그인 우회 성공!\n");
this.checkKeyResult(true); // checkKeyResult의 기존 조건 분기 로직을 그대로 동작시키면서 무조건 true로 빠지도록!
}
})
})
위 자바스크립트 실행 후 , 아무 PW으로 로그인 시도.
3. FRIDA 활용, 브루트포스 PIN
앱 seive.apk
Goal: PIN 번호를 브루트포스하여 올바른 PIN 번호 값을 획득
com.mwr.example.sieve.ShortLoginActivity
submit()메소드에서 PIN 번호 검사하는 로직 존재할 것으로 추측.
wokingPIN 변수에 입력한 PIN 번호값 담겨 있고, serviceConnection.checkPin() 메소드의 인자값으로 전달된다. serviceConnection.checkPin() 메소드를 0000부터 9999까지의 범위로 브루트포스하여 정확한 PIN 번호를 찾 코드를 작성한다.
// sieve.js
setImmediate(function() {
Java.perform(function() {
// 패스워드 우회 로직 생략
function padToFour(number) { // 자릿수가 모자란 정수의 경우 앞에 0을 채워넣는 함수
if(number<=9999) {
number = ("000"+number).slice(-4);
}
return number;
}
var pinBypass = Java.use("com.mwr.example.sieve.ShortLoginActivity");
pinBypass.submit.implementation = function(arg) {
var service = this.serviceConnection.value; // serviceConnection 클래스 객체 값을 가져옴
for(var i=0;i<9999;i++) {
service.checkPin(padToFour(i));
console.log(padToFour(i));
}
}
})
})
checkPin() 메소드 호출 위해서 pinBypass 변수로 필요한 클래스 호출했다.
스크랩트 인젝션 후 틀린 PIN 번호를 입력하면 콘솔에 0000부터 9999까지 출력되면서
올바른 PIN 번호가 입력되어 저장된 데이터를 확인할 수 있다.
'4-2. 2024-1 심화 스터디 > 안드로이드 모의해킹' 카테고리의 다른 글
[6주차] 블레이드러너 - 안드로이드 모의해킹 (0) | 2024.05.16 |
---|---|
[5주차] 블레이드러너 - 안드로이드 모의 해킹 (0) | 2024.05.14 |
[3주차] 블레이드러너- 안드로이드 모의해킹 (0) | 2024.04.04 |
[2주차] 블레이드러너 - 안드로이드 모의해킹 (1) | 2024.03.24 |
[1주차] 블레이드러너 - 안드로이드 모의해킹 (0) | 2024.03.22 |