windows DLL注入之注册表注入

windows DLL注入之注册表注入windows下的注入之注册表注入:1.概念介绍:注入与Hook:注入与hook经常被人们混淆,其实注入和hook是两种windows下的编程技术(当然,其他平台也有相关的技术),由于在安全编程中,两项技术经常被同时结合起来使用,所以常常导入混淆。今天我们就谈谈windows下的注入技术。1.1Hook:hook的中文名叫钩子,hook是程序设计中最为灵活多变的技巧之一,hook对指…

大家好,又见面了,我是你们的朋友全栈君。

windows下的注入之注册表注入:

1.概念介绍:

注入与Hook:注入与hook经常被人们混淆,其实注入和hook是两种windows下的编程技术(当然,其他平台也有相关的技术),由于在安全编程中,两项技术经常被同时结合起来使用,所以常常导入混淆。今天我们就谈谈windows下的注入技术。

1.1 Hook:
hook 的中文名叫钩子,hook 是程序设计中最为灵活多变的技巧之一,hook对指定的进程 API 设置钩子,当指定的API 在调用的情况下,执行自己定义的钩子回调函数,同样实现的代码逻辑的改变(代码逻辑改变或者代码控制权的获取是黑客编程的根本目的,代码控制权被恶意代码获取,就会执行恶意代码中的逻辑),hook 我自己更愿意理解为一种机制,类似于中间人攻击(第三个人在通信的甲方与乙方之间,获取了通信的内容,并构造了假消息发送给甲或者乙方,从而对甲方或者乙方进行欺骗),hook技术也分为很多种(具体以后介绍)。windows中,hook有两种含义:

1.1.1 windows 系统提供的消息 hook 机制
​ 由系统提供的消息钩子机制是由一系列的 API 提供的一种服务,这个系列的 API 可以完成对大多数应用程序的关键节点的函数API 或者消息做 hook 操作,为此,windows 为美中 hook 类型维护了一个钩子链表,我们可以通过一个系统 API 来完成对整个系统中所符合此机制的函数 API 或者消息 hook。

1.1.2 自定义的 hook 编程技巧
自定义的 hook 编程技巧是不使用 windows 下的 API, 在基于特定系统结构、文件结构、汇编语言的一种高级技术。
以下用一个表格来对个中hook(按照技术本质,不按照技术实现的具体细节)做一个分类:

windows提供的消息hook
hook 技术
自定义hook inline Hook
EAT hook(用户层hook),IAT hook(用户层hook),SSDT hook(内核层hook)

以上是对hook的介绍,具体的技术实现其他博文中讲解。

2.注入:
注入(windows下的注入多指的是DLL的注入,也有代码片段的注入),DLL注入指的是将一个DLL文件注入到目标进程的进程空间(空间大小与运行平台有关),windows 32平台下,进程的虚拟内存空间通常是4GB,高2GB是系统内核空间(使用3ring API无法操作,需要提权技术),低2GB是用户态空间,用户态空间是程序员使用 3ring API 可以进行操作。DLL 注入技术最开始是用来满足程序员其他第三方的应用程序进行功能扩展的愿望,通俗的说:就是别人开发的程序,自己想要在这个程序上添加一下额外的功能,那么自己写一个 DLL 文件,DLL中实现了自己想要的功能,然后在程序运行的时候加载这个 DLL ,并调用里边的方法,使得原来的程序功能得到扩展。但是,技术出发点是好的,慢慢就会被别有用心的人用来做坏事,在 DLL 中写恶意代码,注入到计算机上的其他进程,结合 hook 技术,可以干很多的坏事。

2.1 :DLL 注入的几种技巧或者方法:
a) 注册表注入
b) ComRes 注入
c) APC 注入
d) 消息钩子注入
e) 远程线程注入
f) 依赖可信进程注入
g)劫持进程创建注入
h) 输入法注入

3 .DLL注册表注入技术的具体实现案例:

3.1 注册表注入的原理:
在windows系统中,整个系统的配置都保存在了注册表中,我们通过修改注册表中的配置来改变系统的行为,也可以改变某个进程的某些行为。当windwos中创建的进程,当User32.dll 被映射到这个进程中时,User32dll会收到 DLL_PROCESS_ATTACH通知,当User32.dll对这个通知进行处理的时候,会读取注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows 对应的值,并且调用 Loadlibrary 来载入这个字符串中指定的每个 DLL的时候,会调用每个DLL中的DLLMain函数,并将参数 fdwReason 的值设置为 DLl_PROCESSS_ATTACH,这样每一个DLL就能对自己进行初始化。由于注册表项中的DLL 在进程创建的早期就被User32.dll加载到了进程中,User32.dll不会检测每个DLL的载入是否成功,所以调用这些DLL中的函数可能会出问题。

3.2 实验步骤:
在windows桌面,使用 win + r:打开快速运行,输入 regedt32,回车打开注册表:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-46TOdccb-1573112579696)(C:\Users\bsm\AppData\Roaming\Typora\typora-user-images\1573091871950.p在这里插入图片描述ng)]

进入到注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uyLxcxrr-1573112579698)(C:\Users\bsm\AppData\Roaming\Typora\typora-user-images\1573107745472.png)]在这里插入图片描述

