欢迎来到皮皮网官网

【php框架源码之家】【lora项目源码】【致远源码社区】filemon 程序源码_fileinputstream源码

时间:2024-12-23 08:38:03 来源:3389易语言源码

1.动态恶意软件分析工具介绍
2.TerminateProcess HOOK
3.PROCESS EXPLORER基本简介

filemon 程序源码_fileinputstream源码

动态恶意软件分析工具介绍

       在动态恶意软件分析工具的序源介绍中,我们旨在深入理解恶意软件执行后的源码行为。本教程为恶意软件分析系列教程的序源第二部分,如需全面了解,源码请先阅读系列教程之一。序源动态恶意软件分析工具主要用于在虚拟机环境中执行恶意软件,源码php框架源码之家并对其活动进行分析。序源以下将逐一介绍几种关键工具:Procmon、源码Process Explorer、序源Regshot、源码ApateDNS、序源Netcat、源码Wireshark以及INetSim。序源lora项目源码

       Procmon,源码全称为Process Monitor,序源是一款系统进程监控软件,集Filemon和Regmon功能于一身,能够同时监控系统中的文件操作和注册表修改。它是一个高级的Windows系统和应用程序监控工具,由Sysinternals团队开发,现已被微软收购,具备高度的可靠性和稳定性。

       Process Explorer是一款Windows系统和应用程序监控工具,结合了Filemon和Regmon的功能,并增加了多项增强功能。致远源码社区它提供稳定性和性能改进,具有强大的过滤选项,包含进程树对话框的改进、右击菜单过滤条目的调整、集成的堆栈跟踪对话框、堆栈跟踪的加速以及在位Windows上加载位日志文件的能力。此工具还能监控DLL和内核模式驱动程序的加载,以及系统引导时的所有操作。

       RegShot是一款注册表比较工具,通过两次抓取注册表来迅速找出差异,并允许以纯文本方式记录注册表,便于查看。花伴侣源码其功能包括扫描并保存注册表快照,自动对比两次快照,并将结果保存为txt或html文档。RegShot体积小巧,非压缩版为K,压缩版为K,便于存储和传输。

       ApateDNS用于控制DNS响应,主要针对本地系统上的DNS服务器,可以将恶意软件生成的DNS请求重定向到指定IP地址的指定端口,用于静态恶意软件分析或使用沙箱环境。ApateDNS还能使用NXDOMAIN参数恢复多个域,envoy 源码 tls防止恶意软件尝试连接到多个主机。

       Netcat(通常称为nc)是网络安全工具中的瑞士军刀,支持TCP和UDP协议,可用于网络读写数据、端口扫描、端口转发、文件传输和目录传输等。在执行动态恶意软件分析时,Netcat是不可或缺的工具,能建立入站和出站连接,且在客户端模式下用于连接,服务器模式下用于侦听。通过ApateDNS和Netcat结合使用,可以监视恶意软件的请求、重定向请求,并分析恶意软件使用的网络服务及其发出的请求。

       Wireshark(原名Ethereal)是网络封包分析软件,用于捕捉和显示网络封包的详细信息。它直接与网卡进行数据报文交换,并且在GNUGPL许可下提供免费使用和源代码访问。Wireshark是广泛使用的网络封包分析软件之一,对于理解网络通信和检测异常活动非常有用。

       INetSim是一个基于Linux的工具,用于模拟常见的互联网服务,如HTTP、HTTPS、DNS和FTP等,以帮助在执行动态恶意软件分析时模拟互联网环境。INetSim能够回答恶意软件可能发出的请求,并记录所有传入连接,提供分析恶意软件使用的服务和发出请求的详细信息。它高度可配置,能够调整特定服务的侦听器端口,以适应恶意软件使用的非标准端口。

       在进行动态恶意软件分析时,这些工具提供了一套全面的方法,帮助安全专家理解并应对恶意软件的复杂行为。通过使用上述工具,安全团队能够深入分析恶意软件的活动,识别攻击手段,并采取相应措施保护系统免受攻击。

