이번에도 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 |