CodeEngn malware 03

코드엔진 malware 03번 문제풀이

악성코드 분석 문제 3번째 문제이다 아래의 코드를 살펴보면

mal3

데이터를 길이의 절반만큼 더한 값을 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의 보수를 얻는 방식이지만 인텔 방식의 마이크로프로세서 실행파일 체크섬 코드를 살펴보니 위의 코드와 비슷하였다.