티스토리 뷰

보안/Wargame

[Hackthebox] - APKey Writeup(문제풀이)

돔돔이부하 2021. 12. 3. 01:36
728x90
반응형

문제 설명

This app contains some unique keys. Can you get one?

 

일단 이 문제는 문제 파일로 apk 파일을 하나 제공했습니다.

문제 분석

바로 디컴파일해서 분석을 해보았습니다.

activity 에는 MainActivity 하나만 정의되어 있네요. 이 부분만 보면 될 것 같습니다.

보아하니 id 가 admin 이고 pw 가 md5 hash 한 결과가 아래 if 문 안에 들어있는 hash 값과 일치하면 Toast Message 로 Flag가 나오는 것 같습니다.

사실 Toast.makeText 인자 중 두번째 인자의 값이 Flag 문자열로 추정되나, 한번 들어가보았지만 정말 복잡하기 그지 없었습니다. base64 인코딩된 문자열을 여러 ArrayList 로 분리해놓음은 물론이고, 중간중간에 약간의 난독화도 들어가 있어서, 비교적 쉬운 방법인 smali 코드 수정으로 문제를 해결하였습니다. 

 

다행히 이번 문제에는 별도로 무결성 검증하는 로직이 없어서 리패키징이 가능했습니다.

코드 수정이 필요한 부분은 if 문 안에 있는 로직인데, 저 if 문을 무조건 참으로 만든다면 정말 쉽게 문제가 해결될 것입니다.

 

APK 리패키징 하는 방법에 대해서는 생략하도록 하겠습니다. 다른 포스팅에 자세히 설명되어 있으니 참고하시면 될 것 같습니다.

https://domdom.tistory.com/287

 

[Android] APK 파일 리패키징(repackaging)하는 방법

PC 환경 : Windows 10 x64 1. apktool 을 다운로드 받습니다. 아래 URL에 들어가셔서 우선 wrapper script 부터 다운로드 받습니다. https://ibotpeaches.github.io/Apktool/install/ Apktool - How to Install In..

domdom.tistory.com

 

smali 코드 수정

아래 smali 코드를 보면 p1 이 equal to zero 조건이 되면 cond_1 로 이동한다고 합니다. 근데 cond_1 에 가서 보면 "Wrong Credentials!"가 나온다고 합니다. 그러면 cond_1 조건으로 가면 안되기 때문에 p1 조건이 무조건 0이 아닌 값이 되야될 것 같아 보입니다.

그래서 저는 p1 값을 임의로 무조건 1 값이 되도록 했습니다. 아래와 같이 말이죠.

const/4 p1, 0x1

이제 수정된 smali 코드를 저장하고 리패키징하고서 앱의 소스코드를 디컴파일 도구로 봐보겠습니다.

보니깐 if 부분이 (1 != 0) 이 되서 이제는 무조건 참 조건이 되어버린 것을 확인할 수 있습니다.

그리고 이제 앱을 설치하고 실행하면 아래와 같이 나옵니다.

위에서 Name 에는 admin 을 입력하고 Password 에는 아무것도 입력하지 않고 그냥 LOGIN 버튼을 눌러보았습니다. 그랬더니 아래와 같이 Flag 값이 나오는 걸 확인할 수 있었습니다.

 

- 끝 -

728x90
반응형
댓글