반응형
Flag is a serial number.
문제는 위와 같이 간단하게 되어있고 apk 파일을 하나 주는 듯 하다.
( Android CTF 문제를 찾아보다가 출처에 있는 글에서 문제를 퍼왔다. )

suCTF.apk


귀차니즘으로 인해 직접 사진을 찍지는 않겠지만 우측 상단의 설정 아이콘을 누르면 라이센스를 입력하라고 하는데 잘못된 키를 입력하면 아래와 같이 뜬다.


알람에 뜬 문구를 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

반응형
블로그 이미지

rootable

,