新型木马使用的“远程线程注入”技术

学习提速专享!AI工具全家桶免费用 限时购周边加赠Coding Plan Lite,解锁20+主流AI工具,写代码、查资料快人一步! 阅读详情

  木马隐藏自身的技术走过了隐藏文件、隐藏窗口、隐藏进程,到现而今“远程注入”技术的发展过程。

 隐藏文件,就是简单的将文件属性设置为“隐藏”而已,除此之外,再无别的保护手段了,在大部分用户对电脑操作不熟悉,安全软件厂商则刚开始探索市场的时代,这种简单自我保护的木马得以大行其道,利用这种手段制作的木马被统称为“第一代木马”。

 隐藏窗口,我们都知道,在Windows下运行的程序界面都被定义为“窗口”,程序通过这个途径与用户产生交互,每个完整的程序都必须拥有至少一个窗口,但是如果编写者将这个窗口在运行期间设置为“不可见”呢?这样一来,用户就不会察觉到这个程序在桌面上运行了,但是如果有一定经验的用户打开任务管理器,他就会因为发现系统里多出来的进程而产生怀疑。

 隐藏进程,是利用微软未公开的一个应用程序接口api函数“registerserviceprocess”将自身注册为“系统服务进程”,而恰巧Windows 9x中的任务管理器是不会显示此类进程的,结果就被病毒钻了空子,让“冰河”等木马在国内大部分普通用户的机器上安家落户。当然“隐藏进程”技术已经无效了,nt体系上的Windows 2000/xp/2003 等系统默认是显示所有进程的,包括系统服务的进程。


