Dreamhack/Dreamhack Wargame (Challenge)

[175] IT 비전공자 [dreamhack] [CodeEngn] Malware L03문제풀기

imaginefuture-1 2025. 3. 8. 09:35

악성코드 분석!

 

 

u_short Malware_L03(u_short * data,u_short length) 
{
        register long value;
        u_short i;
        for(i=0;i<(length>>1);i++)
                value+=data[i];
        if((length&1)==1)
                value+=(data[i]<<8);
        value=(value&65535)+(value>>16);
        return(~value);
}

 

일단 대충 보면, 내가 보기엔 쉬프트이리저리해서 줏어온 데이터를 값에다 집어넣고 변환시키는 것같아보인다

마지막엔 반전 시키넹

 

 

🔍 이 함수가 하는 일 분석 (Malware_L03)

이 코드는 입력 데이터(data)를 특정 방식으로 처리하여 u_short 값을 반환하는 함수야.
너가 말한 것처럼 비트 연산(shift)과 덧셈 연산을 통해 데이터를 변환하는 걸 볼 수 있어.


✅ 1️⃣ 코드 분석

u_short Malware_L03(u_short * data, u_short length) 
{
    register long value;  // 누적 합계를 저장하는 변수 (32비트)
    u_short i;

    // (1) 데이터의 16비트 단위 합 계산
    for(i = 0; i < (length >> 1); i++) 
        value += data[i];  // 데이터 배열의 모든 16비트 값들을 더함

    // (2) 데이터 길이가 홀수일 경우 처리 (마지막 8비트 처리)
    if((length & 1) == 1)  
        value += (data[i] << 8);  // 남은 8비트를 상위 8비트로 이동 후 더함

    // (3) 32비트 값을 16비트로 변환 (carry를 고려한 처리)
    value = (value & 65535) + (value >> 16);

    // (4) 결과를 반전(~) 후 반환 (1의 보수 처리)
    return (~value);
}

✅ 2️⃣ 이 코드의 목적

  • 16비트 단위로 데이터를 누적하여 합산
  • 데이터 길이가 홀수일 경우 마지막 8비트를 고려하여 처리
  • carry(넘침)를 반영하여 최종 16비트로 조정
  • 결과값을 1의 보수(Negation) 처리 후 반환

📌 이 함수는 "체크섬(Checksum)"을 계산하는 코드로 보임.


✅ 3️⃣ 기능 요약 (이 함수가 하는 일)

🛠 16비트 체크섬(Internet Checksum) 계산

  • 입력된 data[]의 모든 16비트 값들을 더함
  • carry(넘치는 값) 처리 (value = (value & 65535) + (value >> 16);)
  • 결과값을 반전(1의 보수)

**즉, 인터넷 패킷에서 많이 사용되는 **"IP 헤더 체크섬" 또는 "UDP/TCP 체크섬"을 계산하는 알고리즘이야!


✅ 4️⃣ 어디에 사용될까?

📌 이 함수는 IP 헤더 체크섬 또는 UDP/TCP 체크섬 계산에 사용될 가능성이 큼!
즉, 패킷 변조 / 무결성 체크를 우회하려는 악성코드일 가능성이 높아.

💡 인터넷 패킷에서 체크섬이란?

  • 네트워크 패킷(데이터)을 전송할 때, 오류가 발생했는지 확인하기 위해 사용됨.
  • 보통 IP 헤더, UDP, TCP 패킷에서 16비트 체크섬을 사용.
  • 이 코드와 동일한 방식으로 체크섬이 계산됨.

✅ 5️⃣ 결론

이 함수는 인터넷 패킷에서 사용되는 "16비트 체크섬"을 계산하는 함수야.
(즉, IP/UDP/TCP 패킷에서 데이터 무결성을 확인하는데 사용됨.)

📌 악성코드에서는 주로 네트워크 패킷 변조, 우회 또는 백도어 통신에 활용될 가능성이 높아!
🚀 즉, 네트워크 트래픽을 조작하거나, 무결성 체크를 우회하려는 의도로 사용될 수 있음.

 


 

 

허억 그 네트워크 공부에서 맨날 나오던 체크섬이 이렇게 계산되는거였다....캬

쩐다..공격과 방어는 거꾸로 그자체네. 거울이다 거울..

역으로 거슬로 올라가는게 신기하다

 

정답은 checksum