Flag is a serial number.
귀차니즘으로 인해 직접 사진을 찍지는 않겠지만 우측 상단의 설정 아이콘을 누르면 라이센스를 입력하라고 하는데 잘못된 키를 입력하면 아래와 같이 뜬다.
알람에 뜬 문구를 strings.xml에서 찾아본 결과 존재하지 않았다.
소스코드에 하드코딩 되어있는지 찾아보기 위해 astrogrep으로 검색한 결과 MainActivity에 존재함을 확인하였다.
MainActivity에서 checkLicenceKey 함수를 보면 이미 라이센스를 가지고 있거나 없으면 KeyVerifier.isValidLicenceKey 함수를 거친 결과가 true이면 해당 앱을 정상적으로 모두 사용할 수 있다고 한다.
해당 함수에 들어가면
3개의 string을 받아 encrypt 함수에 넣고 그 결과가 "29a002..." 와 동일하면 true를 리턴시켜준다.
encrypt 함수를 보자.
여기서는 전달받은 3개의 string을 처리하는 것으로 확인된다.
먼저 3개의 string이 무엇인지 확인하자.
맨 처음 MainActivity로 돌아가면 3개의 string은 아래와 같음을 알 수 있다.
① 사용자의 입력값 ② SecurityKey ③ SecurityIv
그렇다면 사용자의 입력값은 우리가 정할 수 있는데 2번과 3번은 어디서 얻을 수 있을까?
여기저기 찾아본 결과 setSecurityKey와 setSecurityIv가 있는 getConfig라는 함수를 찾았다.
이것을 보면 Database에서 해당 값을 가져오는 것을 알 수 있다.
DB명을 알기 위해 SEELCT_QUERY를 찾아보면 데이터를 가져오는 db의 이름은 db.db, table 이름은 config 임을 알 수 있다.
astrogrep으로 db.db를 검색한 결과 assets 폴더에 존재함을 확인하였고 DB Browser를 통해 보면 아래와 같은 데이터를 확인할 수 있다.
getConfig() 함수를 통해 SecurityIv는 5번째 열, SecurityKey는 6번째 열임을 확인하였으므로 해당 값들은 아래와 같다. (0부터 시작이므로 5번쨰, 6번째다)
SecurityIv = a5efdbd57b84ca36
SecurityKey = 37eaae0141f1a3adf8a1dee655853714
다음에 또 AES 암호화관련된 문제 있으면 이어서 풀겠다아
출처 : http://hackability.kr/entry/2014SUCTF-Reverse-200-Commercial-Application
'Hacking > Mobile' 카테고리의 다른 글
[아이폰] 아이폰5(IOS 10.3.3) 탈옥 및 진단환경 세팅 (1) | 2018.04.02 |
---|---|
[OWASP] UnCrackable App for Android Level 2 (feat. IDA 동적디버깅) (0) | 2018.02.27 |
[OWASP] UnCrackable App for Android Level 1 (2) | 2018.02.22 |
[2016-SU-CTF] Android 100 (0) | 2018.02.13 |
IOS 진단 시 Burp 인증서 신뢰하기 (0) | 2018.02.12 |