修改注册表后,重启系统,随意打开一个进程,这里我打开LordPE ,使用PCHunter查看进程空间的模块情况:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n3a4AivQ-1573112579698)(C:\Users\bsm\AppData\Roaming\Typora\typora-user-images\1573108312734.png)]在这里插入图片描述

至于Dll模块中的代码,可以自行发挥想象。

3.3 注意事项:
在众多的DLL注入方法中,使用注册表注入是最简单的一种方式。但是有一点要注意:
被注入的进程时64位,那么注入的DLL也应该是64位,32位对应32位。
注入32位进程,应该修改的注册表键为:

# 将下面注册表的键对应的值设置为 1
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs 
# 将下面注册表的键对应的值设置为要注入的 DLL的路径
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs 

注入64位进程,应该修改的注册表键为:

# 将下面注册表的键对应的值设置为 1
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\WindowsNT\CurrentVersion\Windows\AppInit_DLLs
# 将下面注册表的键对应的值设置为要注入的 DLL的路径
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\WindowsNT\CurrentVersion\Windows\LoadAppInit_DLLs

3.4 注册表注入的缺点:
a) 注册表注入的方法只能将DLL注入到使用了User32.dll的GUI程序中(GUI程序中大多使用了User32.dll)。CUI程序大多不使用User32.dll,所以就不能使用注册表注入。

使用了User32.dll的GUI程序中(GUI程序中大多使用了User32.dll)。CUI程序大多不使用User32.dll,所以就不能使用注册表注入。

b) 注册表注入的方法会将DLL注入到系统中所有使用了User32.dll的所有GUI进程。但是如果我们的DLL中有错误导致崩溃,那么会影响到被注入的所有进程。影响范围会很大。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145681.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • u盘越狱卡代码怎么办_使用爱思助手制作越狱U盘教程

    u盘越狱卡代码怎么办_使用爱思助手制作越狱U盘教程U盘越狱iPhone绕ID最新教程及各种坑解决,吐血之作(超详细超简单教程)-balenaEtcher-Checkm8-bootra1n这是安装多个苹果版本及虚拟机版本后成功的教程,由于资源上传到百度云盘下载只有几十KB,所以为了大家能够尽快的体验上苹果系统,文章中涉及的所有工具请大家加QQ群进行交流下载:1064543120一、工具下载准备一台Windows系统电脑准备一个>2G存储U盘下载群文件中balenaEtcher、Checkm8.info_iCloudBypass、bootr

    2025年12月11日
    2
  • Python冒泡排序算法及其优化「建议收藏」

    Python冒泡排序算法及其优化「建议收藏」冒泡排序所谓冒泡,就是将元素两两之间进行比较,谁大就往后移动,直到将最大的元素排到最后面,接着再循环一趟,从头开始进行两两比较,而上一趟已经排好的那个元素就不用进行比较了。(图中排好序的元素标记为黄色柱子)冒泡排序动图演示上python代码:defbubble_sort(items):foriinrange(len(items)-1):…

    2022年10月15日
    2
  • viper4android脉冲样本,V4A脉冲反馈样本第一弹 爽爆「建议收藏」

    煤油,积分3926,距离下一级还需1074积分NFS_359|煤油煤油,积分3926,距离下一级还需1074积分|6电梯直达发表于2015-1-218:14:34|只看楼主|只看大图|倒序浏览|阅读模式|收藏本帖NFS_359|煤油煤油,积分3926,距离下一级还需1074积分主题:19|帖子:1016|积分:3926该用户从未签到当前离线本帖最后由…

    2022年4月17日
    194
  • readprocessmemory函数分析_memory的用法及形式

    readprocessmemory函数分析_memory的用法及形式函数功能:该函数从指定的进程中读入内存信息,被读取的区域必须具有访问权限。函数原型:BOOLReadProcessMemory(HANDLEhProcess,LPCVOIDlpBaseAddress,LPVOIDlpBuffer,DWORDnSize,LPDWORDlpNumberOfBytesRead);参数:hProcess:进程句柄

    2022年10月4日
    4
  • A 星算法总结_数据结构与算法知识点总结

    A 星算法总结_数据结构与算法知识点总结A星算法总结A星算法FPGAEDA工具VPR布线器所采用的布线算法,面试滴滴的时候听说他们的路径规模用的也是A星算法,感觉这个算法还蛮厉害的,对这个算法进行一个总结。文章http://www.tuicool.com/articles/MJrYz26对这个算法用语言描述的很好,搬运下:  A星寻路算法显然是用来寻路的,应用也很普遍,比如梦幻西游。。。算法的思路很简单,就是在bfs的

    2022年9月1日
    2
  • msdos分区是什么_msdos_partition

    msdos分区是什么_msdos_partition硬盘分区及格式化本例要求熟悉硬盘分区结构,使用fdisk分区工具在磁盘/dev/vdb上按以下要求建立分区:采用默认的msdos分区模式1、第1个分区/dev/vdb1的大小为200MiB2、第2个分区/dev/vdb2的大小为2000MiB3、第3个分区/dev/vdb3的大小为1000MiB,完成分区后4、能够配置开机自动挂载/dev/vdb2分区…

    2022年8月11日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号