CodeEngn malware 03
코드엔진 malware 03번 문제풀이
악성코드 분석 문제 3번째 문제이다 아래의 코드를 살펴보면
데이터를 길이의 절반만큼 더한 값을 value에 저장하고 홀수일 경우 data[i]«8한 값을 더한다.
그리고 하위 2비트와 상위 2비트를 가져와 더한 뒤 value에 저장하고 value의 보수를 리턴하는 코드다. 연산을 한 뒤 보수 값을 반환하는 것이 뭐가 있을지 찾아보니 checksum이라는 것을 알 수 있었다.
unsigned char CalcChecksum(unsigned char *data, int leng)
{
unsigned char csum;
csum = 0xFF;
for (;leng > 0;leng--)
csum += *data++;
return ~csum;
} (출처 : 위키 백과)
Checksum은 데이터 값을 더한 뒤 캐리 니블(1byte의 절반인 4bit를 의미)을 버린 값의2의 보수를 얻는 방식이지만 인텔 방식의 마이크로프로세서 실행파일 체크섬 코드를 살펴보니 위의 코드와 비슷하였다.