1.dll注入&代码注入 学习总结
2.Windows系统下代码注入方案
3.dnf注入器怎么写
4.实现Windows进程注入的句柄句柄7种新方法
dll注入&代码注入 学习总结
本文为看雪论坛优秀文章,作者ID:pyikaaaa
思路:在目标进程中申请一块内存并向其中写DLL路径,注入然后调用CreateRemoteThread,源码在自己进程中创建远程线程到目标进程,访问在目标进程中创建一个线程。句柄句柄使用“LoadLibrary()”函数作为线程的注入搭建源码跟官方源码启动函数,来加载待注入的源码DLL文件,LoadLibrary()参数是访问存放DLL路径的内存指针。这时需要目标进程的句柄句柄4个权限(PROCESS_CREATE_THREAD, PROCESS_QUERY_INFORMATION, PROCESS_VM_OPERATION, PROCESS_VM_WRITE)。
RtlCreateUserThread调用NtCreateThreadEx,注入这意味着RtlCreateUserThread是源码NtCreateThreadEx的一个小型封装函数。
总结:openprocess获得目标进程句柄,访问getprocaddress获得loadlibrary地址,句柄句柄getprocaddress获得RtlCreateUserThread地址,注入获得dll文件路径和大小,源码virtualalloc在目标进程中开辟路径大小的空间,writeprocess写dll路径名进内存,bStatus = (BOOL)RtlCreateUserThread(hProcess, NULL, 0, 0, 0, 0, 0, LoadLibraryAddress, lpBaseAddress, &hRemoteThread, NULL);
NtCreateThreadEx总结:openprocess获得目标进程句柄,getprocaddress获得loadlibrary地址,getprocaddress获得NtCreateThreadEx地址,人机脚本源码获得dll文件路径和大小,virtualalloc在目标进程中开辟路径大小的空间,writeprocess写dll路径名进内存,利用NtCreateThreadEx进行dll注入。
以上三种远程线程注入函数的区别:CreateRemoteThread和RtlCreateUserThread都调用NtCreateThreadEx创建线程实体。RtlCreateUserThread不需要csrss验证登记,需要自己结束自己,而CreateRemoteThread不一样,不用自己结束自己。线程函数不由createthread执行,而是kernal!baseThreadStart或者kernal!baseThreadInitThunk执行,结束后还会调用exitthread和rtlexituserthread结束线程自身。
ZwCreateThreadEx与CreateRemoteThread或RtlCreateUserThread或NtCreateThreadEx用法类似,也是创建远程线程实现注入。
反射式dll注入:在别人的内存里调用自己编写的dll导出函数,自己dll导出函数里实现自我加载(加载PE的整个过程),少了使用LoadLibrary的过程。反射式注入方式并没有通过LoadLibrary等API来完成DLL的装载,DLL并没有在操作系统中“注册”自己的牛股共振源码存在,因此ProcessExplorer等软件也无法检测出进程加载了该DLL。
LoadRemoteLibraryR核心代码总结:在自己进程内存中heapalloc,将dll文件readfile进heapalloc出的内存中,openprocess获得进程句柄。LoadRemoteLibraryR函数获得dll入口函数的地址,并且利用远程线程注入rtlcreateuserprocess实现对dll入口函数的调用。
{ 获得dl文件的入口点偏移:GetReflectiveLoaderOffset(lpBuffer); //lpbuffer:堆内存的指针,指向存有dll文件的堆内存空间
为映像分配内存virtualalloc,writeprocessmemory映像写进目标进程内存,函数真实地址是分配的内存首地址加上函数在dll文件中的偏移。
远程线程函数注入call}
Windows系统下代码注入方案
木马和病毒的隐蔽性很大程度上决定了它们的效力。它们本质上是执行代码,采用独立进程的方式可能暴露,因此考虑将代码注入到其他进程中,利用环境和资源执行。远程注入技术广泛应用于木马、病毒,以及防病毒软件和软件调试中。下面介绍DLL注入的bs底部指标源码实现方法。
DLL注入通过加载DLL到目标进程,让其中的代码自动转化为对应进程的地址。这一特性源于DLL加载过程,它使用自身进程中的资源和地址空间。要解决代码执行问题,可通过创建远程线程加载DLL代码。具体步骤如下:使用CreateRemoteThread在目标进程中创建线程,将DLL代码写入DLLMain入口函数中,通过LoadLibrary作为线程回调函数加载DLL。因为位程序中,kernel.dll的基地址一致,导出函数在不同进程中的地址也相同,解决了硬编码地址问题。若需在不同进程间传递字符串,可先在远程进程申请内存,写入目标字符串,再传递首地址。
卸载DLL时,通过枚举进程模块,android源码分析网站查找DLL并获取句柄,调用FreeLibrary卸载。步骤包括创建ToolhelpSnapshot,枚举模块并比较名称,获取句柄后创建远程线程调用FreeLibrary。
无DLL注入采用类似方法,创建远程线程执行代码,解决地址转换问题。注入代码需自己加载目标函数,如使用LoadLibrary动态加载user.dll中的MessageBox函数。
最后,实现代码包括加载、执行函数的回调,并通过写入远程进程内存、创建远程线程来注入代码。卸载DLL时同样需找到句柄后执行卸载操作。这种方式实现了木马、病毒隐蔽执行代码的功能,同时提供了安全的注入与卸载机制。
dnf注入器怎么写
先建一个窗口 两个按钮 一个加载一个卸载
代码 ↓
.版本 2
.支持库 spec
.程序集 窗口程序集1
.程序集变量 输入法句柄
.程序集变量 目录
.子程序 _按钮1_被单击
.局部变量 输入法, 输入法类
写到文件 (“C:\WINDOWS\system\SouGoo.ime”, #shurufa)
输入法句柄 = 输入法.安装 (“C:\WINDOWS\system\SouGoo.ime”, “DNF输入法”)
调试输出 (输入法句柄)
.如果真 (输入法句柄 ≠ 0)
输入法.设置注入 (“C:\WINDOWS\system\SouGoo.ime”, “D:\My Documents\E\cds.dll”)
延时 ()
信息框 (“加载成功” + #换行符 + “请切换输入法呼出外挂” + #换行符 + “呼不出多呼几次”, #信息图标, “请切换输入法呼出外挂”)
.如果真结束
.子程序 _按钮2_被单击
输入法.清除注入 (“C:\WINDOWS\system\SouGoo.ime”)
输入法.卸载 (输入法句柄)
.子程序 __启动窗口_创建完毕
.如果 (进程是否存在 (“DNF.exe”))
返回 ()
.否
信息框 (“请先到仓库后在开启外挂”, #错误图标, “发现错误”)
结束 ()
我只知道这个输入法注入的写法 也是网上学的 但是这个现在都好用了 TX现在封的太厉害 呵呵 希望对你有所帮助
实现Windows进程注入的7种新方法
在探讨新型注入方法中,@hexacorn上周发布的文章成为了焦点,提出了7种通过"粉碎式攻击"实现代码注入或重定向的创新方式。本文旨在深入解析这7种方法,提供实例,并强调它们的可行性和适用性。我们将特别关注使用“Edit”和“Rich Edit”控件的方法,以及SysListView和SysTreeView的方法。
首先,关于Rich Edit控件,进行新型注入尝试时,可以通过遍历所有窗口,如EnumWindows,从窗口句柄中检索类的名称,然后将字符串的开始部分与“RICHEDIT”进行比较。除了这种方法,手动查找控件的FindWindow或FindWindowEX功能同样有效。在Windows 评估版环境下,我们以Wordpad为例,测试了此过程,实现方法仅需两行代码。
方法1:WordWarping
利用EM_SETWORDBREAKPROC消息设置Edit或Rich Edit空间的文本包装器回调函数,通过模拟键盘输入触发回调执行。这种注入方式早在年前就被用于提升特权。尽管没有特定的CVE编号,但它常被用于利用McAfee、VirusScan、Sygate Personal Firewall Pro、WinVNC、Dameware等产品的漏洞。示例中,利用WordPad实现注入,步骤如下:获取主窗口、找到Rich Edit控件、尝试获取Wordwrap函数地址、获取进程ID、打开进程、为Payload分配内存、写入内存、更新回调过程、模拟输入触发Payload、恢复原始功能并释放内存。
方法2:Hyphentension
发送EM_GETHYPHENATEINFO消息获取有关Rich Edit空间Hyphenation信息,该方法假定指向结构的指针是本地内存,因此需在使用SendMessage或PostMessage前,通过VirtualAllocEx分配内存。虽然无法在写字板中实现,但在如Microsoft Word这样的文本处理器中可能可行。
方法3:AutoCourgette
根据MSDN信息,EM_SETAUTOCORRECTPROC消息支持的最低版本是Windows 8,因此较新。由于写字板不支持自动校正,无法实现该方法的利用。理论上,该方法在功能丰富的文字处理器中可能适用。
方法4:Streamception
当Rich Edit空间接收到EM_STREAMIN消息时,利用EDITSTREAM结构中提供的信息将数据流传入或传出控件。pfnCallback字段指向Payload,确保错误指示后,内容仍被删除,方法可行但不破坏缓冲流。此方法可以正常运行,但需进一步调查解决缓冲流问题的方法。
方法5:Oleum
在研究后发现,EM_SETOLECALLBACK可能存在注入可能性,但实际操作中遇到问题:EM_GETOLECALLBACK消息未记录良好,LPARAM指向非本地内存时发送会导致崩溃,且返回的指针类型不正确。因此,未采用此方法,而是通过保存IRichEditOle.lpVtbl堆内存,将其复制到Payload地址,使用GetClipboardData作为方法。
方法6:ListPlanting
利用LVM_SORTGROUPS、LVM_INSERTGROUPSORTED和LVM_SORTITEMS消息自定义ListView控件,实现Payload触发。此方法存在调用回调函数为每一项的潜在问题,但可通过检查项目数量、添加或删除项目以及使用回调参数解决。
方法7:Treepoline
通过TVM_SORTCHILDRENCB消息自定义TreeListView排序,对每个项目执行Payload。需额外检查以避免执行多次实例。获取树列表根项目后,首先执行。
在探索这些方法后,我们提供了一个演示代码的链接,用于验证上述方法的实现。如需了解更多信息,请关注“嘶吼专业版”——Pro4hou。