TerminateProcess HOOK

       å¦‚何保证自己的程序不被关闭?

       å°±ç®—是一些进程软件也不可以关闭

       samba 我听过有人采用程序互相监控的方法来达到目的。

       ä½†è¿™æ ·å°±ä¼šå ç”¨ç³»ç»Ÿèµ„源。一个不加什么控件的纯窗体都要3占用MB内存,

       å¦‚果加上我本来的那个程序,岂不是要占去十几MB内存,这对于我那个小程序来讲不不可忍受的。

       è¯·é—®æœ‰ä»€ä¹ˆæ¯”较好的方法可以解决?有这方面的控件吗?先谢过大家了!

       ---------------------------------------------------------------

       åœ¨WINDOWS操作系统下,当我们无法结束或者不知道怎样结束一个程序的时候,或者是懒得去找“退出”按钮的时候,通常会按“CTRL+ALT+DEL”呼出任务管理器,找到想结束的程序,点一下“结束任务”就了事了,呵呵,虽然有点粗鲁,但大多数情况下都很有效,不是吗?

        设想一下,如果有这么一种软件,它所要做的工作就是对某个使用者在某台电脑上的活动作一定的限制,而又不能被使用者通过“结束任务”这种方式轻易地解除限制,那该怎么做?无非有这么三种方法:1.屏蔽“CTRL+ALT+DEL”这个热键的组合;2.让程序不出现在任务管理器的列表之中;3.让任务管理器无法杀掉这个任务。对于第一种方法,这样未免也太残酷了,用惯了“结束任务”这种方法的人会很不习惯的;对于第二种方法,在WINDOWS 9X下可以很轻易地使用注册服务进程的方法实现,但是对于WINDOWS NT架构的操作系统没有这个方法了,进程很难藏身,虽然仍然可以实现隐藏,但实现机制较为复杂;对于第三种方法,实现起来比较简单,我的作品:IPGate 网址过滤器 就是采用的这种方式防杀的,接下来我就来介绍这种方法。

        任务管理器的“结束任务”实际上就是强制终止进程,它所使用的杀手锏是一个叫做TerminateProcess()的Win API函数,我们来看看它的定义:

       BOOL TerminateProcess(

        HANDLE hProcess; // 将被结束进程的句柄

        UINT uExitCode; // 指定进程的退出码

       );

        看到这里,是不是觉得不必往下看都知道接下来要做什么:Hook TerminateProcess()函数,每次TerminateProcess()被调用的时候先判断企图结束的进程是否是我的进程,如果是的话就简单地返回一个错误码就可以了。真的是这么简单吗?先提出一个问题,如何根据hProcess判断它是否是我的进程的句柄?答案是:在我的进程当中先获得我的进程的句柄,然后通过进程间通讯机制传递给钩子函数,与hProcess进行比较不就行了?错!因为句柄是一个进程相关的值,不同进程中得到的我的进程的句柄的值在进程间进行比较是无意义的。

        怎么办?我们来考察一下我的hProcess它是如何得到的。一个进程只有它的进程ID是独一无二的,操作系统通过进程ID来标识一个进程,当某个程序要对这个进程进行访问的话,它首先得用OpenProcess这个函数并传入要访问的进程ID来获得进程的句柄,来看看它的参数:

       HANDLE OpenProcess(

       DWORD dwDesiredAccess, // 希望获得的访问权限

       BOOL bInheritHandle, // 指明是否希望所获得的句柄可以继承

       DWORD dwProcessId // 要访问的进程ID

       );

        脉络渐渐显现:在调用TerminateProcess()之前,必先调用OpenProcess(),而OpenProcess()的参数表中的dwProcessId是在系统范围内唯一确定的。得出结论:要Hook的函数不是TerminateProcess()而是OpenProcess(),在每次调用OpenProcess()的时候,我们先检查dwProcessId是否为我的进程的ID(利用进程间通讯机制),如果是的话就简单地返回一个错误码就可以了,任务管理器拿不到我的进程的句柄,它如何结束我的进程呢?

        至此,疑团全部揭开了。由Hook TerminateProcess()到Hook OpenProcess()的这个过程,体现了一个逆向思维的思想。其实我当初钻进了TerminateProcess()的死胡同里半天出也不来,但最终还是蹦出了灵感的火花,注意力转移到了OpenProcess()上面,实现了进程防杀。喜悦之余,将这心得体会拿出来与大家分享。

       ---------------------------------------------------------------

       è¦ä¸æˆ‘给你把我的可执行文件的源代码和动态连接库发给你好了

       åŠ¨æ€è¿žæŽ¥åº“你自己可以换掉

       å°±æ˜¯è¦æ³¨å…¥çš„那个

       ï¼Œæ³¨å…¥åˆ°çš„目标程序你自己设置

       ---------------------------------------------------------------

       å‘µå‘µï¼Œæˆ‘成功实现了:)

       é€šè¿‡setwindowshookex建立CBT的Hook,Hook DLL中加载API重定向,就可以达到全局有效的APIHOOK效果了,还要对MapFile操作,以便统一全局的参数

       ä¸‹è½½åœ°å€ï¼š/lysoft/projects/API Hook.rar

       by Liu Yang

       ---------------------------------------------------------------

       ä¸Šé¢çš„例子,很厉害的,不只是任务管理器,连别的第三方软件都奈何不得!

       ç¦æ­¢ CTRL+ALT+DELETE under XP and Win, 的方法,不过容易破解

       å¦å¤–,XP下Gina方法是不行的,我提供的Demo就没问题了。至于那个DLL是怎么写的,就不便公开了。调用接口就在代码中,呵呵,花了我3天功夫才搞好。有点累了,休息了。

       procedure DisableTaskMgr(bTF: Boolean);

       var

        reg: TRegistry;

       begin

        reg := TRegistry.Create;

        reg.RootKey := HKEY_CURRENT_USER;

        reg.OpenKey('Software', True);

        reg.OpenKey('Microsoft', True);

        reg.OpenKey('Windows', True);

        reg.OpenKey('CurrentVersion', True);

        reg.OpenKey('Policies', True);

        reg.OpenKey('System', True);

        if bTF = True then

        begin

        reg.WriteString('DisableTaskMgr', '1');

        end

        else if bTF = False then

        begin

        reg.DeleteValue('DisableTaskMgr');

        end;

        reg.CloseKey;

       end;

       // Example Call:

       procedure TForm1.Button1Click(Sender: TObject);

       begin

        DisableTaskMgr(True);

       end;

       ---------------------------------------------------------------

       type //定义一个入口结构

        PImage_Import_Entry = ^Image_Import_Entry;

        Image_Import_Entry = record

        Characteristics: DWORD; //"code"or"data"or"bss"

        TimeDateStamp: DWORD;

        MajorVersion: Word;

        MinorVersion: Word;

        Name: DWORD; //所属动态库或程序的名称

        LookupTable: DWORD;

        end;

       type //定义一个跳转的结构

        TImportCode = packed record

        JumpInstruction: Word; //定义跳转指令jmp

        AddressOfPointerToFunction: ^Pointer; //定义要跳转到的函数

        end;

        PImportCode = ^TImportCode;

       implementation

       //返回当前函数地址

       function LocateFunctionAddress(Code: Pointer): Pointer;

       var

        func: PImportCode;

       begin

        Result := Code;

        if Code = nil then exit;

        try

        func := code;

        if (func.JumpInstruction = $FF) then

        begin

        Result := func.AddressOfPointerToFunction^;

        end;

        except

        Result := nil;

        end;

       end;

       //改变函数的指向

       function RepointFunction(OldFunc, NewFunc: Pointer): Integer;

       var

        IsDone: TList;

        //将指定实例中的引入函数定位为新函数

        function RepointAddrInModule(hModule: THandle; OldFunc, NewFunc: Pointer): Integer;

        var

        Dos: PImageDosHeader;//dos head

        NT: PImageNTHeaders; //nt head

        ImportDesc: PImage_Import_Entry; //函数入口地址

        RVA: DWORD;

        Func: ^Pointer;

        DLL: string;

        f: Pointer;

        written: DWORD;

        begin

        Result := 0;

        Dos := Pointer(hModule);//实例句柄

        if IsDone.IndexOf(Dos) >= 0 then exit; //是否已经替换过此实例句柄

        IsDone.Add(Dos); //添加实例句柄

        OldFunc := LocateFunctionAddress(OldFunc);

        if IsBadReadPtr(Dos, SizeOf(TImageDosHeader)) then exit;

        if Dos.e_magic <> IMAGE_DOS_SIGNATURE then exit;//判断是否是合法的dos头

        NT := Pointer(Integer(Dos) + dos._lfanew);//得到pe头

        //得到输入函数的相关虚地址

        RVA := NT^.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT].VirtualAddress;

        if RVA = 0 then exit;

        //计算实际第一个输入函数地址

        ImportDesc := pointer(integer(Dos) + RVA);

        while (ImportDesc^.Name <> 0) do

        begin

        //得到输入的动态库名称

        DLL := PChar(Integer(Dos) + ImportDesc^.Name);

        //递归到另一个动态库

        RepointAddrInModule(GetModuleHandle(PChar(DLL)), OldFunc, NewFunc);

        //计算引入函数在程序中的调入地址

        Func := Pointer(Integer(DOS) + ImportDesc.LookupTable);

        while Func^ <> nil do

        begin

        f := LocateFunctionAddress(Func^);

        //找寻引入的函数

        if f = OldFunc then

        begin

        //注入新函数地址

        WriteProcessMemory(GetCurrentProcess, Func, @NewFunc, 4, written);

        if Written > 0 then Inc(Result);

        end;

        Inc(Func);

        end;

        Inc(ImportDesc);

        end;

        end;

       begin

        IsDone := TList.Create;

        try

        Result := RepointAddrInModule(GetModuleHandle(nil), OldFunc, NewFunc);

        finally

        IsDone.Free;

        end;

       end;

