[목차]
1. 환경 구성
2. 로그인 우회 실습
# 타깃 1. 비밀번호 검증 로직 우회
# 타깃 2. Pin 번호 검증 로직 우회 (Brute force)
1. 환경 구성
(1) 실습 앱 다운로드
다운로드 경로
https://github.com/as0ler/Android-Examples/blob/master/sieve.apk
들어가서 View raw나
Download 버튼 클릭

(2) 앱 설치 및 실행 테스트
adb로 설치 후

앱을 실행해 주고

데이터 입력 후 저장!



환경 구성 완료!
2. 로그인 우회 실습
우선 잘못된 비밀번호

그리고 잘못된 핀 번호 입력 시

The password is incorrect
라는 에러 메시지가 나오는데
이 두 구간을 모두 우회해 본다.
# 타깃 1. 비밀번호 검증 로직 우회
(1) 힌트 찾기
위에서 찾은 키워드로 검색 시

마땅한게 안 나옴
이럴 땐
리소스 > AndroidManifest.xml 파일 내
패키지 이름을 확인 후

패키지 메인 클래스에서
관련 메서드를 유추

의심 가는 메서드가 어디서 호출되는지 확인

해당 클래스들을 살펴보면서
어느 부분을 후킹 할지
고민해 본다.
MainLoginActivity - 비밀번호 우회 포인트
ShorLoginActivity - Pin 우회 포인트
(2) 후킹 포인트 확인
MainLoginActivity 클래스 내

checkkeyResult 메서드를 후킹 해
항상 True가 반환되어
loginSuccessful이 되도록
재작성해본다.
(3) 코드 작성
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로 빠지도록!
}
})
})
돌린 뒤

아무 값이나 넣어주고 Sign in을 시도하면

로그인 우회에 성공!


정상 접속 완료!
# 타깃 2. Pin 번호 검증 로직 우회

(1) 후킹 포인트 확인

이용자가 입력한 값이
this.serviceConnection.checkPin
안에 들어가니 해당 로직이 있는
submit 메서드를 후킹, 재작성하고
Pin은 4 자리로 이루어져 있으니
0000~9999까지 brute force
공격으로 넣어보면 된다.
(실습에서는 1000~3333번 사이로 진행)
checkPin이 인자로 받고 있는 데이터는

String 값이고 우리가 넣는 값은
Int 형이니, 해당 값을 String으로
바꿔 보내야 한다.
(2) 코드 작성
setImmediate(function(){
Java.perform(function(){
function padToFour(number){
if(number<=3333){
number = ("000" + number).slice(-4);
return String(number);
}
}
var pin_bypass = Java.use("com.mwr.example.sieve.ShortLoginActivity"); // 클래스에 대한 객체를 사용한다!
pin_bypass.submit.implementation = function(arg){ // submit 메서드는 인자 하나만 받고 있음 submit(View view)
var service = this.serviceConnection.value; // this.service.Connection.checkPin(this.workingPin); 라인을 가져다 쓴다
for(var i=1000; i<3333; i++){
//i = String(i);
service.checkPin(padToFour(i));
console.log("\n[+] BruteForce:" + padToFour(i));
}
}
})
})
돌려준 뒤

아무 값이나 넣어주면

맞는 번호가 포함되어 돌아가면서

정상 접속된다!

에러는 앱에 부하가 발생해
생기는 문제라 무시하고
해결 완료!
'APP 진단 > Android 2' 카테고리의 다른 글
14. 프리다 실무 활용 - SSL Pinning 우회 2 (0) | 2022.12.19 |
---|---|
13. 프리다 실무 활용 - SSL Pinning 우회 (1) | 2022.12.16 |
11. 프리다 실무 활용 - Password 복호화 (UnCrackable-Level1.apk) (0) | 2022.12.13 |
10. 프리다 실무 활용 - 루팅 탐지 우회 (UnCrackable-Level1.apk) (0) | 2022.12.13 |
9. 프리다 연습 - FridaLab (2) 문제 풀이 (6-8번) (0) | 2022.12.13 |