Write-up

[DPCTF 2013] 안드로이드 아청아청 문제

bunseokbot 2013. 11. 17. 20:13
반응형

오늘 저희 팀에서 주최한 DPCTF 2013의 안드로이드 아청아청 문제에 대한 해설입니다.

푸신 분이 한분... (역시 실력이.. ㄷㄷ)


일단 난이도는 중하.. 라고 생각했는데.. 음..


일단 해설 시작하도록 하겠습니다.


일단 소스를 볼 수 있게 dex -> jar 로 변.환


그리고 깔삼하게 코드를 view..


메인 메소드부터 분석을 하면..


onCreate method를 보면

처음에 뭔가 검색을 열심히 하게 되고, 이상이 없으면 진행하는 방식입니다.


String str1 = ((TelephonyManager)getSystemService("phone")).getLine1Number();


if ((str1.contains("1555")) || (Build.MODEL.equals("sdk")) || (Build.MODEL.equals("google_sdk")))


음... 일단 전화번호에 1555가 포함되어 있거나, 모델명이 sdk, google_sdk 라면

a() 라는 메소드를 실행합니다.


그렇지만 이 a() method를 보게 되면..?

그냥 smishing.kr 에 connection 시키는거.

단순하게 그냥 요청하고 긁기.!


그리고 또...

if (str1 != null)


전화번호가 존재한다면 같은 행동을 하게 됩니다.


(사실 이 목적은 모든 가상 단말기로 실행시켜서 패킷 덤프뜨는걸 방지하기 위해서 한 것입니다.)

그냥 코드 분석을 목적으로 낸 문제라..


그리고 전화번호가 없고 가상이 아니라면..?

냠냠

암호화 된 곳으로 전송합니다 ㅋ


근데 여기서 함수를 잘 보아야 하는데요

c, b 이걸 잘 보셔야 합니다.


이 소스 아래 내려가면 (첨부하지 않도록 하겠습니다) AES Encrypt와 Decrypt 하는 함수가 존재하는데

이 함수를 이용해 코딩하여 해당 조건에 맞춰서 전송해 주면 됩니다.


그러면 쿼리는 

http://bunseokbot.dothome.co.kr/andr0ids3rv3r.php

POST andr0id=15f5429140cdf136054ff3e7d05beff3 이라고 요청을 보내게 됩니다.


그러면 대답은

Key is decrypt(e8ad8234b66158dfe6173f75e56a29dbbe27bb9e039b80a517caaa918a52be5f)


이걸 토대로 decrypt 하라는 소리니깐 복호화 하면?


Key is Jeongpil_is_Alcoholics

반응형