Dll注入:注册表注入
在系统中每一个进程加载User32.dll时,会受到DLL_PROCESS_ATTACH通知,当User32.dll对其进行处理时,会取得注册表键值HKEY_LOCAL_MACHINE\Software\Microsoft\windowsNT\CurrentVresion\Windows\AppInit_Dlls,并调用LoadLibrary来载入这个字符串中指定的每个DLL。被调用的DLL会在系统调用它们的DllMain函数,并将参数fdwReason的值设为DLL_PROCESS_ATTACH时,对自己进行初始化。所以我们在这个键值中添加我们的Dll路径,即可实现注入。
注入流程:
打开注册表键值如下:
HKEY_LOCAL_MACHINE\SoftWare\MicroSoft\Windows NT\CurrentVersion\Windows\
1.在上面的注册表项中操作 AppInit_DLLs 键值,在该键值中添加自己的DLL的全路径加dll名,多个DLL以逗号或者空格分开(因此在文件名中应该尽量不要存在空格),该键值只有第一个dll文件名可以包含路径,后面的都不能包含,因此我们最好将dll放在系统路径 下,这样就可以不用包含路径也能被加载了。
2.在该注册表项中添加键值 LoadAppInit_DLLs ,类型为 DWORD,并将其值置为 1 .

注意:
1.AppInit_DLLs是一个REG_SZ类型,在这里写入一个DLL的文件名或是一组DLL的文件名。如果写入的是一组DLL文件名,那么中间要用逗号或者是空格分隔。由于在这里使用空格分隔文件名,因此一定要避免在DLL文件名中包含空格。第一个DLL的文件名可以包含路径,但其他DLL包含的路径则将被忽略。因此应该将多个DLL放到Windows系统目录为妙,这样就不必指定路径了。
2.由于被注入的DLL是在进程生命期的早期被载入(User32.dll),因此在dll实现中所调用的函数应该被慎重考虑,当然,调用Kernel32.dll是可以的,但其他dll函数可能会导致问题,甚至会蓝屏。
方法比较简单,调用了USER32.dll 的进程都会被注入。可控性不强。
#include "stdafx.h"
#include <Windows.h> #define DSTKEY L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Windows" BOOL RegInject(WCHAR* DllFullPath);
int main()
{
WCHAR DllFullPath[MAX_PATH] = L"C:\\Dll.dll";
BOOL bOk = RegInject(DllFullPath);
if (bOk)
{
printf("Registry inject success!\n");
}
else
{
printf("Registry inject fail!\n");
}
getchar();
getchar();
return ;
return ;
} //
//利用AppInit_Dlls键值会被user32.dll调用LoadLibrary所加载
//
BOOL RegInject(WCHAR* DllFullPath)
{ BOOL bOk = FALSE;
HKEY hKey = NULL;
BYTE DllPath[MAX_PATH] = { }; printf("RegInject Enter...\r\n"); if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,DSTKEY,,KEY_ALL_ACCESS,&hKey) != ERROR_SUCCESS)
{
printf("RegOpenKeyEx Error!\n");
goto Exit;
} memcpy((void*)DllPath, DllFullPath, _tcslen(DllFullPath)* + ); if (RegSetValueEx(hKey,L"AppInit_DLLs",,REG_SZ,DllPath, (_tcslen(DllFullPath) + ) * sizeof(TCHAR)) != ERROR_SUCCESS)
{
printf("RegSetKeyValue Error!\n");
goto Exit;
} DWORD dwValue = ; if (RegSetValueEx(hKey,L"LoadAppInit_DLLs",,REG_DWORD,(BYTE*)&dwValue,sizeof(dwValue)) != ERROR_SUCCESS)
{
printf("RegSetKeyValue Error!\n");
goto Exit;
} printf("RegInject Exit...\r\n");
bOk = TRUE; Exit:
if (hKey)
RegCloseKey(hKey);
return bOk; }
这个代码没有完善,没有处理好,如果该键值里面已经有值得情况,也没有写清理函数。
参考:这个帖子比我写的好。
http://blog.csdn.net/programmingring/article/details/18954193
Dll注入:注册表注入的更多相关文章
- Dll注入技术之注册表注入
DLL注入技术之REG注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EX ...
- C# dll 在注册表中寻找
“{7713F78A-44DE-42BA-A1F6-3FB0BD6CA63B}”就是该Dll的唯一ID啦,每一个Dll文件都会不一样的. 但是,问题又来了,怎么样知道它的唯一ID呢?其实很简单,那就是 ...
- advapi32.dll kernel32.dll 中的两套注册表API
日前遇到一件事:WebBrowser中的网页会用到一个“大众”ActiveX控件,为了保证兼容性以及和其它程序互不干扰,我们采用这样一种方案: 1. 我们的软件会自带该控件: 2. 如果系统中已注册有 ...
- c# dll自动注册
在网上看到一个c# dll自动注册的文章,我测试了一下,可用. 下面是具体代码 [DllImport("Ry4SCom.dll")] public static extern in ...
- DLL注入之注册表
0x00 唠叨 编写本系列文章纯属为了系统学习DLL注入的方法,所以很多方法可能已经过时,希望各位看官勿喷.当然若有更好的方法,希望不腻赐教.若本文有任何错的地方,也希望各位指正.谢谢! 0x01 适 ...
- 后门及持久化访问3----进程注入之AppInit_DLLs注册表项
进程注入之AppInit_DLLs注册表项 User32.dll被加载到进程时,会获取AppInit_DLLs注册表项,若有值,则调用LoadLibrary() API加载用户DLL.只会影响加载了u ...
- 后门及持久化访问2----进程注入之AppCertDlls 注册表项
代码及原理介绍 如果有进程使用了CreateProcess.CreateProcessAsUser.CreateProcessWithLoginW.CreateProcessWithTokenW或Wi ...
- Spring 的注册与注入
之前和同学老是爱混淆注册与注入.今天再看一遍感觉多了一些理解. 注册就是声明bean.就是让spring能够找到这个bean服务. 注入就是把bean(A)加入到另一个bean(B)的属性中.让另外一 ...
- 安全之路 —— 借助DLL进行远程线程注入实现穿墙与隐藏进程
简介 大多数后门或病毒要想初步实现隐藏进程,即不被像任务管理器这样典型的RING3级进程管理器找到过于明显的不明进程,其中比较著名的方法就是通过远程线程注入的方法注入将恶意进程的DLL文 ...
随机推荐
- gitlab 502解决方案
gitlab突然出现502 尝试gitlab-ctl restart.gitlab-ctl reconfigure 无效. 之后做法: #查看git日志 gitlab-ctl tail发现日志报错:端 ...
- Tensorflow函数——tf.placeholder()函数
tf.placeholder()函数 Tensorflow中的palceholder,中文翻译为占位符,什么意思呢? 在Tensoflow2.0以前,还是静态图的设计思想,整个设计理念是计算流图,在编 ...
- Codeforces Round #518 (Div. 2) D(计数DP)
#include<bits/stdc++.h>using namespace std;const long long mod=998244353;int n;int a[100007];l ...
- CodeForces 118C 【模拟】
思路: 枚举0-9之间的数,然后判断. 然后一鼓作气打成了大模拟....我日啊... 心疼自己. #include <bits/stdc++.h> using namespace std; ...
- [Xcode 实际操作]五、使用表格-(1)使用UITableView制作简单表格
目录:[Swift]Xcode实际操作 本文将演示表格视图的使用方法. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit //首先添加两个协 ...
- Lotus Notes 学习笔记
这是一个学习关于如何使用Lotus Notes的Agent功能来实现自动化办公的学习笔记. 一. 介绍 Lotus Notes/Domino 是一个世界领先的企业级通讯.协同工作及Internet/I ...
- 解决运行Robot Framework报‘’ascii’错误
在Python27\Lib\site-packages中新建‘sitecustomize.py’,内容如下: #coding=utf8import sysreload(sys)sys.setdefau ...
- .netcore中无法使用System.Drawing --解决方案
问题重现: 无法正常使用 解决方法: 安装System.Drawing.Common的NuGet就能正常使用了 操作之后: 这个是.netcoe中的解决办法,.net framework解决方案中添 ...
- POJ2945 Find the Clones trie树
建一颗$trie$树(当然你哈希也资瓷),边插边更新,看看搜到最底时有多少个字符串,然后更新. #include<cstdio> #include<iostream> #inc ...
- Spark (Python版) 零基础学习笔记(二)—— Spark Transformations总结及举例
1. map(func) 将func函数作用到数据集的每个元素,生成一个新的分布式的数据集并返回 >>> a = sc.parallelize(('a', 'b', 'c')) &g ...