PROCESS EXPLORER基本简介

       Process Explorer,一个让使用者能够了解在后台运行的处理程序的工具,能够显示当前加载的模块及其被哪些程序使用。它还能够揭示程序调用的DLL进程以及打开的句柄。Process Explorer的一大特色是可以终止任何进程,甚至包括系统的关键进程。

       Process Explorer的界面由两个子窗口组成。上方窗口显示当前活跃的程序进程及其详细描述,下方窗口则以资源管理器模式运行应用程序的相关信息,包括调用的DLL和打开的句柄。此工具适用于Windows NT/2K/XP/系统平台。

       现今,Process Explorer .已经集成到Windows中,成为Microsoft Process Monitor 1.的一部分。

扩展资料

       由Sysinternals开发的Windows系统和应用程序监视工具,目前已并入微软旗下。不仅结合了Filemon(文件监视器)和Regmon(注册表监视器)两个工具的功能,还增加了多项重要的增强功能。包括稳定性和性能改进、强大的过滤选项、修正的进程树对话框(增加了进程存活时间图表)、可根据点击位置变换的右击菜单过滤条目、集成带源代码存储的堆栈跟踪对话框、更快的堆栈跟踪、可在 位 Windows 上加载 位 日志文件的能力、监视映像(DLL和内核模式驱动程序)加载、系统引导时记录所有操作等。

copyright © 2016 powered by 皮皮网   sitemap