首页
社区
课程
招聘
[原创]驱动锁主页方法一修改命令行参数
2022-3-30 10:32 16640

[原创]驱动锁主页方法一修改命令行参数

2022-3-30 10:32
16640

上一篇帖子实现了(点击)驱动防截屏,最近在学hook相关的知识,这篇正好写一下驱动锁主页
这篇文章主要写的是修改命令行参数

锁主页方法介绍

第一种 修改命令行参数
修改命令行参数,启动浏览器的时候后面加上要修改的网址
图片描述
第二种 hook注册表
360采用的是从内核hook注册表相关函数,但是hook的是KiFastSystemCall,更往前了
第三种 通过网络协议修改
DNS查询,通过网络防火墙找到DNS数据包

寻找命令行参数

!process 0 0 找到IE进程

1
2
3
PROCESS 873847f8  SessionId: 1  Cid: 07fc    Peb: 7ffd5000  ParentCid: 0594
    DirBase: 3f378680  ObjectTable: a69af758  HandleCount: 396.
    Image: iexplore.exe

切换进程,查看PEB

1
2
3
4
5
kd> .process /p 873847f8; !peb 7ffd5000
Implicit process is now 873847f8
.cache forcedecodeuser done
PEB at 7ffd5000 
    CommandLine:  '"C:\Program Files\Internet Explorer\iexplore.exe" '

命令行参数就在PEB里,我们要改的就是这个
CommandLine: '"C:\Program Files\Internet Explorer\iexplore.exe" '

 

输入dt _PEB找到关键数据结构,用户进程参数

1
2
3
kd> dt _PEB
nt!_PEB
   +0x010 ProcessParameters : Ptr32 _RTL_USER_PROCESS_PARAMETERS

查看_RTL_USER_PROCESS_PARAMETERS用户进程参数结构体

1
2
3
kd> dt _RTL_USER_PROCESS_PARAMETERS
nt!_RTL_USER_PROCESS_PARAMETERS
   +0x040 CommandLine      : _UNICODE_STRING

找到关键数据,命令行,要改的就是这个

1
+0x040 CommandLine      : _UNICODE_STRING

也可以这样定位

1
2
3
4
5
6
7
8
9
10
11
!process 0 0
PROCESS 873847f8  SessionId: 1  Cid: 07fc    Peb: 7ffd5000  ParentCid: 0594
    DirBase: 3f378680  ObjectTable: a69af758  HandleCount: 396.
    Image: iexplore.exe
 
kd> dt _peb 7ffd5000
nt!_PEB
   +0x010 ProcessParameters : 0x001c1208 _RTL_USER_PROCESS_PARAMETERS
 
kd> dx -id 0,0,873847f8 -r1 ((ntkrpamp!_RTL_USER_PROCESS_PARAMETERS *)0x1c1208)
    [+0x040] CommandLine      : ""C:\Program Files\Internet Explorer\iexplore.exe" " [Type: _UNICODE_STRING]

 

因为IE开启的时候会开启两个进程,所以我们还要看另外一个进程

1
2
3
4
5
6
7
8
!process 0 0
PROCESS 873847f8  SessionId: 1  Cid: 07fc    Peb: 7ffd5000  ParentCid: 0594
    DirBase: 3f378680  ObjectTable: a69af758  HandleCount: 396.
    Image: iexplore.exe
 
PROCESS 86dd78c0  SessionId: 1  Cid: 0ff4    Peb: 7ffdf000  ParentCid: 07fc
    DirBase: 3f378620  ObjectTable: a3952e10  HandleCount: 615.
    Image: iexplore.exe

找到第二个进程的命令行参数
SCODEF:2044 CREDAT:14337'这个我们必须进行过滤,如果发现这个,不进行修改,如果是空的话,进行修改

1
2
3
4
5
6
kd> .process /p 86dd78c0; !peb 7ffdf000
Implicit process is now 86dd78c0
.cache forcedecodeuser done
PEB at 7ffdf000
 
CommandLine:  '"C:\Program Files\Internet Explorer\iexplore.exe" SCODEF:2044 CREDAT:14337'

根据EPROCESS定位PEB

1
2
3
kd> dt _eprocess
nt!_EPROCESS
    +0x1a8 Peb              : Ptr32 _PEB

通过这个PEB我们就可以获取进程参数

1
2
3
kd> dt _PEB
nt!_PEB
     +0x010 ProcessParameters : Ptr32 _RTL_USER_PROCESS_PARAMETERS

通过进程参数就可以获取命令行

1
2
3
kd> dt _RTL_USER_PROCESS_PARAMETERS
nt!_RTL_USER_PROCESS_PARAMETERS
   +0x040 CommandLine      : _UNICODE_STRING

内核代码实现

由于PEB是应用层,我们需要切换进程上下文

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
VOID NotifyRoutine(_In_ HANDLE ParentId, _In_ HANDLE ProcessId, _In_ BOOLEAN Create) {
    PEPROCESS Process;
    KAPC_STATE apcstate;
    NTSTATUS status;
    //如果创建一个进程,判断进程名称是否是我们需要的
    if (Create) {
        status= PsLookupProcessByProcessId(ProcessId, &Process);
        if (NT_SUCCESS(status)) {
            if ((_strnicmp(PsGetProcessImageFileName(Process), "iexplore.exe", strlen("iexplore.exe")) == 0) ||
                (_strnicmp(PsGetProcessImageFileName(Process), "chrome.exe", strlen("chrome.exe")) == 0)) {
                KeStackAttachProcess(Process, &apcstate);
                PPEB peb = PsGetProcessPeb(Process);
                //我们进程前面是路径,后面是命令行, 命令行长度减去路径长度<=6说明不存在
                if (peb->ProcessParameters->CommandLine.Length - peb->ProcessParameters->ImagePathName.Length <=6) {
                    PWCHAR Buffer = peb->ProcessParameters->CommandLine.Buffer;
                    UNICODE_STRING usCommandLine;
                    wcscat(Buffer, L"https://www.baidu.com");
                    RtlInitUnicodeString(&usCommandLine, Buffer);
                    peb->ProcessParameters->CommandLine = usCommandLine;
                }
                KeUnstackDetachProcess(&apcstate);
            }
        }
    }
};

测试

图片描述


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

最后于 2022-3-31 14:55 被breeze911编辑 ,原因: 更新
上传的附件:
收藏
点赞6
打赏
分享
最新回复 (2)
雪    币: 3161
活跃值: (5236)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
0346954 2 2022-3-30 17:27
2
0
感谢分享
雪    币: 603
活跃值: (1371)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
breeze911 2022-3-31 14:50
3
0

IE也能改,之前是我的名字打错了,把iexplore打成了iexplorer,多了个r

最后于 2022-3-31 14:57 被breeze911编辑 ,原因:
游客
登录 | 注册 方可回帖
返回