WannaMine4.0专杀的一些技巧
简介

查杀思路





LINKS
最后更新于
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\NetworkPlatform\Location Awareness BOOL bRet = EnbalePrivileges(GetCurrentProcess(), SE_DEBUG_NAME);
if(bRet){
printf("[+]Enbale DebugPrivileges successful\n");
}else {
printf("[-]Can not Enbale DebugPrivileges successful\n");
}
bRet = RegOpenKeyExA(HKEY_LOCAL_MACHINE, "Software\\Wow6432Node\\Microsoft\\Windows NT\\CurrentVersion\\NetworkPlatform\\Location Awareness", 0, KEY_ALL_ACCESS, &hKey);
if(!bRet){
printf("[+]Open Key successful\n");
}else {
printf("[-]Can not Open Key successful\n");
}
LONG lResult = RegQueryValueExA(hKey,"LastBackup" , NULL, &dwType,
NULL, &dwSize);
if (lResult == ERROR_SUCCESS)
{
lResult = RegQueryValueExA(hKey, "LastBackup", NULL, &dwType,
(LPBYTE)buffer, &dwSize);
}
if(!lResult){
printf("[+]Query Key Value successful\n");
}else {
printf("[-]Can not Query Key Value successful\n");
}typedef struct _SERVICE_STATUS_PROCESS {
DWORD dwServiceType;
DWORD dwCurrentState;
DWORD dwControlsAccepted;
DWORD dwWin32ExitCode;
DWORD dwServiceSpecificExitCode;
DWORD dwCheckPoint;
DWORD dwWaitHint;
DWORD dwProcessId;
DWORD dwServiceFlags;
} SERVICE_STATUS_PROCESS, *LPSERVICE_STATUS_PROCESS;void KillProcessTree(DWORD dwProcessId) {
PROCESSENTRY32 pe = { 0 };
pe.dwSize = sizeof(PROCESSENTRY32);
HANDLE hSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (Process32First(hSnap, &pe)) {
do {
if (pe.th32ParentProcessID == dwProcessId)
KillProcessTree(pe.th32ProcessID);
} while (Process32Next(hSnap, &pe));
}
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
if (hProc) {
TerminateProcess(hProc, 1);
CloseHandle(hProc);
}
}
bRet = QueryServiceStatusEx(
hService,
SC_STATUS_PROCESS_INFO,
(LPBYTE)&ssStatus,
sizeof(SERVICE_STATUS_PROCESS),
&outSize);
if(bRet){
printf("[+]Query ServiceStatus successful\n");
}else {
printf("[-]Can not Query ServiceStatus successful\n");
}
if(ssStatus.dwProcessId!=0){
KillProcessTree(ssStatus.dwProcessId);
}
bRet = DeleteService(hService);
bRet = DeleteService(hService);
if(bRet){
printf("[+]Delete Service successful\n");
}else {
printf("[-]Can not Delete Service successful\n");
}
printf("[*]Deleting malware file ......\n");
char ServiceDllPath[MAX_PATH]={0};
memcpy(ServiceDllPath,buffer,strlen(buffer));
sprintf_s(buffer, "del %s /Q /F\n", ServiceDllPath);
system(buffer);
for (size_t i = 0; i < sizeof(strings) / MAX_PATH; i++)
{
sprintf_s(buffer, "del %s /Q /F\n", strings[i]);
system(buffer);
}
printf("[+]Delete malware file successful!\n");
RegCloseKey(hKey);
CloseServiceHandle(hSCM);
CloseServiceHandle(hService);