首页
社区
课程
招聘
5
[原创](原创)Win7下过Hack*Shield的部分驱动保护
发表于: 2013-6-11 16:13 8581

[原创](原创)Win7下过Hack*Shield的部分驱动保护

2013-6-11 16:13
8581
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
// 安装驱动的线程函数
UINT __cdecl CDriverProtectDlg::InstallDriverThread(LPVOID pParam)
{
    CDriverProtectDlg* pDlg = NULL;
    pDlg = (CDriverProtectDlg*)pParam;
    pDlg->UpdateData(TRUE);
    if (pDlg->strPath.IsEmpty())
    {
        AfxMessageBox(L"请选择驱动路径!");
        return 0;
    }
    if (pDlg->strrGamePath.IsEmpty())
    {
        AfxMessageBox(L"请选择游戏路径!");
        return 0;
    }
    if (!pDlg->LoadNTDriver(L"HelloDDK",pDlg->strPath.GetBuffer()))
    {
        pDlg->UnloadNTDriver(L"HelloDDK");
        pDlg->LoadNTDriver(L"HelloDDK",pDlg->strPath.GetBuffer());
    }
    HANDLE hDevice =
        ::CreateFileW(L"\\\\.\\HelloDDK",
        GENERIC_READ | GENERIC_WRITE,
        0,      // share mode none
        NULL,   // no security
        OPEN_EXISTING,
        FILE_ATTRIBUTE_NORMAL,
        NULL );     // no template
    if (hDevice == INVALID_HANDLE_VALUE)
    {
        pDlg->m_DriverINFORMATION.SetWindowTextW(L"打开驱动错误!");
        return 1;
    }
    DWORD Pid = pDlg->TransferProcessID(pDlg->strrGamePath.GetBuffer());
    int a = (int)Pid;
    UCHAR* InputBuffer = new UCHAR[a];
    UCHAR* OutputBuffer= new UCHAR[a];
    BOOL bRet;
    DWORD dwOutput;
    //输入缓冲区作为输入,输出缓冲区作为输出
    bRet = DeviceIoControl(hDevice, IOCTL_TEST1, InputBuffer, a, OutputBuffer, a, &dwOutput, NULL);
    if (bRet)
    {
        pDlg->m_DriverINFORMATION.SetWindowTextW(L"开启保护成功!");
    }
    CloseHandle(hDevice);
    delete []InputBuffer;
    delete []OutputBuffer;
    //AfxEndThread(0);
    ResumeThread(pDlg->ProcessMainThread);
    pDlg = NULL;
    return 0;
}
UINT __cdecl CDriverProtectDlg::UnInstallDriverThread(LPVOID pParam)
{
    CDriverProtectDlg* pDlg = NULL;
    pDlg = (CDriverProtectDlg*)pParam;
    pDlg->UpdateData(TRUE);
    if (pDlg->strPath.IsEmpty())
    {
        AfxMessageBox(L"请选择驱动路径!");
        return 0;
    }
    if (pDlg->strrGamePath.IsEmpty())
    {
        AfxMessageBox(L"请选择游戏路径!");
        return 0;
    }
    pDlg->UnloadNTDriver(L"HelloDDK");
    //AfxEndThread(0);
    pDlg = NULL;
    return 0;
}

[注意]看雪招聘,专注安全领域的专业人才平台!

上传的附件:
收藏
免费 5
支持
分享
赞赏记录
参与人
雪币
留言
时间
心游尘世外
为你点赞~
2024-5-31 05:16
QinBeast
为你点赞~
2024-5-31 05:09
飘零丶
为你点赞~
2024-4-3 00:32
shinratensei
为你点赞~
2024-2-10 01:04
PLEBFE
为你点赞~
2023-3-7 00:32
最新回复 (8)
雪    币: 19
活跃值: (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
本人顺便录制了一个教程去讲解代码:

http://pan.baidu.com/share/link?shareid=2793896342&uk=3155594444
2013-6-11 16:20
0
雪    币: 92
活跃值: (209)
能力值: ( LV6,RANK:95 )
在线值:
发帖
回帖
粉丝
3
能调试了???
2013-7-4 07:26
0
雪    币: 218
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
XP 下蓝屏。。改个XP 下的驱动来试试。
2013-7-4 13:28
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
HS还有很多检测,像不断检测是否hook被还原,DPC被删掉;而中途启用内核调试会立刻重启。
至于R3下的hook我就无语了,用XT一看数不清的IAT,inline hook,完全不考虑游戏的效率。
2013-7-4 14:08
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
6
r3是TMD壳的dll reload功能
2013-7-4 15:08
0
雪    币: 115
活跃值: (46)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
7
貌似还会释放很多.tmp,好像把ntdll等重载了那样,而且属于IAT hook
2013-7-4 15:15
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
8
tmp其实就是dll文件,都是Copyfile过去的~
2013-7-4 15:31
0
雪    币: 19
活跃值: (108)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
其实部分也可以用重载内核实现的!
2013-7-14 17:20
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册