자기 자신을 지우는 exe 기법

개발새발 2008. 9. 19. 23:24 posted by jz-
이 프로그램을 한번 실행시켜 보세요.
제가 컴파일한 것으로, 자기자신을 지우는 것 말고는 아무것도 안합니다. ㅎㅎ 리버싱하시고 따지셔도 좋습니다^^

실행하면 자기자신을 삭제합니다.


이 기법은 많이 알려져 있는 기법으로, batch파일을 써서 exe를 삭제하게 합니다.

exe실행
exe를 삭제하는 batch 제작
batch 실행 + 무한루프 (아직은 exe가 실행중이라 삭제 거부됨)
    프로세스 종료-> exe삭제 허가 
    exe 삭제됨.
    batch 삭제됨.
>끗<

흔히 dropper가 쓰는 기법입니다.
malware를 시스템에 설치하고 자기자신은 흔적을 없애고 사라지죠.

소스입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <windows.h>
#include <stdio.h>

 
int main( int argc, char **argv )
{
	FILE *fp;
 
	fp = fopen( "deleteme.bat", "wt" );
 
 
	fprintf( fp, "\
:AAA\ndel \"%s\"\n\
IF exist \"%s\" GOTO AAA\n\
:BBB\n\
del deleteme.bat\n\
IF exist deleteme.bat GOTO BBB\n", argv[0], argv[0] );
 
	fclose( fp );
	ShellExecute( NULL, "open", "deleteme.bat", NULL, NULL, SW_HIDE );
 
	return 0;
 
}




단순히 batch 파일 하나 만들어서 실행(ShellExecute)하고 종료합니다.
참고할점은 system함수 로는 안된다는 겁니다. system함수는 셸의 종료를 기다리니까요.
batch 파일이 도는동안 process가 종료되어야 하니까 ShellExecute로 해야합니다.

batch script를 보시면, 뭘하는지 잘 보일겁니다.
파일이 없어질때까지 루프를 돌면서 exe를 지우려고 하죠.
끝나고 batch파일 자신도 지우고요.

아 물론 순서는 상관없습니다.
batch는 메모리에 로드돼서 bat파일은 삭제가 되거든요.



win32 콘솔 프로젝트로 만든지라 콘솔창이 잠깐 보입니다.
win32 프로젝트로 재컴파일하면 아무것도 안보이고 파일만 삭제되겠죠.^^


관련 CodeProject 입니다.

http://www.codeproject.com/KB/files/cpselfdestruct2.aspx