[수정 전]

 

[수정 후]

 

 

 

블로그 이미지

_B_G_

,



목차

 

 

1. Yara

시그니처 String 탐지

시그니처 Binary 탐지

 

2. 정규표현식

Yara Rule 수집

Python Source Code

 

3. Yara Rule 응용

 

 

Yara ?

 

- Yara는 악성 파일을 시그니처 기반으로 판별 및 분류 할 수 있게 하는 툴

- Linux, Windows OS에서 모두 사용 가능

- 소스코드 컴파일, Python 모듈, 파일 실행 방식 등 다양한 방법으로 Yara 설치 및 실행 가능

 

시그니처 - String 탐지

 

스트링 탐지란?

Value 타이틀에 속해 있는 String들을 탐지하는 방법. 그리고 탐지 문자열을 대소문자 구별을 하고 싶다면 뒤에 "nocase"를 붙여 사용한다.

Condition의 역할은 결과값이 ""인지 "거짓"인지 판별 해준다.

 

 

 

밑의 hex 정보에서 2바이트씩 사용되는 " U . P . X . 0 " UniCode인 스트링을 탐지할려면 위와 같이 대소문자를 구별하기 위해선 "nocase"를 붙였다면, UniCode 탐지를 위해선 "WIDE ASCII"를 붙여 주면 된다.

 

이외의 방법으로는 탐지 문자열(UPX) 주변이 특수 문자일 경우에만 탐지하는 방법인데, 예를들어 123UPX123 , aaUPX1aa2 이와 같이 UPX를 탐지하게 되면 주변 문자열과 상관없이 특정 문자열을 탐지 하게 된다. 하지만 이럴경우 UUUPXXX 이런식으로 쓸모없는 문자열도 탐지가 될 수 있기 때문에  "....UPX....." , "__UPX_" , " UPX !이러한 주변 특수문자가 존재하는 경우의 문자열만 탐지하도록 한다

 

 

시그니처 - Binary 탐지

 

Binary ?

파일 내부의 HEX값 탐지하는 기법으로 문자열 뿐만 아니라 16진수 값을 Rule에 적용 할 수 있으며, WILD CARDS를 사용하여 1바이트를 랜덤으로 대체 할 수 있다.

 

