이 프로그램을 한번 실행시켜 보세요.
제가 컴파일한 것으로, 자기자신을 지우는 것 말고는 아무것도 안합니다. ㅎㅎ 리버싱하시고 따지셔도 좋습니다^^
실행하면 자기자신을 삭제합니다.
이 기법은 많이 알려져 있는 기법으로, batch파일을 써서 exe를 삭제하게 합니다.
흔히 dropper가 쓰는 기법입니다.
malware를 시스템에 설치하고 자기자신은 흔적을 없애고 사라지죠.
소스입니다.
단순히 batch 파일 하나 만들어서 실행(ShellExecute)하고 종료합니다.
참고할점은 system함수 로는 안된다는 겁니다. system함수는 셸의 종료를 기다리니까요.
batch 파일이 도는동안 process가 종료되어야 하니까 ShellExecute로 해야합니다.
batch script를 보시면, 뭘하는지 잘 보일겁니다.
파일이 없어질때까지 루프를 돌면서 exe를 지우려고 하죠.
끝나고 batch파일 자신도 지우고요.
아 물론 순서는 상관없습니다.
batch는 메모리에 로드돼서 bat파일은 삭제가 되거든요.
win32 콘솔 프로젝트로 만든지라 콘솔창이 잠깐 보입니다.
win32 프로젝트로 재컴파일하면 아무것도 안보이고 파일만 삭제되겠죠.^^
관련 CodeProject 입니다.
http://www.codeproject.com/KB/files/cpselfdestruct2.aspx
제가 컴파일한 것으로, 자기자신을 지우는 것 말고는 아무것도 안합니다. ㅎㅎ 리버싱하시고 따지셔도 좋습니다^^
실행하면 자기자신을 삭제합니다.
이 기법은 많이 알려져 있는 기법으로, 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