안드로이드 해킹대회 어플 문제 2

2014. 10. 27. 00:38Security ★ Development/안드로이드 모바일 보안

반응형

* 틀린 내용이 있을 시 지적 부탁드립니다.


문제 : http://codeengn.com/challenges/smartapp/03


그냥 설치하려고하면 역시 안됩니다.  zip파일로 만들어서 압축을 풀면 파일명들은 제대로 되어있지만 서명이 되어있지 않습니다.  서명을 해주고 설치하면 남은계단과 버튼이 하나 있습니다.  버튼을 눌러 계단을 모두 올라가면 키 값을 확인할 수 있습니다.

...


소스를 살펴봅니다.

androlyze를 이용합니다.

a, d, dx=AnalyzeAPK('./apk/SmartAppL03.apk', decompiler="dad")

* androlyze 버전이 낮아 decompiler 예약어가 안되는 분들은 are에서 androguard, androlyze를 업데이트 하는 것 보다 다른 리눅스에 새로 androguard를 설치하는 걸 추천합니다.

d.CLASS_Lcom_Namdaehyeon_findekey3_MainActivity_1.source()를 입력해 소스코드를 확인할 수 있습니다.

d. 까지 입력하고 tab을 누르면 어떤 패키지들이 있는지 확인할 수 있습니다.  적당해보이는 걸 골라줍니다.


언뜻 봐도 누른 계단수가 올라갈 계단 수와 같으면 긴 문자열을 복호화해서 보여주고 아니면 누른 계단수를 ++해준다는걸 알 수 있습니다.


stairs값을 낮춰줘보도록 하겠습니다.

d.CLASS_Lcom_Namdaehyeon_findekey3_MainActivity.source()도 같이 보면

이렇습니다.  

stairs는 aView에서 가져오고 aView는 randomRange를 이용해 생성되고 있습니다.

좀 위에 randomRange메소드를 보면 랜덤값에 10000을 곱하고 인자로 받은 값을 4배 한 값과 곱해주고 있습니다.

저걸 바꿔줍니다.  https://code.google.com/p/smali/downloads/list에서 smali와 baksmali를 다운받아줍니다.

backsmali를 이용해 classes.dex파일에서 smali파일들을 추출합니다.

그 후 radomRange 메소드의 코드를 보면 다음과 같습니다.

여기서 바꿔줘야 할 건 리턴값입니다.  그럼 위 프로세스가 어떻게 되든 특정값만 리턴되게 되고 aView는 그 값으로 설정될 것입니다.  

.local v0, "random":l 아래에

const/4 v0, 0x1 을 추가해줍니다.

이 코드는 v0 변수에 1을 추가하라는 코드입니다.

그럼 randomRange는 항상 1을 리턴하게됩니다.

이제 다시 smali를 이용해 classes.dex를 만들어서 실행시켜봅니다.