键盘布局持久化技术

news2025/8/1 20:14:51

**01 **键盘布局简介

键盘布局是按键在键盘上的分布模式,决定了键位顺序。键盘布局在发展过程中,由于使用习惯的不同,各国间使用的键盘布局存在细微差别,因此在Windows系统上以国家为单位区分不同的键盘布局方案。我们最熟悉的布局模式当属美式键盘。键盘布局以动态链接库的形式存在System路径下,在系统启动时加载。本文将通过探究键盘布局文件的加载方式得到其潜在的利用方法。

1659428137_62e8dd29daabdb65dbb71.png!small?1659428138879

**02 **键盘布局方案加载过程

键盘布局文件的加载由winlogon.exe完成。Windows Logon Process(即winlogon.exe),是Windows NT
用户登录程序,用于管理用户登录和退出,且以 SYSTEM
用户运行。在入口WinMain中,调用了函数UpdatePerUserSystemParameters:

1659428159_62e8dd3f1fd2134c4971f.png!small?1659428159786

该函数位于user*32.dll中:

1659428172_62e8dd4cc6666291d34b5.png!small?1659428173642

在函数UpdatePerUserSystemParameters中,首先调用GetActiveKeyboardName,通过查询注册表项:

计算机\HKEY_CURRENT_USER\Keyboard Layout\Preload

获取默认加载的键盘布局文件:

1659428210_62e8dd7254765cb47ca23.png!small?1659428210998

在对应注册表下,保存着默认加载的键盘布局编号:

1659428236_62e8dd8c2e7c2aad6329e.png!small?1659428236853

该编号指向注册表

计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard
Layouts\00000804

1659428273_62e8ddb13f30e24aebadc.png!small?1659428273891

可以看到,当前默认启用的键盘布局文件是中文简体环境下的键盘布局,即美式键盘布局。在获取到当前启用的键盘布局文件名后,以此为参数调用LoadKeyboardLayoutWorker:

1659428310_62e8ddd6add81c72488d9.png!small?1659428311496

在OpenKeyboardLayoutFile中,先调用GetKeyboardDllName判断当前语言环境,主要是为了区分出日、韩两种特殊键盘布局。各语言环境下的键盘布局可能略有差别,但是日韩因其文字的特殊性有其特定的键盘标准。接着OpenKeyboardLayoutFileWorker加载对应的DLL:

1659428341_62e8ddf5286d2330f43f7.png!small?1659428341823

OpenKeyboardLayoutFileWorker进一步调用LoadLibraryExW加载对应DLL:

1659428359_62e8de0701ffffccd0afb.png!small?1659428359684

在加载前没有进行文件合法性相关的校验,这为恶意利用留下了空间。

**03 **键盘布局文件利用

1.键盘布局文件的构建

Windows支持自定义键盘布局,利用微软官方的键盘布局生成器Keyboard Layout
Creator(MSKLC.exe)可以生成键盘布局文件对应的源码文件。首先加载已有键盘布局:

1659428402_62e8de32080eaac52fbb7.png!small?1659428402671

选择当前语言地区的布局:

1659428413_62e8de3d97792379cb64d.png!small?1659428414294

保存源码文件:

1659428766_62e8df9e783fcbe59e282.png!small?1659428767157

保存的结果是一个.klc文件:

1659428777_62e8dfa956bba7788908a.png!small?1659428778081

需要使用kbdutool.exe将.klc解析为键盘布局源码文件:

kbdutool.exe-u -i -s out.klc

生成的源码文件如下:

1659428814_62e8dfce80580fb7b5282.png!small?1659428815174

在Layout01.C末尾添加DllMain函数:

1659428833_62e8dfe1959d8e09d69e4.png!small?1659428834407

利用源码文件创建工程,在安装了WDK的环境下编译成对应系统架构的DLL,即可生成自定义布局文件。

2.键盘布局文件的安装

键盘布局的安装方式有两种:

a)由上面的分析可知,在键盘布局加载时,会直接加载Preload注册表项下保存的默认键盘布局,可以通过劫持或替换默认键盘布局DLL等方式实现安装;

b)利用input.dll导出函数InstallLayoutOrTip进行安装。

第一种安装方式简单粗暴,通过修改Preload注册表改变默认加载的键盘布局文件。下面重点看第二种安装方式:

根据MSDN的InstallLayoutOrTip调用示例,可以通过在键盘布局注册表项

