dotPeek 프로그램을 이용해 디컴파일된 Flight 파일 내부에 있는 dll 파일을 열어본 결과이다. NetworkManager 의 소스파일을 보면 175.119.227.142 라는 IP 주소에 데이터가 전송되는 것을 확인할 수 있다.
|
그림 2‑1. 전송되는 IP 주소 확인
그림 1-8. Flight 게임 어플리케이션이 실행되고 있는 동안 wireshark 를 이용해 패킷을 캡쳐한 결과이다. IP주소 175.119.227.142 로 SYN 패킷을 날리지만 SYN/ACK, ACK 응답 패킷을 못하고 연결이 실패하는 것을 확인할 수 있다. 175.119.227.142 서버에서 응답을 거부하고 있거나 서비스가 중단된 것으로 보인다.
|
그림 2‑2. 패킷캡쳐
아래 그림은 Flight.apk 파일을 실행하는 과정의 DDMS를 이용해 로그 분석한 결과이다. 게임 실행 후 점수와 순위를 저장하기 위해 입력한 이름과 핸드폰번호, Email, Score, Checksum 등이 전송되는 것을 확인할 수 있다.
|
그림 2‑3. 로그 분석
Export to Project 기능을 이용해 디컴파일된 dll 을 프로젝트 형식으로 저장한 결과이다. Flight 어플리케이션은 C#을 이용해 만들어졌다는 것을 확인할 수 있다.
|
그림 2‑4. C#소스파일
Flight.apk 파일을 Genymotion 에 드래그해서 설치해 보았다. Genymotion 이란 속도가 빠른 안드로이드 에뮬레이터로, 하드웨어 가속은 물론이고 여러단말, 여러해상도, 여러기능을 지원하여 Developer용으로 적합한 프로그램이다. GPS에뮬레이션 위젯, 배터리에뮬레이션 위젯, Shell 등의 기능이 지원된다.
|
그림 2‑5. Flight.apk 설치
Flight.apk 파일을 설치 후 실행한 화면이다. 새를 피해 별을 획득하여 점수를 얻는 단순한 게임으로, 아래에 보이는 시간내에 많은 점수를 획득하여 랭킹을 정하는 방식의 게임 어플리케이션이다.
|
그림 2‑6. Flight.apk 실행화면
아래 소스코드는 AndroidManifest.xml 파일의 내용중 일부이다. AndroidManifest.xml 파일은 소스코드 분석 과정 중 가장먼저 분석해야할 파일로, 내용중 activity 는 어플리케이션 실행 시 나타나는 UI라고 볼 수 있는데, activity의 경우 oncreate() 먼저 분석한 후 다음단계로 넘어가는 것이 일반적인 분석 절차이다. 소스 코드를 보면 com.unity3d.payer 패키지 내부에 있는 UnityPlayerProxyActivity 클래스가 먼저 동작한 후 UnityPlayerActivity, UnityPlayerNativeActivity 클래스 순으로 동작하는 것을 확인할 수 있다.
<activity android:label="@string/app_name" android:name="com.unity3d.player.UnityPlayerProxyActivity" android:screenOrientation="portrait" android:configChanges="locale|mcc|mnc|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:label="@string/app_name" android:name="com.unity3d.player.UnityPlayerActivity" android:screenOrientation="portrait" android:configChanges="locale|mcc|mnc|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale" />
<activity android:label="@string/app_name" android:name="com.unity3d.player.UnityPlayerNativeActivity" android:screenOrientation="portrait" android:configChanges="locale|mcc|mnc|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale">
<meta-data android:name="android.app.lib_name" android:value="unity" />
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
</activity>
아래 소스코드는 dotPeek 를 이용해 NetworkManager 클래스 내용중 일부이다. 175.119.227.142 서버주소에 점수와 순위 정보를 전송하는 것을 알 수 있다. 그리고 UserCollection 내용을 userCollection 에서 받아가고, GetRankPackt 내용을 rankClass 에서 받아가는 것을 확인할 수 있다.
public class NetworkManager : MonoBehaviour
{
private string getScoreList = "http://175.119.227.142/score/list/";
private string sendScore = "http://175.119.227.142/score/myrank/";
private string saveScore = "http://175.119.227.142/score/save/";
public UserCollection userCollection;
public GetRankPacket rankClass;
public ResultManager resultManager;
private void Start()
{
this.userCollection = new UserCollection();
this.rankClass = new GetRankPacket();
}
먼저 선언된 UserCollection 클래스를 보면 User 라는 변수를 이용하는 것을 볼 수 있다.
public class UserCollection
{
public User[] users = new User[10];
public int user_num;
public UserCollection()
{
this.users = new User[10];
for (int index = 0; index < 10; ++index)
this.users[index] = new User();
}
}
User class 를 확인해 보면 위에서 확인한 점수, 이름, 이메일, 핸드폰번호, 체크섬넘버까지 전송되는 변수가 선언되어 있는 것을 확인할 수 있다.
public class User
{
public double Score;
public string Name;
public string Email;
public string Phone;
public string Checksum;
public User()
{
This.Name = string.Empty;
This.Checksum = string.Empty;
}
}
AstroGrep 을 이용해 175.119.227.142 IP 주소와 연관되어있는 파일명을 찾아보았다. 해당 IP 주소로 전송을 요수하는 Apk 파일내부에 있는 dll 파일과 그림파일 등이 175.119.227.142 IP주소와 완관되어 있다는 것을 확인할 수 있다.
그림 2‑7. AstroGrep
맛집 해킹 hacking web 웹 네트워크 network 학원 해커 크래커 hacker cracker 강아지 dog 고양이 해운대 강남 서면 보쌈 치맥 치킨 맥주 육회 회 포렌식 침해대응 cert 관제 모의해킹 mobile 모바일 무선 wireless 디지털포렌식 Clanguage C언어 C# JSP JAVA tool 해킹방어대회 ctf 문제풀이 기타 맛집 해킹 hacking web 웹 네트워크 network 학원 해커 크래커 hacker cracker 강아지 dog 고양이 해운대 강남 서면 보쌈 치맥 치킨 맥주 육회 회 포렌식 침해대응 cert 관제 모의해킹 mobile 모바일 무선 wireless 디지털포렌식 Clanguage C언어 C# JSP JAVA tool 해킹방어대회 ctf 문제풀이 기타
'정보보안 > Mobile Hacking & Security' 카테고리의 다른 글
안드로이드 .APK 파일 다운로드 방법 (0) | 2014.09.14 |
---|---|
adb 주요 명령어 (0) | 2014.09.13 |
모바일 분석방법 (3) (0) | 2014.09.09 |
모바일 분석방법 ( 1 ) (0) | 2014.09.09 |
모바일 기본내용 (0) | 2014.09.09 |