정보보안/Mobile Hacking & Security

모바일 - Flight.apk 게임앱 분석

ITtechRoy 2014. 9. 10. 22:45
728x90
반응형
분석 

dotPeek 프로그램을 이용해 디컴파일된 Flight 파일 내부에 있는 dll 파일을 열어본 결과이다. NetworkManager 의 소스파일을 보면 175.119.227.142 라는 IP 주소에 데이터가 전송되는 것을 확인할 수 있다.

 

 

그림 21. 전송되는 IP 주소 확인

 

 

 

 

그림 1-8. Flight 게임 어플리케이션이 실행되고 있는 동안 wireshark 를 이용해 패킷을 캡쳐한 결과이다. IP주소 175.119.227.142 SYN 패킷을 날리지만 SYN/ACK, ACK 응답 패킷을 못하고 연결이 실패하는 것을 확인할 수 있다. 175.119.227.142 서버에서 응답을 거부하고 있거나 서비스가 중단된 것으로 보인다.

 

 

 

그림 22. 패킷캡쳐

 

아래 그림은 Flight.apk 파일을 실행하는 과정의 DDMS를 이용해 로그 분석한 결과이다. 게임 실행 후 점수와 순위를 저장하기 위해 입력한 이름과 핸드폰번호, Email, Score, Checksum 등이 전송되는 것을 확인할 수 있다.

 

 

그림 23. 로그 분석

 

 

 

 

Export to Project 기능을 이용해 디컴파일된 dll 을 프로젝트 형식으로 저장한 결과이다. Flight 어플리케이션은 C#을 이용해 만들어졌다는 것을 확인할 수 있다.

 

 

그림 24. C#소스파일

   

Flight.apk 파일을 Genymotion 에 드래그해서 설치해 보았다. Genymotion 이란 속도가 빠른 안드로이드 에뮬레이터로, 하드웨어 가속은 물론이고 여러단말, 여러해상도, 여러기능을 지원하여 Developer용으로 적합한 프로그램이다. GPS에뮬레이션 위젯, 배터리에뮬레이션 위젯, Shell 등의 기능이 지원된다.

 

 

그림 25. Flight.apk 설치

 

Flight.apk 파일을 설치 후 실행한 화면이다. 새를 피해 별을 획득하여 점수를 얻는 단순한 게임으로, 아래에 보이는 시간내에 많은 점수를 획득하여 랭킹을 정하는 방식의 게임 어플리케이션이다.

 

 

그림 26. 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주소와 완관되어 있다는 것을 확인할 수 있다.

그림 27. 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 문제풀이 기타

728x90
반응형

'정보보안 > 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