计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layouts

下新增一个新编号,并添加相关字段信息:

1659428886_62e8e016616d17c3daab4.png!small?1659428887078

创建后,将恶意的键盘布局文件部署在system目录下,调用InstallLayoutOrTip启用目标键盘布局文件。函数第一个参数构造如下:

语言标识符(LangID):键盘布局ID(KLID)

1659428906_62e8e02a00b438308996b.png!small?1659428906578

第二个参数默认为0,调用InstallLayoutOrTip启用指定布局文件,利用过程如下:

1659428932_62e8e044770818a1ee843.png!small?1659428933269

安装结果:

1659428950_62e8e056298588702440a.png!small?1659428950934

重启靶机后,恶意键盘布局文件被成功加载,弹出管理员权限cmd:

1659429000_62e8e0880fed382257f6b.png!small?1659429000907

安装过程需要管理员权限,且需要对相关注册表项进行更改,在防护措施不足的终端上容易被利用实现权限维持与持久化。

**04 **总结

键盘布局作为Windows下的特殊系统机制,其键盘布局DLL的生成与安装都有相应的工具与API,利用成本很低,是较好的权限维持方式。但是,键盘布局的利用方式同样存在其弊端,除了持久化的DLL需要放置在System目录下以外,还需要管理员权限实现安装,且行为容易被拦截。如果没有终端防护设备,通过这种方式实现的持久化与维*权还是能够达到很好的效果。

最后

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:


当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

因篇幅有限,仅展示部分资料,有需要的小伙伴,可以【扫下方二维码】免费领取:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/367749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

后端接收格式为x-www-form-urlencoded的数据

1.x-www-form-urlencoded是什么? x-www-form-urlencoded纸面翻译即所谓url格式的编码,是post的默认Content-Type,其实就是一种编码格式,类似json也是一种编码传输格式。form表单中使用 form的enctype属性为编码方式&#xff0…

【MySQL】5.7版本解压安装配置

前言 之所以使用解压版本,而不使用exe安装,因为exe的安装方式删除过于麻烦!!! 如果安装MySQL过程中,出错了或者想重新在来一把,删除mysql服务即可 sc delete mysql # 删除已经安装好的Mysql&a…

ifconfig不显示ipv4地址,ifconfig eth0 192.168.5.9失败

ifconfig eth0 192.168.5.9设置ip地址后,通过ifconfig仍然没有ipv4地址: 一、 执行ifup eth0启动eth0: ifconfig、ifup、ifdown :这三个命令的用途都是启动网络接口,不过,ifup 与 ifdown 仅就 /etc/sysconfig/network-…

【数据结构】红黑树

红黑树一、红黑树的概念二、红黑树的接口2.1 插入三、验证四、源码一、红黑树的概念 红黑树也是一个二叉搜索树,他是通过对任何一条从根到叶子的路径上各个结点着色方式的限制,最长路径长度不超过最短路径长度的 2 倍保持近似平衡。他在每个节点添加了一…

华为OD机试题,用 Java 解【勾股数元组】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

骨传导耳机靠谱吗,骨传导耳机的原理是什么

很多人刚开始接触骨传导耳机时都会具有一个疑问,骨传导耳机是不是真的靠谱,是不是真的不伤害听力?骨传导耳机传输声音的原理是什么? 下面就给大家讲解一下骨传导耳机传输声音的原理以及骨传导耳机对听力到底有没有伤害。 骨传导…

Python编写GUI界面,实现小说下载器

嗨害大家好鸭&#xff01;我是小熊猫~思路一、数据来源分析二. 代码实现步骤代码实现一、单章小说下载二、整本小说下载三、多线程采集四、采集排行榜所有小说五、搜索小说功能六、GUI界面<center>**&#x1f447;问题解答 源码获取 技术交流 抱团学习请联系&#x1f…

【蓝桥集训】第七天——并查集

作者&#xff1a;指针不指南吗 专栏&#xff1a;Acwing 蓝桥集训每日一题 &#x1f43e;或许会很慢&#xff0c;但是不可以停下来&#x1f43e; 文章目录1.亲戚2.合并集合3.连通块中点的数量有关并查集的知识学习可以移步至—— 【算法】——并查集1.亲戚 或许你并不知道&#…

华为OD机试题,用 Java 解【喊 7 的次数重排】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…

大数据开发 - Java入门2

