이번엔 '무엇을 하는' 함수인지를 알면 된다.
문제코드가 정말 짧다. (맘에 든다)
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);
}
매개 변수는 두 가지로, data와 length이다.
함수 안에서 value라는 변수를 선언해서, for 문을 통해 data의 값들을 더해준다.
처음에는 대충 훑어보고, 난독화 혹은 암호화인가 생각했다.
그런데 아니어서 조금 더 집중해서 쳐다봤더니,
입력된 data를 바꾸고 있는 것이 아니라, data의 내용을 이용해서 value라는 값을 생성할 뿐이었다.
data를 사용해서 어떠한 값을 생성하는 이유는 무엇일까?
답은 checksum이다.
(checksum: data의 값이 변조되었는지 확인하기 위해 사용하는 값)
'Malware Analysis' 카테고리의 다른 글
[CodeEngn] Malware Analysis L06 (0) | 2023.08.06 |
---|---|
[CodeEngn] Malware Analysis L05 (0) | 2023.08.06 |
[CodeEngn] Malware Analysis L04 (0) | 2023.08.06 |
[CodeEngn] Malware Analysis L02 (0) | 2023.08.06 |
[CodeEngn] Malware Analysis L01 (0) | 2023.08.06 |