관리 메뉴

Information Security

Fridalab - Run chall06() after 10 seconds with correct value 본문

모바일/Frida

Fridalab - Run chall06() after 10 seconds with correct value

HackingPractice 2020. 5. 13. 20:02

Navigation -> Text search에서 메소드를 찾았다.

그림 1-1 Chall06

chall06() 메소드에 int 정수형 값을 주고 if문에서 true가 된다면 문제를 해결하는 형태를 갖고 있다. if문 내부의 challenge_06.confirmCahll06(i) 값이 true가 되어야 한다. 

그림 1-2 소스코드

confirmChall06(int i) 메소드를 보면 두 가지 조건을 충족해야 true를 return 반환 할 수 있다. i == chall06, system.currentTimeMillis() > timeStart + 10000 -> 10초 지나야지만 참인 결과를 반환한다.

그림 1-3 소스코드

1. i == chall06

  • chall06 value 찾기,
  • i == chall06 -> confirmchall06이 받고 있는 i 값을 chall06이라는 값으로 전달

2. system.currentTimeMillis() > timeStat + 10000

  • setTimeout(fn, delay) api 함수 사용
    • delay에 시간을 준다.
    • delay에 10000를 주면 내부 로직 (fn)이 실행된다.

addchall 검색하여 메소드 위치를 찾았다,

그림 1-4 addchall 메소드

MainActivity에서 내부 i값을 setting 하고 있는 것을  확인할 수 있다. Random 함수를 사욯하여 복잡하다. chall06 값을 confirmchall06에 반환해주도록 한다.

그림 1-5 addcahall()

addChall06에 대한 클래스 객체 가져오기 addchall06 후킹 시 기존 로직 삭제, 해당 메소드가 실행될 때마다 MainActivity에 대한 인스턴스 값을 사용, chall06() 메소드에 addChall06에서 만든 변수 값을 넣어주면 자동으로 클래스 내부에 있는 인자 값으로 Chall06 값이 반환된다.

그림 1-6 자바스크립트

해당 자바스크립트 코드를 실행하면 Solved Challenge 06 문자열을 확인할 수 있다.

그림 1-7 자바스크립트 실행

FridaLab 앱을 확인하면 6번 문제가 해결된 것을 알 수 있다. 

그림 1-8 FridaLab