본문 바로가기

Write-up

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

반응형

오늘 저희 팀에서 주최한 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

반응형