앞서 확인했던 Unity의 두가지 빌드방법(mono,il2cpp) 중, mono 방식으로 빌드된 게임을 분석해 보도록 하겠습니다.

 

itleader.tistory.com/179

 

#2 - 클릭커 게임 만들기 강좌 - ( 1 / 2 )

안녕하세요 피슈 입니다. 오늘은 최근에 유행하고 있는 클릭커 게임을 만들어 볼까 합니다. 아니 게임 개발 강좌 첫시간인데 벌써 게임을 만들 수 있는거야? 하고 의아해 하실 수 있는 데, 강좌��

itleader.tistory.com

구글에 유니티 게임 예제를 통해 간단한 클릭커 게임을 mono방식으로 빌드하였으며 해당 앱을 예제로 사용해보도록 하겠습니다.

 

 

예제를 통해 생성한 앱이며, 10번을 클릭하면 피카츄가 나오게끔 작성하였습니다.

 

    void Start()
    {
        level = 1;
        pichanum = 10;
        numTxt.text = "0";
        UnityEngine.Debug.Log("Hello World!!");
    }

    // Update is called once per frame
    void Update()
    {
      
    }
    public void Click()
    {
        UnityEngine.Debug.Log("Click!!");
        num++;
        numTxt.text = num.ToString();
        UnityEngine.Debug.Log("pichanum : " + pichanum + "num : " + num);
        if (num == pichanum)
        {

            if (level == 1)
            {
                pichaball.SetActive(false);
                ball.SetActive(true);
            }
            else
            {
                pichaball.SetActive(false);
                pichu.SetActive(true);
            }
        }
    }

이제 빌드된 앱을 살펴보겠습니다.

 

앱의 기본 구조는 다른 apk파일과 동일합니다.

 

다만 assets 폴더 하위 앞서 mono빌드의 특징이라고 할 수 있는 Assembly-CSharp.dll 파일과 여러 dll파일이 존재하는 것을 확인할 수 있습니다.

 

dll 파일 분석을 위해서는 dnspy라는 툴을 이용하도록 하겠습니다.

github.com/0xd4d/dnSpy

 

0xd4d/dnSpy

.NET debugger and assembly editor. Contribute to 0xd4d/dnSpy development by creating an account on GitHub.

github.com

[Assembly-CSarp.dll] - [InGame] - [Click]

dnspy 툴을 통해 dll파일을 확인하면 원본 코드와 유사한 코드를 확인할 수 있습니다.

 

코드 창에서 우클릭 - [Edit Method(C#)을 클릭합니다.

 

this.num++; 부분을 this.num+=5; 로 변경하여 한번 클릭할때마다 5가 증가하도록 수정 후 Compile합니다.

 

수정 후 [File] - [Save Module]을 통해 변조한 Assembly-CSharp.dll 파일을 저장합니다.

 

앞서 10번을 클릭하면 피카츄가 나오도록 설정하였는데, 이젠 2번만 클릭하면 되겠네요.

 

그 후 apk 파일을 변조한 dll파일로 변경하여 리패키징 후에 다시 에뮬레이터에서 실행하면 2번만 클릭했음에도 피카츄를 볼 수 있습니다.

 

※ 해당 내용은 분석을 위한 내용으로 해당 내용을 통해 악의적인 행위를 하는 경우 모두 행위자에게 법적책임이 발생할 수 있습니다. 공부, 분석을 위해 실습 예제를 직접 만들어서 하는 것을 추천드립니다.

'Mobile Game' 카테고리의 다른 글

Unity Mono vs il2cpp  (0) 2020.10.11
Mobile Game Engine  (0) 2020.10.10

유니티 프로그램은 두가지의 빌드 방법이 존재합니다.

 

Mono와 il2cpp 두가지 방식이 존재하며, 각각의 빌드에 관해 알아보겠습니다.

 

1) Mono

Unity는 다양한 플랫폼을 지원하기 위해 Cross-compile 플랫폼을 제공하며, 이를 위해 C#을 사용합니다.

 

C#코드는 msc.exe라는 프로그램에 의해 IL코드로 변환됩니다.

 

예제 C# 코드를 통해 Mono 방식으로 빌드된 앱의 구동방법을 확인해보겠습니다.

[code language=”csharp”]
using UnityEngine;
using System.Collections;

public class HelloWorld : MonoBehaviour {
void Start() {
Debug.Log ("Hello, World!");
}
}
[/code]

 

해당 예제 코드를 Build를 하면, Assembly-CSharp.dll 파일이 생성됩니다.

 

[code language=”csharp”]
.class public auto ansi beforefieldinit HelloWorld
extends [UnityEngine]UnityEngine.MonoBehaviour
{
// Methods
.method public hidebysig specialname rtspecialname
instance void .ctor () cil managed
{
// Method begins at RVA 0x2050
// Code size 7 (0x7)
.maxstack 8

IL_0000: ldarg.0
IL_0001: call instance void [UnityEngine]UnityEngine.MonoBehaviour::.ctor()
IL_0006: ret
} // end of method HelloWorld::.ctor

.method private hidebysig
instance void Start () cil managed
{
// Method begins at RVA 0x2058
// Code size 11 (0xb)
.maxstack 8

IL_0000: ldstr "Hello, World!"
IL_0005: call void [UnityEngine]UnityEngine.Debug::Log(object)
IL_000a: ret
} // end of method HelloWorld::Start

} // end of class HelloWorld
[/code]

 

해당 형태를 IL(Intermediate Language)이라고 하며, 해당 코드가 실제로 실행됩니다.

 

IL코드는 Assembly 코드와 형태가 비슷하지만, IL코드 실행을 위해서는 IL코드를 Assembly 코드로 변환해야 하며 이를 위해 mono(libmono.so)를 사용합니다.

 

mono가 IL코드를 Assembly로 변환하여 실행하게 됩니다.

 

2) il2cpp

