文章目录[隐藏]
1、注册表注入的特性是可以在程序启动的时候注入,注入到其他程序还没有初始化完的的时候执行自己的代码
2、通过注册表的方式来实现DLL注入,只需要针对特定的注册表项进行修改即可
3、如果被注入的进程是64位进程,则注入的DLL也需要是64位的,同理,注入32位的进程也需要是32位的DLL。
4、注入64位系统上的32位进程
1) 将被注入的DLL名称填入到AppInit_DLLs注册表项:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs
2) 并将LoadAppInit_DLLs注册表项的值修改为1:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs
5、注入64位进程
“注入到64位进程”和“注入64位系统上的32位进程”的步骤类似,区别在于:
1). 注册表位置不一样,注入64位进程的注册表分别位于:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs
2). 被注入DLL需要是64位版本。
6、注入原理:
当系统的User32.dll被加载到一个新的进程时,会收到DLL_PROCESS_ATTACH通知,User32.dll在该通知处理过程中读取AppInit_DLLs注册表值,并调用LoadLibrary来加载该项中指定的每个dll。
7、优劣:
被注入的目标进程必须使用了User32.dll
基于GUI的程序都会使用这个DLL文件,而命令行程序一般不会加载User32.dll,所以无法通过这种方式被注入。
8、解决方案
在dll 里判断进程
注入DLL源码:
.版本 2
.支持库 EThread
.程序集 程序集1
.子程序 _启动子程序, 整数型, , 请在本子程序中放置动态链接库初始化代码
hook ()
_临时子程序 () ' 在初始化代码执行完毕后调用测试代码
返回 (0) ' 返回值被忽略。
.子程序 _临时子程序
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
.子程序 hook, , 公开
.如果真 (进程_ID取进程名 (进程_取自进程ID ()) = “calc.exe”)
启动线程 (&jiekou, , )
.如果真结束
.子程序 jiekou
载入 (窗口1, , 真)
------------------------------------窗口1源码:---------
.版本 2
.程序集 窗口程序集_窗口1
.子程序 _按钮1_被单击
信息框 (“注册表注入DLL 成功”, 0, , )
易语言注册表注入主程序:
.版本 2 .程序集 集_注册表注入 .子程序 注册表注入, 逻辑型 .参数 注入DLL, 文本型, , 注入的DLL 的路径 .局部变量 AppInit_DLLs值, 文本型 ' 检测一下AppInit_DLLs下是否有DLL AppInit_DLLs值 = 取文本注册项 (#本地机器, “SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs”, ) .如果真 (AppInit_DLLs值 ≠ “”) 信息框 (“已存在注入的DLL,请先卸载”, 0, , ) 返回 (假) .如果真结束 ' 写入注册表中注入的DLL 写注册项 (#本地机器, “SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs”, 注入DLL) AppInit_DLLs值 = 取文本注册项 (#本地机器, “SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs”, ) .如果真 (AppInit_DLLs值 ≠ 注入DLL) 写注册项 (#本地机器, “SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs”, “”) 信息框 (“注册注册表失败”, 0, , ) 返回 (假) .如果真结束 ' LoadAppInit_DLLs改为1 写注册项 (#本地机器, “SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs”, 1) 返回 (真) .子程序 卸载注册表注入, 逻辑型 .局部变量 AppInit_DLLs值, 文本型 写注册项 (#本地机器, “SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs”, “”) 写注册项 (#本地机器, “SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs”, 0) ' 检测一下AppInit_DLLs下是否有DLL AppInit_DLLs值 = 取文本注册项 (#本地机器, “SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs”, ) .如果真 (AppInit_DLLs值 ≠ “”) 信息框 (“卸载注册表注入失败,请手动卸载!”, 0, , ) 返回 (假) .如果真结束 返回 (真)
教程下载:
百度网盘链接:https://pan.baidu.com/s/158ikKVjIwaoF4438MG4fhA
提取码:加QQ群:521068947 群文件下载
资源教程交流①群:521068947
511遇见QQ: 272586593