<일반 16진수 시그니처> 일반 HEX값을 시그니처 RULE 제작 한 경우<WILD CARDS 사용한 시그니처> 1바이트 HEX값을 ?? (랜덤표시로 대체하여 저 공간에 00~FF 랜덤으로 대체하고 주변 HEX값들로 탐지를 하는 방법

 

 

WILD CARDS 뿐 아니라 JUMPS라는 기능도 사용 가능

JUMPS란 예를들어 그림에 나와있는 E2 8E 사이의 글자수를 임의로 정할 수 있음. [1-5] 란 뜻은 E2 8E 사이에 1-5바이트의 길이가 랜덤으로 들어갈 수 있다고 보면 됨

 

그 외에도 HEX(8E|88) 중에서 OR 기능을 사용하여 둘 중 하나라도

해당되어도 탐지되는 방법이 있다. 

 

정규표현식

 

정규표현식이란 특정한 규칙을 가진 문자열의 집합을 표현할 때 사용하는 '형식 언어' 이다. Yara에서는 특정 문자열이나 바이너리뿐만 아니라 정규표현식도 사용 할 수 있다.

 

정규 표현식으로 Yara Rule 적용

 

/HTTPS:\S+\ - HTTPS: 로 시작하는 문자열을 탐지한 후 뒤의 문자열 까지 추출

/(\d{1,3}\.){3}\d{1,3}/ - 숫자를 출력 해주는 방법이지만 " . "을 붙여 IP 형태의 숫자만 출력하도록 정규표현식 작성

 

 

 

 Yara Rule 수집

 

https://github.com/Yara-Rules/rules

github에서 Malware Yara Rule들을 제공하는 사이트가 존재하여 여기서

최신 Rule들이 올라오는지 확인하여 지속적으로 추가해주여야함

 

 

Python Source Code

 

Yara Rule을 좀 더 수월하게 사용하기 위하여 Python을 이용하여 하나의 파일 대상을 여러개의 Yara Rule들과 비교하는 소스코드를 작성

 

 

 

281개의 Rule들이 들어있는 "/root/Samplerules/rules/malware" 폴더

 

Rule 탐지를 할 때 Rule 이름도 같이 출력이 되기에 어떤 Rule에서 탐지되었는지 확인 가능 또 탐지가 되었다면 어떤 String , Binary 몇 번째 줄에서 탐지 되었는지 확인 가능

 

<탐지 결과>

 

Yara Rule 응용1 - BackDoor 악성코드 C&C 서버 추출

 

BackDoor (악성파일) 동적으로 스트링 추출 후 Yara Rule 검사

정규표현식 Yara Rule 제작 - URL , IP 텍스트 출력

 

<Malware_URL_List>

 

<Malware_IP_List>

 

<파일 내부에서 실행되고 있는 스트링 중 IP 의심 출력>

 

와이어샤크 (WireShark)를 이용하여 TCP 통신 IPBackDoor(악성파일)에 속해 있는 IP 대조 C&C 서버 통신 확인 후 상세 분석

 

 

Yara Rule 응용2

 

HTTP : URL List들이 모여있는 .txt 파일 .csv 파일등을 URL 한줄 씩 불러와 해당 URL의 웹페이지 소스 또는 http://dd.com/aa.exe 실행파일 등의 PE 소스를 출력하여 수 많은 Yara Rule 시그니처를 비교하는 자동화 소스코드 제작

 

 

 

1. 실행파일.py 실행

2. .csv 또는 .txt 형태 안의 URL 한줄 출력

3. Yara Rule 폴더 안의 (개수 상관x) 모든 시그니처 검사

4. 결과 출력 - 탐지된 스트링 , Yara Rule 이름 출력 or 결과 .txt 형태로 저장


블로그 이미지

_B_G_

,

목차


1. 디지털 미디어 보안 

1.1 분석 사용도구 

1.2 분석 목적 

1.3 수행 기간 

1.4 디지털 미디어 보안 프로그램 제작 

1.4.1 결과 

1.4.2 S-DES 암호 알고리즘 

1.4.3 이미지 파일 불러오기 및 암,복호화 


2. 모바일 사진 보안 

2.1 분석 사용도구 

2.2 분석 목적 

2.3 수행 기간 

2.4 모바일 사진 보안 앱 제작 

2.4.1 모바일 사진 보안 

2.4.2 문자열 파싱 

2.4.3 Encryption Class 

2.4.4 Main Class 

2.4.5 Sub Class 


프로젝트명

S-DES암호 알고리즘을 이용한 디지털 미디어 보안

수행기간

5

사용 도구

Microsofe Visual Studio - MFC

목적

디지털 미디어는 어떠한 방법으로 보안되는지 알아보기 위함


1.결과

- 만들면서 부족한 부분은 아무래도 키 값 부분이 한자리 수만 받아들여지기 때문에 쉽게 보안이 깨질 우려가 있고 미디어 보안 자체를 처음 접하다 보니 어떤식으로 접근할지 생각하다가 픽셀값 밖에 떠오르지 않아서 이미지 형태를 깨지게 하고 그로 인해 중요한 미디어 파일들을 보안 시킬 수 있도록 수업시간에 배운 S-DES암호 알고리즘을 적용 시켰습니다.


2.S-DES 암호 알고리즘

- 미디어 보안을 적용 시킬 S-DES암호 알고리즘은 수업시간에 배우면서 작성한 C언어 소스를 가져와서 이미지 파일을 적용 시킬려고 함



3.이미지 파일 불러오기 및 암,복호화

- 이미지 파일 변화를 눈으로 확인하기 위하여 프로그램내에 불러와지도록 설정


- 해당 이미지의 암호화,복호화를 선택 할 수 있으며, 키 값은 문자열로 받고 a~z,0~9 까지 사용가능함 그리고 이미지 R,G,B의 픽셀값을 미리 얻어 온 뒤 RedGreenBlue값 각 하나당 암호 알고리즘을 사용함


- 키 값을 “A”로 지정한뒤 암,복호화 실행


- 암호화 -> 복호화

- 복호화를 할 때 원래 지정한 키 값 “A”가 아닌 “B”로 설정을 하였을 경우 원래 키 값이 아니기 때문에 오히려 이미지 손상이 심해짐




프로젝트명

S-DES암호 알고리즘을 이용한 모바일 사진 보안 앱

수행기간

10

사용 도구

Android Studio 2.2.2 - JAVA

목적

모바일에서도 사진 보안이 가능한지 확인하기 위함


1.모바일 사진 보안

[앱 초기화면]


[사용법]

[Key 721 입력 후 암호화 시작]

키입력은 0~1023 (10비트) 제한적

[암호화 대상 사진 선택]


[사진 선택 시 암호화 작동 및 이미지 뷰 암호화된 사진 출력,저장]

[Key 721 입력 후 복호화 시작]

[복호화 대상 사진 선택]


[정상적인 Key값으로 실행한 결과]

[비정상적인 Key값으로 인한 복호화 실패]

2.문자열 파싱

<!--[if !supportEmptyParas]--> <!--[endif]-->

[ 사람인 파싱 대상 사이트: http://m.saramin.co.kr/job-industry/job-list?mcd=9&bcd=4&cd=402 ]


[사람인 버튼 클릭]


[파싱 정보 불러오는 상태창]


[문자열 출력]

3.Encryption Class


[C언어->JAVA] S-DES 알고리즘

4.Main Class

[사진 선택 및 암,복호화 시작]


5.Sub Class


블로그 이미지

_B_G_

,

목차

1. 악성코드 정적 탐지 프로그램 

1.1 분석 사용도구 

1.2 분석 목적 

1.3 수행 기간 

1.4 결과 

1.5 악성코드 탐지 제작 

1.5.1 C언어 소스코드 


프로젝트명

악성코드 정적 탐지 프로그램

수행기간

20

사용 도구

Microsoft Visual Studio 2010 - C언어

목적

정적패턴을 통하여 악성코드 탐지

1.결과

- 만들면서 여러 가지 오류가 많았고 오류의 수정에 대해 중점을 두었지만 아직까진 미흡한 부분이 있습니다. 검사파일 용량이 너무 많을 경우 속도가 오래 걸리는 단점이 있어서 이 점을 보완하기 위하여, 검사할 수 있는 파일용량 사이즈를 임의로 정한 사이즈 수까지 나눠서 검사하도록 하였지만, 악성코드의 패턴이 제가 정한 사이즈의 범위에 있다는 전제 하에 탐지하는 방식이기에 범위를 벗어난 악성코드 패턴인식은 불가능하다는 점입니다.

<!--[if !supportEmptyParas]--> <!--[endif]-->

- Suicide.bat, Sxstrace.exe, SystemPropertiesRemote.exe 이 세 개의 프로그램을 악성코드로 지정하고 패턴을 저장시킵니다.

- Suicide.bat 감지 패턴 77 73 63 72 69 70 74 2e 65 78 65


- Sxstrace.exe 감지 패턴 45 6e 61 62 6c 65 54 72 61 63 65 45 78


- SystemPropertiesRemote.exe 감지 패턴 53 79 73 74 65 6d 50 72 6f 70 65 72 74 69 65 73 52 65 6d 6f 74 65 2e 70 64 62


- 악성코드 탐지 파일목록


- 악성코드 검사 대상 파일 목록

(지정된 악성코드 파일들을 제외한 나머지 파일들은 Windows 파일)


- 악성코드 검사

 

2.악성코드 탐지 구조

<!--[if !supportEmptyParas]--> <!--[endif]-->

- 재귀 함수를 통하여 디렉토리 구분을 하고 하위 디렉토리까지 검사가 가능하며, 탐지 방식은 16진수 패턴을 만들어 탐지합니다.

- 검사 대상의 파일 사이즈를 얻어고 사이즈의 크기만큼 cch1,cch에 동적으로 할당해줌 cch1,cch는 임의로 크기를 지정하기엔 너무 많은 빈공간이 발생 또는 공간이 부족할 수도 있다고 생각하여 동적으로 할당함

- 패턴.txt 안에 담겨진 비교할 16진수 패턴 내용을 buffer에 동적 할당을 합니다.


- 사이즈 크기가 55000바이트를 넘어가버리면 시간이 너무 오래 걸리게 되어버려서 사이즈 체크를 함 55000바이트 미만일 경우 정상 작동 ch에 검사대상파일의 한 문자열을 정수형으로 바꿔서 적용 strcat함수를 이용하여 itoa는 진수 변환시켜주는 함수이며 정수인 ch16진수로 cch에 저장 cch에 저장된 하나의 문자열 16진수를 cch1에 문자열 하나하나씩 연결 해주어 검사대상 사이즈의 모든 데이터가 cch1에 저장되도록 함


- strstr 함수는 문자열 검색을 도와주는 함수로서 buffer 패턴내용을 cch1 검사대상 데이터중에 존재하는지 검색하고 존재하지 않는다면 NoVirusCh 설정을 통하여 감염되지 않았다는 메시지 전달.


- 위에 대상파일이 55000 이상일 경우 for문을 통하여 사이즈 크기를 50000미만일때가지 나누고 나눈 사이즈 만큼 문자열 데이터를 cch1에 연결하여 악성코드 패턴을 이용하여 위와 같이 반복




블로그 이미지

_B_G_

,


목차


1. Thread Injection & API 후킹 코드패치 

1.1 분석 사용도구 

1.2 분석 목적 

1.3 수행 기간 

1.4 Thread Injection&API 후킹 코드패치 

1.4.1 Thread Injection이란? 

1.4.2 DLL Injection/Thread Injection 그림설명 

1.4.3 Notepad.exe API후킹 코드패치 동작설명 

1.4.4 Notepad.exe API WriteFile함수 분석 

1.4.5 Thread Injection 코드 작성 

1.4.6 Thread Injection & API 코드패치 Hooking 결과 

 

2. 메모리 변조 탐지 프로그램 

2.1 분석 사용도구 

2.2 분석 목적 

2.3 수행 기간 

2.4 메모리 변조 탐지 프로그램 

2.4.1 메모리 보호 기능 및 구조 설명 

2.4.2 메모리 변조 탐지 

2.4.3 안티 디버그 

2.4.4 안티 DLL인젝션 

2.4.5 결론 


프로젝트명

Thread Injection&API 후킹 코드패치

수행기간

7

사용 도구

Microsoft Visual Studio 2010 C언어, CheatEngine6.6

목적

Thread Injection 공격방식을 알기위함

1.Thread Injection 이란?


- 주로 Code Injection 이란 용어로도 불리고 있는데 같은 의미라고 보여집니다. 먼저 같은 Injection 방법인 DLL Injection 설명을 드리자면 Injectior.exe에서 DLL을 주입하기 위하여 대상프로세스에 쓰레드공간 할당을 받고 할당받은 공간에 미리 작성해둔 Injection시킬 DLL경로를 입력하게됩니다

그리고 빈공간에 작성한 쓰레드를 실행 하기 위해선 CreateRemoteThread 함수를 사용하여 LoadLibrary 함수 주소를 강제로 실행함과 동시에 DLL 경로작성을 한 쓰레드 공간을 실행합니다

하지만 DLL Injection은 무조건 LoadLibrary 함수를 이용하여 작성을 하기 때문에 흔적이 남기 쉽고 DLL 또한 눈에 보이게 됩니다

하지만 Thread Injection은 단순히 코드만 인젝션 시키기 때문에 흔적을 찾기가 어렵고 사용또한 DLL Injection 보단 복잡합니다

그럼 Thread Injection의 방법을 말하자면 

1. DLL Injection -> EXE -> 쓰레드 공간할당/생성 -> LoadLibrary 함수실행 -> DLL경로 쓰레드 실행 -> DLL 기능 작동 이라면 

2. Thread Injection -> EXE -> 쓰레드 공간할당/생성 -> 쓰레드실행 -> 기능작동 이라고 볼수 있습니다

DLL인젝션은 DLL을 통해 기능 작동이되지만 Thread InjectionLoadLibrary 함수를 넣는게 아니라 처음부터 자신이 원하는 API,구조체를 일일이 작성하여 실행될 Thread를 바로 넣어버리기 때문에 흔적이 남지 않습니다.


2.DLL Injection/Thread Injection 그림설명

[DLL Injection]


[Thread Injection]


3. Notepad.exe API후킹 코드패치 동작설명


- 대상 프로그램 Notepad.exe (메모장)은 내용물을 저장을 할 수 있습니다. 이 내용물을 저장하는 API부분을 Thread Injection을 사용하여 코드패치 한 후 다른 내용으로 저장을 하게끔 해보겠습니다.


4. Notepad.exe API WriteFile함수 분석

- WriteFile 함수에 브레이크 포인터를 걸고 내용을 “save save save” 적고 저장

- 현재 스택들이 쌓인곳을 알려주는 ESP 레지스터 주소를 찾아 들어감 메모장 내용은 쌓인지 얼마 안됬을거라 추측을 하고 4바이트씩 하나 하나 30 4C 00 01 -> 01004C30 형식으로 바꿔가며 해당 어드레스 값들을 찾아본 결과 파랑색 어드레스 안에서 발견



- 파랑색 D8 61 47 05 -> 054761D8로 변경후 어드레스 확인하니 저장되는 내용을 볼수 있습니다. 이러한 과정을 Thread Injection을 사용하여 WriteFile 후킹 및 내용 변경까지 해보겠습니다.


5. Thread Injection 코드 작성

- WriteProcessMemory API 재정의 , 파라메터 값 저장하는 곳 생성

- 파라메터 정보를 재정의해준 API에 전달 , 후킹하여 inline 어셈이 작동하도록 작성. ESP안에서의 저장되는 내용물을 가져왔기 때문에 ESP 주소부터 시작

- API에게 전달하여야 하는 파라메터값에게 저장 jmp xxxxxxxx 변경해줄 주소 지정

- 각 쓰레드 인젝션 및 실행

6. Thread Injection & API 코드패치 Hooking 결과


- 정상적으로 작성 및 실행



프로젝트명

메모리 변조 탐지 프로그램

수행기간

4

사용 도구

Microsoft Visual Studio 2010 C언어, 핀볼게임, DLL , CheatEngine6.5

목적

메모리 변조 탐지를 위해 어떤 방법들이 있는지 알기 위함

1.메모리 보호 기능 및 구조 설명


- 메모리 보호 대상을 핀볼게임(PINBALL.EXE)으로 하였습니다.

메모리 변조가 가능할 경우 PINBALL.EXE+13C98 = 핀볼 점수에 관한 주소값을 자신만의 코드로 점프 시킨 후 점수를 받는 ECX 레지스터를 9999999 점수로 조작이 가능하게 됩니다.

이런 메모리 변조를 탐지하며 DLL인젝션을 통하여 메모리변조 가능성도 막기 위하여 감지하며, 디버깅 기능 또한 탐지.


2.메모리 변조 탐지

- 메모리 탐지를 할 영역은 PINBALL.EXE로 하였습니다. 해당 프로세스의 모듈 값을 기본 주소로 잡고 모듈 값 기본주소 ~ 기본주소+설정 까지 실행 시키면서 CheckSum을 이용한 결과값을 리턴 시킨후 결과값 = 원본CheckSum값이 일치하는지 확인하는 방식입니다.

- MemoryDetection.h에 실행중인 CheckSum 구하는 중


PINBALL.EXE 모듈값을 먼저 얻어옴

<GetRemoteModuleHandle.h>

PINBALL.EXE ProcessID를 구한 후 CreateToolhe32Snapshot()을 이용하여 모듈을 불러옴 Module32First()modEntry 인자값을 받고 modEntry.hModule EXE모듈값을 구할 수있습니다.


<MemoryDetection.h>

위에서 받아온 모듈값 영역 기반으로 메모리값이 고정인 반면 변조가 되었을 시 손해를 볼 수 있는 구간을 지정 합니다. VirtualQueryEx 대상 프로세스의 메모리 영역 정보를 가져 올수 있으며, 필요없는 값이 들어 있는 메모리 부분을 걸러낼 수 있습니다. MBI.Type 메모리영역 정보를 불러온 타입 정보 중에 IMAGE 페이지 타입 과 MEM_COMMIT 페이지 상태인 것 만 구분 시킵니다. IF문을 지나가게 되면 RPM API를 통하여 해당 어드레스 1바이트의 값을 CheckSum에 저장 시킵니다.



<MemoryHashCMP.h>


CheckSum 리턴값을 받은 후 원본 CheckSum 결과값이랑 일치하는지 판단하여 일치하지 않는다면 디텍터 프로세스와 보호대상 프로세스를 종료 시킵니다.


<변조 전>


<변조 후> 대상 프로세스 종료 메시지창 확인 후 디텍터 프로세스 종료.


3.안티 디버그

 

ZwQueryInformationProcess 함수에서 디버거가 사용되는 0x7 포트를 감지하는 형식으로 해당 프로세스에 0x7 포트가 있는지 판단 후 상황 대처를 하게 됩니다. hProcess를 통하여 보호대상 프로세스를 지정 , GetCurrentProcess()를 사용하여 디텍터 자기 자신 프로세스를 보호


<디버거 사용 전>


<디버거 사용 후>



4.안티 DLL인젝션


어떤식으로 DLL인젝션을 체크하여야 하는지 생각하다가 윈도우에서 지원해주는 기본 DLL들을 걸러낸 후 외부에서 DLL이 들어오게 될 경우 해당 DLL의 모듈값을 구한 후 DLL인젝션에서 주로 사용되는 CreateThread() 함수가 해당 DLL에서 사용이 되는지 확인하는 방식으로 만들었습니다.

그리고 CreateThread()뿐만 아니라 의심가는 API를 해당 DLL에서 호출하는지 확인 후 소스에

추가를 해주면 됩니다.



여기서 사용 된 감지는 ChreateThread() 호출 하는 DLL을 감지를 하겠습니다.

메모리안의 ChreateThreadDLL.dllCreateThread 함수를 호출하는 값이 존재하는지 Window에서 지원하는 DLL을 제외 후 외부에서 인젝션 된 DLL을 검사합니다. 검사 방식은 메모리변조와 동일한 방식으로 검사 할려는 값을 CreateThread 호출 값으로 바꾸었습니다.



CreateThread() 함수를 호출하는 DLL명을 검출 및 해당 주소에서 감지 되었다 문자열이 출력되도록 하였습니다.


5.결론

처음에 시도하였을땐 생각으로만 대충 알고 있었지만 막상 해볼려니 필요한 함수들이 많았습니다. 또 그 해당 함수들의 이해가 필요로 하다보니 이해 할려는 부분에서 시간을 많이 사용 한 것 같습니다. 현재 프로그램에서 추가를 하게 된다면 CheckSum 부분을 암호화 시키는 형식입니다. 암호화 알고리즘은 그나마 사용했었던 디지털 이미지 보안에서의 DES 암호 알고리즘을 추가하거나 일방향 CRC알고리즘을 알아보아야 할 것 같습니다. 그리고 보호프로그램 또한 변조되지 않도록 해시값을 통하여 변조 유무도 추가되어야 하며 안티디버깅 방법들은 많아서 여러 가지를 추가하여도 좋은거 같습니다




블로그 이미지

_B_G_

,

목차

1. IDA Pro를 이용한 모바일 게임 분석 

1.1 분석 사용도구 

1.2 분석 목적 

1.3 수행 기간 

1.4 모바일 게임 분석 

1.4.1 결과 

1.4.2 Level 단계 수정 

1.4.3 버블 Arcade 모드 개수 수정 

1.4.4 대응방안 

 

2. 게임 비인가 매크로 프로그램 

2.1 분석 사용도구 

2.2 분석 목적 

2.3 수행 기간 

2.4 비인가 매크로 프로그램 분석 

2.4.1 결과 

2.4.2 비인가 매크로 프로그램 

2.4.3 분석 

 

프로젝트명

IDA Pro를 이용한 모바일 게임 분석

수행기간

2

분석 사용 도구

IDA Pro 6.9(Demo) , Apk Manager , Hex Editor

분석목적

정적분석에 대해 익숙해지고 모바일 어플리케이션 접근방식을 알기위함

 

1.결과

- Level 단계 수정의 경우 정의된 함수들이 알기쉽도록 되어있어서 찾기가 쉬웠고 JD-GUI

자바 디컴파일러로 보게 되면 자바언어로 그대로 보여지기 때문에 이 점에 대해선 대응방안이 필요함

 

- 버블 Arcade 모드 개수 수정은 정의된 함수명이랑 관련되지 않은 버블 관련 클래스를 찾음 값이 증가 할때마다 기존의 버블 개수에서 없어지는 형태가 발생하고 값 증가 시킬때마다 일정 패턴으로 버블개수를 보내줌 1로 수정 할 경우 기본 개수인 382 = 183 = 9개 이런식으로 점점 없어짐

 

2.Level 단계 수정

 

 

class.dex파일을 불러온뒤 함수들중 gotoNextLevel 함수를

찾아서 들어가게 되면 add-int/lit8인 추가한다는 ARM명령어가 보이고 이게 레벨업 관련 됐다는 것을 알게됨

 

 

위의 add-int/lit8 ARM명령어 주소값인 0001B5C4를 복사하고 dex를 헥스 에디터 이용하여 주소값을 이동함

 

이동 된 주소값을 보게되면 D8 00 00 01 16진수가 보이는데 01부분을 자신이 원하는 레벨값으로 변경해줍니다.

Apk Manager 를 통하여 컴파일과 서명을 다시 해줍니다.

 

3.버블 Arcade 모드 개수 수정

getNewRow에 들어가서 내리다보면 Random_nextInt@II 보이게됨 더블클릭하여 한번 더 들어감.

 

 

그러면 Random_nextInt@II를 사용하게 될 함수가 보이는데 LevelManager_getLevel@LL에 들어감 


v0 , v0 , 1에서 1부분을 위와같이 헥스에디터를 이용하여 2로 수정할시 Arcad모드 처음 시작하는 버블 개수가 줄어듦

 

 

 

4.대응방안

- 우선 공격자들이 분석을 하기 어렵게 하는 것이 우선이라고 생각합니다. 예를들어 위에 “Level” 이란 함수명 하나만 봐도 이 부분은 게임상의 레벨 부분이 관련된 곳을 짐작할수 있고 전체적인 흐름을 읽을 수 있어 취약하다고 보여집니다. 그리고 현재 모바일 게임 서비스 파일들을 보게되면 중요 데이터부분들의 라이브러리를 불러오는 방법을 이용하며, 데이터 라이브러리 파일들을 보안 할 수 있는 파일을 개별적으로 추가되어있습니다. 이처럼 보안할 수 있는 파일을 따로 추가하는 것도 좋을거 같습니다. 보안 기능은 라이브러리 파일들이 변조,손상 되지 않았는지 확인을하며, 데이터를 불법적으로 변조하는 것을 막을 수 있습니다.

 

 

 

 

 

 

   

 

프로젝트명

게임 비인가 매크로 프로그램 분석

수행기간

1

사용 도구

Cheat Engine6.5,AutoHotkey,DIE

목적

비인가 매크로 동작원리를 알기 위함

1.결과

- 해당 비인가 프로그램 컴파일이 오토핫키라는 기반으로 분석하였고 대응방안은 해당 게임의 캐릭터 이미지를 저장 해둔 파일을 외부에서 변경되지 못하도록 감지를 하여야하며, 또한 오토핫키 자체를 감지할수 있도록 단어감지나 기존에 나와있는 Mutex를 통해서 감지하는 최소한의 보안을 하여야 합니다. 오토핫키는 소스가 그대로 보여지게되면 악용이 아니라 편의를 위해서 만들어지는 프로그램들이 제작자가 원치않는 소스 유출이 될수 있으므로 난독화 기능이 필요하며 또한 이를 이용한 악용하는 사람이 있을 수 있습니다.

 

 

2.비인가 매크로 프로그램

- 해당 비인가 매크로 프로그램은 총게임에서 적 인식을 자동으로 하여 에임을 이동시켜 총이 발사되는 원리. 적 인식 방식은 해당 게임의 캐릭터 파일을 열어 캐릭터 머리,,팔 부분의 색깔을 수정하고 화면에서 수정된 색깔을 감지하여 마우스를 이동시키는 스크립트를 적용

 

 

 

3.분석

- 화면인식 매크로 프로그램은 우선 알려진 오토핫키로 제작이 되어진걸로 추측을 하게 되고 DIE 프로그램을 이용하여 해당 프로그램이 패커가 되어있는지 확인을 함

- VMProtect 패커가 되어있고 Ollydbg 올리디버거가 작동되지 않으므로, Cheat Engine6.5를 통해서 동적으로 스크립트를 분석함

 

 

 

 

- 오토핫키로 제작이 되었으면, 프로그램이 실행이 되면서 스크립트 소스가 다시 풀려버리게 됩니다. 이 점을 이용하여 해당 스크립트를 그대로 가져올수 있으며 어떤 식으로 돌아가게되는지 분석이 가능함

 

 

 

- 오토핫키 스크립트가 패커에서 실행될 때 풀려버린 소스를 그대로 가져온 상태

 

- 소스를 보면 제작자가 프로그램 사용 가능/불가능 하도록 설정을 할 수 있도록 했으며, 소스를 가져온 상태의 프로그램이 사용 불가능 상태가 되어도 강제로 사용할 수 있도록 수정이 가능함

 

 - 변조 스킨 다운로드를 통하여 캐릭터 이미지를 수정한 뒤 프로그램 작동이 되는지 알 수 습니다. 밑의 소스대로 화면 해상도, 스캔 범위, 픽셀 위치를 알 수 있으며 수정된 캐릭터의 이미지 색깔대로 픽셀 RGB값을 스캔하여 마우스를 이동 시킴


블로그 이미지

_B_G_

,