il2cpp는 앞서 설명했던 IL 코드를 C++ native code로 변환하여 실행할 수 있도록 하는 빌드방법입니다.

때문에 Assembly-CSharp.dll 파일 대신, libil2cpp.so 파일의 결과물이 생성되며 IL코드가 C++ native code(libil2cpp.so)로 변화되어 기기에서 실행됩니다.

 

출처

blogs.unity3d.com/kr/2015/09/22/kr-csharp-compile-il2cpp/

 

C# 컴파일 그리고 il2cpp - Unity Technologies Blog

이글은 il2cpp를 이해하기전에, C#의 컴파일 과정을 설명하는 글입니다. 사실 il2cpp가 나온지 꽤 되서, 저보다 더 자세히 아시는 분들도 많을꺼라 생각됩니다. 이 블로그는 아직 il2cpp를 잘 모르는, �

blogs.unity3d.com

chp747.tistory.com/334

 

Unity Mono 분석

Unity Mono 분석 .Net Framwork Microsoft에서 개발한 Windows 프로그램 개발 및 실행 환경을 말합니다. 다양한 프로그래밍 언어와 라이브러리들을 이용하여 윈도우 기반 응용프로그램을 개발 및 실행할 수

chp747.tistory.com

 

chp747.tistory.com/m/310?category=724021

'Mobile Game' 카테고리의 다른 글

Unity Mono 게임 분석  (0) 2020.10.11
Mobile Game Engine  (0) 2020.10.10

모바일 게임 분석에 앞서 주로 사용되는 엔진을 확인해보겠습니다.

 

모바일 게임에서는 주로 2가지의 엔진을 사용하고 있습니다.

 

유니티(Unity)와 언리얼(Unreal) 엔진이 주로 사용됩니다.

 

1) 유니티 

unity.com/kr

 

유니티 - Unity

Unity is the ultimate game development platform. Use Unity to build high-quality 3D and 2D games, deploy them across mobile, desktop, VR/AR, consoles or the Web, and connect with loyal and enthusiastic players and customers.

unity.com

장점

1) 무료 사용이 가능(무료 버전에서는 로고가 출력됨)

2) 3D, 2D 개발이 가능함

3) 자료를 찾기가 쉬움

 

 

2) 언리얼(Unreal)

www.unrealengine.com/ko/

 

언리얼 엔진 | 가장 강력한 리얼타임 3D 창작 플랫폼

언리얼 엔진은 게임, 시뮬레이션, 시각화의 디자인 및 개발에 사용되는 통합 크리에이터용 툴세트입니다.

www.unrealengine.com

장점

1) 엔진 소스코드 제공

2) 블루프린트 기능을 통해 코딩없이 제작이 가능함

 

두가지 중, 앞으로 Unity 게임 분석을 진행하고자 합니다.

 

출처 : brunch.co.kr/@iimjae123/1

'Mobile Game' 카테고리의 다른 글

Unity Mono 게임 분석  (0) 2020.10.11
Unity Mono vs il2cpp  (0) 2020.10.11

+ Recent posts