Welcome to Droid 


codegate 2018이 열렸는데요 


참가는 안했지만 모바일 문제가 하나 출제되었다길래 풀어봤습니다


일단 앱을 실행시켜 보겠습니다


    


에뮬레이터로 실행하면 처음에 ID를 입력받고 PW를 입력받습니다 


ID/PW를 임의의값으로 입력하니 PW입력 직후에 wrong! try again이라는 문구가 출력되네요


디컴파일 후에 소스를 분석해 보겠습니다



처음에 ID 입력부분에서 입력값의 길이가 10이상 26자리 이하여야만 통과가 되었네요 임의의 값이 우연찮게 10자리여서 통과가 되었나 봅니다



PW입력 부분인데 Main2Activity class의 a 함수에서 PW를 확인하는 로직을 확인할 수 있습니다



a 함수를 살펴보면 codegate2018hurry!HAHAHALOL 이었나.. 확실하게 기억이 안나는데 해당 문자열을 이용하여 패스워드를 생성한후 최종적으로 paramString변수에 담아 리턴 후 입력받은 문자열과 비교하게 됩니다



다음 Main3Activity도 확인해 보니 시리얼키를 입력해야 하는 것 같습니다


이번에는 Main3Activity의 k함수에서 비교하네요



k함수에서는 ABCDEFG.....Z123....9의 문자을 가지고 시리얼을 생성하여 입력값과 비교합니다



마지막으로 Main4Acitivity에서는 native-lib.so에 파일에 저장된 flag를 출력하네요


풀이법으로는 여러방법이 있겠지만 smali코드의 분기문을 변조하여 거짓일때 실행되도록 변경하겠습니다



Main2Activity.smali파일에서 분기문을 확인합니다 Main2Activity.smali파일을 확인하니 $2파일에 setOnClickListener가 정의되어 있네요



Main2Activity$2.smali , Main3Activity$2.smali의 분기문을 변경한 후에 리패키징하여 에뮬레이터에 다시 설치해줍니다



임의의 값을 입력하고 계속 넘어가면 Main4Activity가 불리면서 Flag를 확인할 수 있습니다 :)



Try & Error


문제를 푸는 도중 smali코드를 변경하고 평소처럼 리패키징하는 경우, 다음과 같은 에러를 확인할 수 있었습니다


resource를 찾을 수 없다는 에러인데... 


삽질하다가 apktool의 옵션중 리소스 디컴파일을 하지 않는 옵션을 주고 해결했습니다.


java -jar apktool.jar d -r droid.apk


이렇게 디컴파일한 상태에서 smali를 변경하고 리패키징하면 정상적으로 리패키징되는 것을 확인할 수 있습니다



또한, apk파일 설치 시에 에러를 확인 할 수 있었는데 해당 내용은


http://taesun1114.tistory.com/entry/INSTALL-FAILED-TESTONLY?category=729990 과 같습니다


마지막으로 Frida를 통해 무결성을 훼손하지 않고 패스워드와 시리얼을 획득하여 문제를 풀어보려 했는데 실패했습니다


아직 Frida가 능숙하지 않아서 에러가 나면 한참 헤매게 되네요ㅠ 후에 Frida를 통해 문제를 해결하고 포스팅하도록 하겠습니다 :)


'Mobile' 카테고리의 다른 글

Uncrackable3-1  (2) 2018.06.14
APK IDA로 동적디버깅  (0) 2018.02.22
INSTALL FAILED TEST_ONLY  (1) 2018.02.06
Uncrackable3 - frida  (0) 2018.01.30
Uncrackable1 - frida  (4) 2018.01.30

+ Recent posts