DLL注入之注册表】的更多相关文章

0x00 唠叨 编写本系列文章纯属为了系统学习DLL注入的方法,所以很多方法可能已经过时,希望各位看官勿喷.当然若有更好的方法,希望不腻赐教.若本文有任何错的地方,也希望各位指正.谢谢! 0x01 适用平台 windows NT/2000/XP/2003 0x02 原理 通过修改注册表键值:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs.将需要注入的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_ATTAC…
例如:     有一个游戏修改器:其中有一个按钮“自动打怪”:点击时游戏会实现相应的功能:     对于游戏程序来说,自动打怪操作本质上就是call调用一个函数:     但是修改器和游戏是两个独立的程序,游戏无法直接调用修改器中的函数:     可以考虑将修改器中的函数封装成一个dll,然后想办法将dll放到游戏的4gb空间,这样就可以了:     怎么想办法将dll放进目标程序的4gb空间中去,这就是dll注入的本质:…
1. Windows注册表简介 注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息.早在Windows 3.0推出OLE技术的时候,注册表就已经出现.随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统.但是,从Microsoft Windows 95开始,注册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用至今 0x1: 注册表的由来 在Wind…
Windows系统大量使用dll作为组件复用,应用程序也会通过dll实现功能模块的拆分.DLL注入技术是向一个正在运行的进程插入自有DLL的过程. Window下的代码注入 常见的Windows代码注入方法如下: 注册表注入 编译注册表中的AppInit_DLLs选项,凡是使用GUI的进程,都会读取AppInit_DLLs内容,加载这些Dll. Windows Hook注入 使用 SetWindowsHookEx.UnHkkkWindowsHookEx 来进行,为目标进程安装钩子,在注入dll中…
Window 系统错误代码 ERROR_SUCCESS,本博客中一律使用 NO_ERROR 代替.虽然 ERROR_SUCCESS 与 NO_ERROR 是完全等价的,都代表成功,但是后者却和其他错误代码一样,使用 ERROR 前缀,容易让人误认为是错误代码.而 NO_ERROR 意义很明显,就是无错误.还有另外一个宏 NOERROR 也表示成功,但是使用较少.Windows 系统错误代码的数据类型,其类型微软并没有具体说明.来自 advapi32.dll 中的注册表操作函数多使用 LONG 作…
原文转自 http://blog.csdn.net/tracyzhongcf/article/details/4076870 1.今天在使用RegSetValueEx时发现一个问题: RegSetValueEx(hKey, TEXT("test"), 0, REG_SZ, (LPBYTE)TEXT("test.dll"), 256); 向注册表的某位置写了一个test,键值为test.dll 程序运行时,按理说会自动去加载我的test.dll.(因为我手动去修改机器…
DLL注入技术之REG注入 DLL注入技术指的是将一个DLL文件强行加载到EXE文件中,并成为EXE文件中的一部分,这样做的目的在于方便我们通过这个DLL读写EXE文件内存数据,(例如 HOOK EXE文件中的API),或以被注入EXE的身份去执行一些操作等等.     REG注入原理是利用在Windows 系统中,当REG以下键值中存在有DLL文件路径时,会跟随EXE文件的启动加载这个DLL文件路径中的DLL文件.当如果遇到有多个DLL文件时,需要用逗号或者空格隔开多个DLL文件的路径. HK…
进程注入之AppInit_DLLs注册表项 User32.dll被加载到进程时,会获取AppInit_DLLs注册表项,若有值,则调用LoadLibrary() API加载用户DLL.只会影响加载了user32.dll的进程. HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsNT\CurrentVersion\Window\Appinit_Dlls 代码如下: #include #include using namespace std; int test…
“{7713F78A-44DE-42BA-A1F6-3FB0BD6CA63B}”就是该Dll的唯一ID啦,每一个Dll文件都会不一样的. 但是,问题又来了,怎么样知道它的唯一ID呢?其实很简单,那就是“逆向思维”. 我们可先注册这个Dll文件,然后到注册表的“HKEY_CLASSES_ROOT\CLSID”分支下“查找”Dll的名称或路径,就可以看到这个ID啦.…
日前遇到一件事:WebBrowser中的网页会用到一个“大众”ActiveX控件,为了保证兼容性以及和其它程序互不干扰,我们采用这样一种方案: 1. 我们的软件会自带该控件: 2. 如果系统中已注册有该控件的话,我们不用会我们的控件进行覆盖注册: 3. 不管怎么样,我们的程序都只会加载我们自带的控件.   要做到第3条,显然要HOOK控件位置有关的注册表项.因为之前在做播放器时使用过同样的手段来处理媒体解码器,所以其实并没有什么难度.但事实上却差点阴沟里翻船.   我一定确定以及肯定的是,我需要…
代码及原理介绍 如果有进程使用了CreateProcess.CreateProcessAsUser.CreateProcessWithLoginW.CreateProcessWithTokenW或WinExec 函数,那么此进程会获取HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\AppCertDlls注册表项,此项下的dll都会加载到此进程. Win7版本下没有"AppCertDlls"项,需自己创…
22.1 注入的一个例子(跨进程子类化窗口) ①子类化窗口可以改变窗口的行为,让发往该窗口的消息重新发到我们指定的过程来处理.但这种行为只能在本进程中(如A),对于从一个进程(如B)去子类化另一个进程(如A)时,会遇到无法跨越进程地址空间的边界问题. ②上图,进程B试图调用SetWindowLongPtr将进程A中的hWnd窗口过程,重新指定为MySubClassProc来处理(注意,MySubClassProc在进程B的地址空间中),而不是hWnd窗口的标准窗口处理过程.但因该行为是跨进程的,…
1. 使用钩子SetWindowHookEx注入时,设置钩子的代码必须和钩子回调函数在注入DLL中,并且调用CallNextHookEx时第一个参数必须为钩子的句柄,否则只有一个进程响应钩子. 2.关于App_Init_Dlls,注册表路径:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs] 在XP下只要AppInit_DLLs有值就会注入.而在win7下还必须设置LoadAp…
(源码作者:(HarmanySecurity)Stephen Fewer) 0x01  反射Dll注入的优点  1.反射Dll注入的主要优点是它没有以主机系统的任何方式(例如LoadLibrary和LoadLibraryEx)进行注册,因此在系统和进程级别上基本上都是不可检测的,并且反射DLL注入写入了较少的的shellcode,进一步降低被检测到的可能性.  1.在远程开发中使用反射DLL注入时,注入到宿主进程的Dll难以被反病毒的文件扫描器检测到,因为它从不会接触到磁盘,直接从内存中写入加载…
DLL注入技术,可以实现钩取API,改进程序,修复Bug. DLL注入指的是向运行中的其他进程强制插入特定的DLL文件. DLL注入命令进程自行调用LoadLibrary()API,加载用户指定的DLL文件. DLL(Dynamic Linked Library,动态链接库) DLL被加载到进程后自动运行DllMain()函数,用户把想执行的代码放到此函数,加载DLL时,代码会被执行. DLL注入的实现方法 创建远程线程(CreateRemoteThread()API) 使用注册表(AppIni…
三种方法:具体详见<逆向工程核心原理>. 1.创建远程线程CreateRemoteThread() 2.使用注册表AppInit_DLLs 3.消息钩取SetWindowsHookEx() 一.远程线程(注意将szPATH数组建在函数中会出现栈溢出,需要建立全局变量) #include "windows.h" #include "tchar.h" #pragma comment(lib, "urlmon.lib") HMODULE g…
在分析koadic渗透利器时,发现它有一个注入模块,其DLL注入实现方式和一般的注入方式不一样.搜索了一下发现是由HarmanySecurity的Stephen Fewer提出的ReflectiveDLL Injection. 由于目前互联网上有关这个反射式DLL注入的分析并不多,也没有人分析其核心的ReflectiveLoader具体是怎么实现的,因此我就在这抛砖引玉了. 0×00 引言 常规的DLL注入方式相信大家都很熟悉了,利用CreateRemoteThread这一函数在目标进程中开始一…
在注册DLL或者OCX的方法应该使用regsvr32.exe,使用得多了一定会觉得在cmd运行中写一长串东西很烦人吧!这里向大家介绍一种麻烦一次方便一生的方法.这个方法只要右击你想注册或者反注册的DLL或者OCX就可以了.他的原理是通过修改注册表使右击OCX或者DLL文件时出现注册和反注册的菜单项. 下面开始介绍这个方法: 注册DLL文件:开发HKEY_CLASSES_ROOT \Dllfile,新建项shell,再在其下新建Register.你会发现Register就是右击弹出的菜单名.再在其…
一.背景 目前,公司针对PR开发的一个插件需要发布到64位系统上.该插件包括一个prm格式的文件和若干个DLL文件.其中,prm文件需要复制到PR公共插件目录下,DLL需要复制到Windows系统目录中去,这样插件才能正常的工作.公司现在要求发布插件时制作一个安装包,让用户点击安装包后自动将插件相关文件拷贝到相应目录去.本来用inno setup来做一个安装包,顶多就是一个多目录安装的问题.但是,公司发布的插件只能应用在Win64位平台,而且要求通过读取注册表来确定具体的安装目录.这是背景,也正…
在一个监控相关的Java项目中,需要读取windows系统的注册表,搜索到使用 JRegistery 可以解决.代码如下: /** * @author digdeep@126.com */ public class RegstryUtil { //"HKEY_LOCAL_MACHINE" public static final RegistryKey LOCALMACHINE = RegistryKey.getRootKeyForIndex(RegistryKey.HKEY_LOCAL…
注册表,想起来了就学学,方便操作.无需把它当成重要学问,今日就学一波,作为了解. 一.注册表清理脚本 主要是删除临时文件,旧文件.并不能够删除无效的键 @echo off del/f/s/q %systemdrive%\*.tmp del/f/s/q %systemdrive%\*._mp del/f/s/q %systemdrive%\*.log del/f/s/q %systemdrive%\*.gid del/f/s/q %systemdrive%\*.chk del/f/s/q %sys…
注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息. 打开方式:1.开始>>运行.中输入regedit 回车 注册表是Windows程序员建造的一个复杂的信息数据库,它是多层次式的.在不同系统上注册表的基本结构相同.其中的复杂数据会在不同方式上结合,从而产生出一个绝对唯一的注册表. 注册表由键(或称“项”).子键(子项)和值项构成.一个键就是分支中的一个文件夹,而子键就是这个文件夹中的子文件…
尝试创建自定义事件日志时,将会收到“Requested registry access is not allowed(不允许所请求的注册表访问权)”错误消息 EventLog.CreateEventSource() 如果以普通用户身份登录计算机,并尝试使用 Microsoft Visual Studio .NET 创建自定义事件日志以注册事件,可能会收到以下错误消息: An unhandled exception of type 'System.Security.SecurityExceptio…
22.4 使用远程线程来注入DLL 22.4.1 概述 (1)远程线程注入是指一个进程在另一个进程中创建线程,然后载入我们编写的DLL,并执行该DLL代码的技术.其基本思路是通过CreateRemoteThread创建一个远程线程,并将LoadLibrary函数作为该线程函数来启动线程,同时将Dll文件名作为线程函数的参数传入.大致执过程如下:CreateRemoteThread()→LoadLibrary()→DllMain(). (2)核心函数:CreateRemoteThread 参数 说…
在你的工程名上右击 -> View ->Registry(视图 -> 注册表) 在你需要写注册表的主键下,例如我注册firefox插件的例子是: (1)右击HKEY_CURRENT_USER -> 新建 -> 键  :Software (2)右击Software -> 新建 -> 键:MozillaPlugins (3)右击MozillaPlugins  -> 新建 -> 键  :@abc/def (4)右击@abc/def -> 新建 ->…
最原始的COM组件调用过程(不使用注册表信息) 最近因为项目的关系开始研究COM组件了,以前都认为COM过时了,所以也没怎么接触. 现在好好补补课了. 一般调用COM都是通过注册表找到它的位置, 然后调用COM库的标准函数. 这些封装无疑使得我这个初学者无法了解里面到底做了什么, 而且注册表和COM库标准函数都是windows提供的, 但是COM这个思想是可以在Linux下实现的. 只要知道它的实现原理就行了. 因此我就试着用最基本的调用方法来使用COM组件, 以了解其调用过程和原理. 首先,我…
一.注册表的存储结构和数据类型 1.基本概念: Windows 7的注册表主要由“键”和“键值”构成,称HKEY为根键(RootKey),SubKey为子键. 键(Key):“位于左侧窗格如同文件夹图标一样的就是键”,类似于我的电脑中的文件夹. 键值(Value):“而在右侧窗格中一行行的选项,就称它为键值”,每个键值都有名称.类型.数据三项信息,名称的大小写不敏感. 2.数据类型: REG_SZ,REG_BINARY.DWORD\QWORD值.REG_MULTI_SZ,REG_EXPAND_S…
对于程序员来说,新建一个cpp文件是再频繁不过的事情了. 为了方便,我们习惯在桌面右键新建文件,而不是新建一个文本文档,然后修改后缀名. 百度谷歌查询了一下,终于知道如何添加注册表. 手痒,抽出时间用cpp写了一个程序,方便以后操作. 客户需求是永远无法满足的,经同学测试,陆续写了三个版本. 接下来直接贴代码~ 第一个版本,只能添加c.cpp.java三种后缀. /* * Author: Haipz * School: HDU * File Name: registry1.0.cpp */ #i…
DELPHI VS PASCAL(87)  32位Delphi程序中可利用TRegistry对象来存取注册表文件中的信息. 一.创建和释放TRegistry对象 1.创建TRegistry对象.为了操作注册表,要创建一个TRegistry对象:ARegistry := TRegistry.Create: 2.释放TRegistry对象.对注册表操作结束后,应释放TRegistry对象所占内存:ARegistry.Destroy. 二.指定要操作的键 操作注册表时,首先应指定操作的主键:先给属性R…