一种基于智能化远程线程注入技术方法

文档序号:6349464阅读:342来源:国知局
专利名称:一种基于智能化远程线程注入技术方法
技术领域
本发明涉及一种基于智能化远程线程注入技术方法。这种方法是主要用在远程线程注入的监控系统实现的关键技术和实现方法,分析了在DLL中定时监控功能的实现,提出采用两级监控的方法来提高监控系统的功能。
背景技术
监控系统必须要保证系统的正常运行,并最大程度地减少系统资源负担,同时要防止被用户结束,较为有效的方法就是把进程隐藏。进程隐藏的实现机制包括修改动态链接库、应用程序的接口挂钩、远程线程注入等方式。远程线程注入技术是指在指定远程进程中创建线程,通过注入到指定进程的内存地址空间。通过远程线程注入技术将所需的线程代码注入的目标进程中运行,不创建独立的进程,很难被发现,但常规的远程线程注入技术难以避过安全检测技术的检测。远程线程注入被广泛的运用到电脑病毒传播中,然而也由于其不易被使用者删除的特点可以协助管理人员安装监控、计费等系统管理程序而不被使用者破坏,达到安全管理的目的。

发明内容
针对以上的不足,本发明的目的是提出一种基于智能化远程线程注入技术方法,实现在Windows系统下进程的隐藏,将监控程序编译成动态链接库文件,采用远程线程注入技术注入到系统进程运行,能有效地提高监控系统的安全性能。每一 DLL必须有一个人口点,DlIMain函数是DLL模块的默认入口点。DllMain负责初始化和结束工作。DLLMain函数在将DLL模块加载到进程时、DLL模块与进程分离时被调用。Delphi语言中,DLL入口由DLLProc传入。在DLL文件中编写一个线`程执行体函数ThreadProc实现监控的功能,比如监控某个程序是否在运行,如果没有则重新启动这个程序。定时功能可调用API函数SetTimer实现,比用组件精度高。在DLL注入到目标进程后,将监控程序创建一个线程,启动过程如图2所示。创建和结束线程分别用到CreateThread函数和TerminateThread函数。CreateThread 的函数定义:
function CreateThread(
IpThreadAttributes: Pointer;dwStackSize: DWORD;IpStartAddress..TFNThreadStartRoutine;
IpParameter: Pointer;dwCreationFlags: DWORD;var IpThreadId: DWORD):THandle; stdcall;其中IpStartAddress,IpParameter, IpThreadId 三个参数是必须的。IpStartAddress参数指向的是线程执行体ThreadProc的开始地址;IpParameter指针类型,线程的传入参数,给线程执行体ThreadProc传递数据;IpThreadId返回创建线程ID,这是控制线程必须的。实现监控功能的DLL文件的主要代码如下:
procedure ThreadProc(p: pointer); stdcall;
//线程执行体,实现监控功能 begin
SetTimer(O, 1, 10000, nil);
//设置定时器的时间间隔为10000毫秒 while GetMessage(Msg, O, O, O) do //从消息队列得到消息 begin
if Msg.message= WM—TIMER then // WM—TIMER定时器消息 try
if not FindProcess (’ watch.exeJ) thenwinexec (pchar (’ watch, exe,),SW_Show);
//此处为定时处理的内容,功能是检测 //’watch.exe进程是否存在,如果不存在启动 except; end else begin
TranslateMessage(Msg);
//用于将 virtul-key消息翻译为字符消息 DispatchMessage(Msg);
//派送消息到窗口过程 end; end;

end;
procedure DlIMain(dwReason: DWORD);
//DLL入口程序var
dwThreadID: DWORD; begin
case dwReason ofDLL_PROCESS_ATTACH: //进程被调用begin
hThreadHandle:= CreateThread(nil, 0, @ThreadProc, nil, 0,dwThreadID);
Il将ThreadProc创建一个线程 end;
DLL_PR0CESS一DETACH: //进程被停止 begin
SendMessage(hWnd, WM_THREADEXIT, , 0);
//发送线程结束消息 if (hThreadHandle <> 0) thenbegin
TerminateThread(hThreadHandle, 0);
//撤消该线程 end; end;
DLL—THREAD_ATTACH: //线程被调用Beginend;
DLL_THREAD_DETACH: //线程被停止beginend;end;end;begin
DLLProc:= @DLLMain;//DLL 入口 DLLMain(DLL_PR0CESS—ATTACH);
//调用 DLLMain,参数为 DLL_PR0CESS_ATTACH


end.
具体实施例方式远程线程注入技术的主要步骤如下:(I)调整权限,使程序可以访问其他进程的内存空间(EnableDebugPriv)。(2)得到远程进程的 HANDLE (OpenProcess)。(3)在远程进程中为要注入的数据分配内存(VirtualAl1cEx)。(4)将注入DLL复制到本进程,实现函数DLL装载过程(MapInjectFile)。(5)把DLL资源复制到分配的内存中(WriteProcessMemory)。(6)用 CreateRemoteThread 启动远程的线程。
权利要求
1.一种基于智能化远程线程注入技术方法:远程线程注入是通过CreateRemoteThread函数建立一个远程线程,调用LoadLibrary函数来加载指定的DLL。
CreateRemoteThread 函数的方法如下:function CreateRemoteThread(hProcess: THandle; //远程进程的句柄 IpThreadAttributes: Pointer; //线程安全描述字, dwStackSize: DWORD; //线程栈大小,以字节表示 IpStartAddress: TFNThreadStartRoutine; //一个TFNThreadStartRoutine类型的指针,指向在远程进程中执行的函数地址 IpParameter: Pointer; //传入参数的指针dwCreationFlags: DWORD; //创建线程的其它标志 var IpThreadId: DWORD //线程身份标志,如果为0,则不返回 ):THandle; 在Windows系统下,每个进程都拥有自己的地址空间,各个进程之间都是相互独立的。需要在远程进程的内存空间里申请一块内存空间,写入需要注入的DLL的路径。需要用到的API函数有: (1)OpenProcess O:打开目标进程,得到目标进程的操作权限。
(2)VirtualAllocEx O:用于在目标进程内存空间中申请内存空间以写入DLL的文件名。
(3)WriteProcessMemoryO:往申请到的空间中写入DLL的文件名。
2.根据权利要求1的远程线程注入技术方法,其特征是每一线程DLL必须有一个人口点,DllMain函数是DLL模块的默认入口点。DllMain负责初始化和结束工作。DLLMain函数在将DLL模块加载到进程时、DLL模块与进程分离时被调用。Delphi语言中,DLL入口由DLLProc 传入。
全文摘要
一种基于智能化远程线程注入技术方法监控系统要求具有实时性和隐藏性,远程线程注入技术能实现在Windows系统下进程的隐藏。将监控程序编译成动态链接库文件,采用远程线程注入技术注入到系统进程运行,能有效地提高监控系统的安全性能。本方法分析了基于远程线程注入的监控系统的关键技术和实现方法,通过设置定时器的方法解决了系统实时性需求,通过给出的远程线程注入技术解决了隐藏性需求。最后分析采用两级监控和应对安全检测技术来提高监控系统的安全性。
文档编号G06F21/56GK103106085SQ20111036939
公开日2013年5月15日 申请日期2011年11月15日 优先权日2011年11月15日
发明者陆瑜 申请人:镇江亿海软件有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1