./c0de/c/suicide.txt

0.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
/* suicide.c by [ByteRage]
 * win32 self deleting executable
 */
 
#include <windows.h>
 
void suicide(unsigned long exitcode) {
	HMODULE hModule;
	char szModuleName[MAX_PATH];
    hModule = GetModuleHandle(0);
	GetModuleFileName(hModule, szModuleName, sizeof(szModuleName));
	if (GetVersion() & 0x80000000) {
		// windows 9x,ME
		__asm {
			lea	eax, szModuleName
			push	exitcode
			push	0
			push	eax
			push	ExitProcess
			push	hModule
			push	DeleteFile
			push	FreeLibrary
			ret
		}
	} else {
		// windows NT,2K
		CloseHandle(4);
		__asm {
			lea	eax, szModuleName
			push	exitcode
			push	0
			push	eax
			push	ExitProcess
			push	hModule
			push	DeleteFile
			push	UnmapViewOfFile
			ret
		}
	}
}
 
void main(int argc, char ** argv) {
	suicide(0);
}

Back