下面我们来重点讲解最新的木马隐藏技术----使用“远程注入”

 虽然现在使用“线程注入”的木马病毒和已经遍地开花了,但是从那个混沌时代经历过来的人都不会忘记首个采用“线程注入”的dll木马“广外幽灵”在当时所带来的恐惧,“线程注入”到底是种什么东西呢?下面就让我们来详细讲解一下。

 首先,用户可能不会了解“线程”(thread)的意思,而要讲解“线程”,就不能不先提到“进程”(process)的概念。许多刚接触计算机的用户无法理解“进程”是什么东西:常常听到高手说打开任务管理器关闭某某进程,但是一看到任务管理器列表里的一堆东西,头就大了。许多用户知道使用任务管理器关闭一些失去响应的任务,但是如果某个任务没有在“应用程序”列表里出现,用户就不知所措了。到底什么是“进程”呢?“进程”是指一个可执行文件在运行期间请求系统在内存里开辟给它的数据信息块,系统通过控制这个数据块为运行中的程序提供数据交换和决定程序生存期限,任何程序都必须拥有至少一个进程,否则它不被系统承认。

 进程从某一方面而言就是可执行文件把自身从存储介质复制在内存中的映像,它通常和某个在磁盘上的文件保持着对应关系,一个完整的进程信息包括很多方面的数据,我们使用进程查看工具看到的“应用程序”选项卡包含的是进程的标题,而“进程”选项卡包含的是进程文件名、进程标识符、占用内存等,其中“进程文件名”和“进程标识符”是必须掌握的关键,“进程标识符”是系统分配给进程内存空间时指定的唯一数字,进程从载入内存到结束运行的期间里这个数字都是保持不变的,而“进程文件名”则是对应着的介质存储文件名称,根据“进程文件名”我们就可以找到最初的可执行文件位置。

 任务管理器的“应用程序”项里列出来的“任务”,是指进程在桌面上显示出来的窗口对象,例如用户打开word 2003撰写文档,它的进程“winword.exe”会创建一个在桌面上显示的前台窗口,这个窗口就是任务管理器里看得见的“任务”了。并不是所有的进程都会在任务管理器里留下“任务”的,像qq、msn和所有后台程序,它们并不会在任务列表里出现,但是你会在进程列表里找到它们,如果要它们在任务列表里出现该怎么办呢?只要让它们产生一个在桌面上出现的窗体就可以了,随便打开一个好友聊天,就会发现任务列表里终于出现了qq的任务。因此,真正科学的终止程序执行方案是针对“进程”来结束程序的运行,而不是在任务列表里关闭程序,因为木马作者们是不会让自己的木马在任务列表里出现的,但是进程列表里一般人都是逃不过的。

 而“线程”,则是在一个进程里产生的多个执行进度实例,举个简单例子,一个网络文件传输程序如果只有一个线程(单线程)运作,那么它的执行效率会非常低下,因为它既需要从网络上读取文件数据,又需要把文件保存到磁盘,同时还需要绘制当前传输进度条,由于在代码的角度里这些操作只能一条条的顺序执行,程序就不能很好的做到在保存数据的同时绘制传输进度条,即使程序员将其勉强凑到一块执行,在用户方面看来,这个程序的响应会非常缓慢甚至直接崩溃,而“多线程”技术则是为了解决这种问题而产生的,采用“多线程”技术编写的应用程序在运行时可以产生多个同时执行的操作实例,例如一个采用“多线程”技术的网络文件传输程序就能同时分出三个进度来同时执行网络数据传输、文件保存操作和绘制传输进度条的操作,于是在用户看来,这个程序运行非常流畅,这就是线程的作用。在程序运行时,只能产生一个进程,但是在这个进程的内存空间(系统为程序能正常执行而开辟的独立内存领域)里,可以产生多个线程,其中至少有一个默认的线程,被称为“主线程”,它是程序主要代码的运行部分。

 那么,“线程注入”又是什么含义呢?其实它的全称是“远程线程注入”(remotethread injection),通常情况下,各个进程的内存空间是不可以相互访问的,这也是为程序能够稳定运行打下基础,这个访问限制让所有进程之间互相独立,这样一来,任何一个非系统关键进程发生崩溃时都不会影响到其他内存空间里的进程执行,从而使nt架构的稳定性远远高于win9x架构。但是在一些特定的场合里,必须让进程之间可以互相访问和管理,这就是“远程线程”技术的初衷,这个技术实现了进程之间的跨内存空间访问,其核心是产生一个特殊的线程,这个线程能够将一段执行代码连接到另一个进程所处的内存空间里,作为另一个进程的其中一个非核心线程来运行,从而达到交换数据的目的,这个连接的过程被称为“注入”(injection)。远程线程技术好比一棵寄生在大树上的蔓藤,一旦目标进程被注入,这段新生的线程就成为目标进程的一部分代码了,只要目标进程不被终止,原进程无论是否还在运行都不会再影响到执行结果了。

 与“线程注入”离不开的是“hook”技术,这个“hook”,又是什么呢?其官方定义如下:

 钩子(hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。

 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

 在这里,木马编写者首先把一个实际为木马主体的dll文件载入内存,然后通过“线程注入”技术将其注入其他进程的内存空间,最后这个dll里的代码就成为其他进程的一部分来实现了自身的隐藏执行,通过调用“hook”机制,这个dll木马便实现了监视用户的输入输出操作,截取有用的资料等操作。

 这种木马的实际执行体是一个dll文件,系统是把dll视为一种模块性质的执行体来调用的,它内部只包含了一堆以函数形式输出的模块,也就是说每个dll都需要由一个用到它的某个函数的exe来加载,当dll里的函数执行完毕后就会返回一个运行结果给调用它的exe,然后dll进程退出内存结束这次执行过程,这就是标准的dll运行周期,而采用了“线程注入”技术的dll则不是这样,它们自身虽然也是导出函数,但是它们的代码是具备执行逻辑的,这种模块就像一个普通exe,只是它不能直接由自身启动,而是需要有一个特殊作用的程序(称为装载程序)产生的进程把这个dll的主体函数载入内存中执行,从而让它成为一个运行中的木马程序。

例:Rundll32.exe C:/dlltest.dll test   就是用Rundll32.exe装载dlltest.dll文件,并调用其中的test()函数段。

 由于Windows系统自身就是大量使用dll的系统,许多dll文件在启动时便被相关的应用程序加载进内存里执行了,因此谁也无法一眼看出哪个dll文件不是系统自带的,且正常的系统DLL文件也又可能被同名的病毒DLL文件替换,所以这种木马的隐蔽性又提高了一级,而且它的执行方式也更加隐蔽。

 了解Windows的用户都知道,模块是紧紧依赖于进程的,调用了某个模块的进程一旦退出执行,其加载的dll模块也就被迫终止了,但是在dll木马里,这个情况是不会因为最早启动的exe被终止而发生的,因为它使用了“远程线程注入”技术,所以,在用户发现异常时,dll木马早就不知道被注入哪个正常进程里了,即使用户发现了这个木马dll,也无法把它终止,因为要关闭它就必须在那么多的系统进程里找到被它注入的进程,并将其终止,而且这个被注入的系统进程往往是系统运行的关键进程,手动查杀这种木马对一般用户来说,便成了不可能完成的任务。
             

关于dll注入方式的学习(远程线程注入 的地址(由于Windows引入了基址随机化ASLR安全机制,所以导致每次开机启动时系统DLL加载基址都不一样,有些系统dll(kernel,ntdll)的加载地址,允许每次启动基址可以改变,但是启动之后必须固定,也就是说两个不同进程在相互的虚拟内存中,这样的系统dll地址总是一样的),在注入进程中创建线程(PAGE_GUARD: 区域第一次被访问时进入一个STATUS_GUARD_PAGE异常,这个标志要和其他保护标志合并使用,表明区域被第一次访问的权限。PAGE_READONLY: 该区域为只读。 阅读详情

相关推荐

win7 64 DLL远程注入技术注入dll函数调用

一、DLL注入 DLL远程注入技术是目前Win32病毒广泛使用的一种技术使用这种技术的病毒体通常位于一个DLL中,在系统启动的时候,一个EXE程序会将这个DLL加载至某些系统进程(如Explorer.exe)中运行。 这样一来,普通的进程管理器就很难发现这种病毒了,而且即使发现了也很难清除,因为只要病毒寄生的进程不终止运行,那么这个DLL就不会在内存中卸载, 用户也就无法在资源管理器

xuplus的专栏 1万+

远程线程注入实现木马进程隐藏

通过远程线程注入技术实现木马进程隐藏,内附有完整地代码以及详细的说明文档

创建远程线程实现DLL注入

最近在学逆向,学到了DLL注入DLL注入有三种方式:创建远程线程(该方法不适用于win7及以上的OS),使用注册表(APPInit_DLLs,该方法不适用于xp及以上的OS)。消息勾取(SetWindowsHookEx()API )。下面介绍一下关于创建远程线程的实验。 远程线程技术指的是通过在另一个进程中创建远程线程的方法进入那个进程的内存地址空间。我们知道,在进程中,可以通过CreateT

擦掉汗、微笑的博客 2748

线程注入

线程注入是指一个进程在另一个进程中创建线程技术,是一种病毒木马所青睐的注入技术,同时也是一种很巧妙、很经典的DLL注入技术。 远线程注入主要有以下几个步骤 1.OpenProcess函数 打开现有的本地线程对象 函数声明 HANDLE WINAPI OpenProcess( _In_ DWORD dwDesiredAccess, _In_ BOOL bInheritHandle, _In_ DWORD dwProcessId ); 2.VirtualAllocEx函数 向我们要指定的进.

苞米地里捉小鸡的博客 780

什么是远程线程注入

远程线程注入 首先,要说明白远程线程注入,必须得弄明白什么是远程线程以及什么是注入远程线程 这里的远程指的是别的进程空间,大家应该都在自己代码中或多或少运用过多线程,这里给出常见的win32创建线程接口的使用,如下: 本地线程创建 1 、官方给的接口: HANDLE CreateThread( [in] LPSECURITY_ATTRIBUTES lpThreadAttributes, //安全描述符,一般填NULL [in] SIZE_T dwStac

航行的土豆的博客 7843

【C++】代码实现:远线程注入(即:远程注入技术完整实现

本程序是一个完整、简洁的传统方式远线程注入示例,源码中有较为详细的注释。(为精简展示,程序中未包含权限提升、异常处理相关代码)

风语留痕 2794

基于远程线程注入木马隐藏技术分析与源码实战

典型初始化方式如下:虽然大多数注入工具设置为NULL,但在高完整性进程或服务账户环境下,显式声明安全描述符有助于避免因默认策略导致的失败。

weixin_36300623的博客 1192

远程线程注入技术概述

远程线程注入技术是进程间通信的一种方式,被计算机病毒木马等广泛使用。计算机病毒通过把自身代码注入一个远程进程的地址空间从而达到伪装自己的目的。一些游戏辅助工具通过远程线程注入技术对游戏进程进行辅助操作。如果你对Windows系统编程有所了解的话,就很容易理解远程线程注入的实现机理

wwwniwei的专栏 1218

DLL远程线程劫持注入技术解析

十大进程注入(一) DLL远程线程劫持注入技术解析 进程注入是一种广泛应用于恶意软件或无文件攻击中的躲避检测的技术。其需要在另一个进程的地址空间内运行特制代码,进程注入改善了不可见性、同时一些技术也实现了持久化。 而所谓的DLL注入是诸多进程注入方法中最常用的技术。恶意软件将恶意的动态链接库的路径写入另一个进程的虚拟地址空间内,通过在目标进程中创建远程线程来确保远程进程加载它。而因为DLL本身是由...

m0_38103658的博客 1324

远程线程注入技术(2)之数据的注入

首先我们需要知道对于“远程线程”以及“远程线程注入代码”的定义。实际上,远程线程就是进程A在进程B中创建了一个线程,这个线程的代码将会做出我们已经在程序中描述的内容。说到这里,可能小伙伴们会有疑问了,在windows 9x之后虚拟存储器使每个进程都具有自己的地址空间,保证了每个进程之间互不干扰。但是在这里又说进程A可以在进程B中创建一个线程,你是在逗我吗?实际上我没有逗你。虽然每个进程在32位机上

bobopeng 1407

用C++编写的木马程序

用C++编写的木马程序 <> DLL在程序编制中可作出巨大贡献,它提供了具共性代码的复用能力。但是,正如一门高深的武学,若被掌握在正义之侠的手上,便可助其仗义江湖;但若被掌握在邪恶之徒的手上,则必然在江湖上掀起腥风血雨。DLL正是一种这样的武学。DLL一旦染上了魔性,就不再是正常的DLL程序,而是DLL木马,一种恶贯满盈的病毒,令特洛伊一夜之间国破家亡。 DLL木马的原理DLL木马的实现原理是

hawk140的专栏 1万+

远程线程注入

声明一下:这里的技术在Win10中对于系统的应用例如自带的计算器、记事本已经不起作用(有反注入技术)了。当初一直在想如何向计算器中注入一直没有成功,然而对自己写的应用程序进程仍然可以使用。当然过程中的系统快照等知识还是必要的,只能说是了解一下并关注一下关于系统快照等知识就行了。 这里的 远程线程,并不是指跨计算机的,而是跨进程的,简单地说就是进程A要在进程B中创建一个线程。 无论是木马或...

wxf明的博客 1009

DLL木马远程注入过程

写一个木马挂载程序,听起来似乎很玄,其实也很简单,本文将告诉你怎样用Visual C++实现一个侵入木马的程序。本文主要涉及动态链接库(DLL木马,目前相当多数的木马病毒都以这种方式被加载。 DLL木马攻击指的是编程者在DLL中包含木马程序代码,随后在目标主机中选择特定目标进程,以某种方式强行指定该进程调用包含这个木马程序的DLL,最终达到侵袭目标系统的目的。 我们知道,DLL在程序编制中可

Walter的专栏 6032

Windows黑客编程——远程线程注入(1)

前言 远程线程注入是指一个进程在另一个进程中创建线程技术,在病毒、木马以及外挂中经常使用到该技术使用场景 调试器中也使用了该技术;可以通过宿主来执行一些隐藏操作如一些木马病毒;可以实现HOOK API来修改目标进程的行为如实现隐藏进程、隐藏文件、隐藏注册表项等;修改目标进程的数据如外挂;等我想到了再补充... 实现流程 其流程大致如下: 代码实现 测试函数代码如下,可根据实际情况再做更改 BOOL CreateRemoteThreadInjectDll( .

Think88666的博客 2302

自己写的木马木马DLL注入程序(转)

/******************************************************名称:木马DLL注入程序功能:调用系统钩子将木马DLL注入宿主线程作者:薛峰日期:2004-6-22说明:进程的隐藏,本程序使用大量API,请参考MSDN******************************************************/#include "std

要饭's Blog 2800

在我的指导下,ChatGPT写了一个木马

就我的经验来看,只要我们把复杂的编程需求一步步拆解,直到拆解成它可以理解的功能单元,交给它来实现,最后我们将这些功能单元融合在一起,加工一下基本就能使用。接下来,我们实现一个远程线程注入的功能,可以通过云端下发shellcode,把我们的代码注入到explorer进程中去执行。当然,之所以要打上引号,是因为这个木马功能很简单,也没做啥过杀毒软件、隐藏等工作,我们单纯来看一下这家伙的编程能力。就拿这个简单的“木马”程序来说,我自己来写可能坑次坑次要整上一个小时,但用这个工具,可能几分钟就搞定了。

m0_46163918的博客 4059

delphi远程线程插入(DLL注入

delphi远程线程插入(DLL注入)2009年07月18日 星期六 01:08远程注入DLL方法有很多种,也是很多木马病毒所使用的隐藏进程的方法,因为通过程序加载的DLL在进程管理器是没有显示的.这里介绍一种用 CreateRemoteThread 远程建立线程的方式注入DLL.首先,我们要提升自己的权限,因为远程注入必不可免的要访问到目标进程的内存空间,如果没有足够

hack_wg的专栏 2423

 DLL木马的原理

 DLL木马的原理  DLL木马的实现原理是编程者在DLL中包含木马程序代码,随后在目标主机中选择特定目标进程,以某种方式强行指定该进程调用包含木马程序的DLL,最终达到侵袭目标系统的目的。  正是DLL程序自身的特点决定了以这种形式加载木马不仅可行,而且具有良好的隐藏性:  (1)DLL程序被映射到宿主进程的地址空间中,它能够共享宿主进程的资源,并根据宿主进程在目标主机的级别非法访问相应的系统资

修养生息,以得佳境 2353
上一篇: “熊猫烧香”源码启示录
下一篇: net命令详解
freesundark
博客等级 码龄16年 26粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值