본문 바로가기

Malware Analysis

[CodeEngn] Malware Analysis L05

이번에도 3번 문제처럼 무엇을 하는 함수인지 분석하는 문제이다.

int Malware_L05( char *StartOfData, char *Output, int SizeOfData)
{
	int encoded = 0, i, l = 0;
	char Table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
	long buffer, buffer2;
	do
	{
		...
		for(i = 3 ; i >= 0 ; i--, l++)
		{
			buffer2=buffer;
			buffer2 &= 0x3f;
			*(Output + i)=Table[buffer2];
			buffer>>=6;
		}
		Output += 4;
		encoded += 4;
		SizeOfData -= 3;
		if(l==76 && SizeOfData>3)
		{
			*Output=0xd;
			Output++;
			*Output=0xa;
			Output++;
			encoded+=2;
			l=0;
		}
		...
		
	} while( SizeOfData != 0);
	return encoded;
}

 

이번 문제는 굉장히 쉽게 풀렸다.

 

일단 매개변수를 살펴보면

int Malware_L05( char *StartOfData, char *Output, int SizeOfData)

데이터의 시작 지점, 출력물, 데이터 크기

세 가지를 받는다.

 

그리고 코드 중간중간 보이는 encode라는 키워드.

 

그리고 이 부분

char Table[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

 

Table에 들어가는 저 내용은 base64 encoding table이다.

알파벳 대문자, 소문자, 그리고 특수문자 두 개(+, /)

 

base64에 대해 알고 있다면, 쉽게 풀 수 있는 문제인 것 같다.

 

'Malware Analysis' 카테고리의 다른 글

[CodeEngn] Malware Analysis L07  (0) 2023.08.06
[CodeEngn] Malware Analysis L06  (0) 2023.08.06
[CodeEngn] Malware Analysis L04  (0) 2023.08.06
[CodeEngn] Malware Analysis L03  (0) 2023.08.06
[CodeEngn] Malware Analysis L02  (0) 2023.08.06