目录Java基础知识注释关键字常量标识符测试题回顾Java基础知识 注释 对程序的解释说明 分类&#xff1a; 单行注释&#xff1a;// 对本行后面的内容进行注释多行注释&#xff1a;/*解释内容 */文档注释 &#xff1a;/** 注释内容*/ --用于产生帮助文档&#xff0c;也有多行注…

高通平台开发系列讲解(SIM卡篇)SIM卡基础概念

文章目录 一、SIM卡基本定义二、卡的类型三、SIM卡的作用三、SIM卡基本硬件结构四、SIM卡的内部物理单元五、卡文件系统沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍SIM的相关组件。 一、SIM卡基本定义 SIM卡是一种智能卡(ICC Card/UICC Card) SIM…

在线客服系统接入网站会员,绑定会员ID,展示会员昵称头像,传递手机号等扩展字段【唯一客服】...

在客服系统聊天链接里&#xff0c;可以带上自己网站的会员信息&#xff0c;例如&#xff1a;昵称、头像、手机号等 具体使用方式如下 聊天链接中增加以下参数&#xff1a; visitor_id: 自有会员visitor_name: 自有会员名称avator: 自有会员头像lang: 多语言 cn 中文 &#xff0…

链接服务器查询导致的阻塞

背景客户反馈数据库在上午10点时出现严重阻塞&#xff0c;阻塞源头会话在等待OLEDB&#xff0c;没有见过这个等待类型&#xff0c;请我们协助分析。现象登录SQL专家云&#xff0c;进入趋势分析&#xff0c;下钻到10点钟的活动会话&#xff0c;看到发生了两次严重的阻塞。转到活…

指针的进阶【上篇】

文章目录&#x1f4c0;1.字符指针&#x1f4c0;2.指针数组&#x1f4c0;3.数组指针&#x1f4bf;3.1.数组指针的定义&#x1f4bf;3.2. &数组名VS数组名&#x1f4bf;3.3.数组指针的使用&#x1f4c0;1.字符指针 int main() {char ch w;char* pc &ch;// pc就是字符指…

数据结构之顺序表篇

一、顺序表概念 二、顺序表各类接口实现 *顺序表初始化 **顺序表销毁 ***顺序表插入操作 ****顺序表删除操作 *****顺序表查找操作 ******顺序表实现打印操作 三、顺序表整体实现源码 *SeqList.h **SeqList.c ***test.c 一、顺序表概念 讲顺序表之前先引入线性表概念&#xff…

可视化服务编排在金融APP中的实践

本文重点介绍了京东金融APP在BFF层实践过程中遇到的问题&#xff0c;并引出可视化服务编排在金融APP中的落地实践&#xff0c;其中重点介绍了可视化服务编排系统的核心功能及实现。 可视化服务编排系统已经稳定支持了金融APP从去年618到现在的所有发版迭代&#xff0c;对人效提…

Apache ActiveMQ安装和使用

文章目录Apache ActiveMQ安装和使用 环境下载安装配置启动登录Apache ActiveMQ安装和使用 环境 Ubuntu20.04 下载 官网&#xff1a;https://activemq.apache.org/download-archives 如下载5.14.4版本&#xff0c;apache-activemq-5.14.4-bin.tar.gz&#xff0c;测试过没问题…

分布式算法 - 一致性Hash算法

一致性Hash算法是个经典算法&#xff0c;Hash环的引入是为解决单调性(Monotonicity) 的问题&#xff1b;虚拟节点的引入是为了解决 平衡性(Balance) 问题。一致性Hash算法引入在分布式集群中&#xff0c;对机器的添加删除&#xff0c;或者机器故障后自动脱离集群这些操作是分布…

MySQL索引类型及原理?一文读懂

一、什么是MySQL索引&#xff1f; MySQL索引是一种数据结构&#xff0c;用于提高数据库查询的性能。它类似于一本书的目录&#xff0c;通过在表中存储指向数据行的引用&#xff0c;使得查询数据的速度更快。 在MySQL中&#xff0c;索引通常是在表上定义的&#xff0c;它们可以…

本地新创建的项目,关联/上传到码云

以下示例以mac为例&#xff0c;window将相关步骤改为windows对应的操作即可1、打开终端&#xff0c;通过终端命令 cd 切换到新建的本地项目目录下&#xff0c;如&#xff1a;&#xff08;/Users/wangcongming/Documents/TuoTuo/mobile_acitvity 为我的新建项目地址&#xff09;…