1.动态恶意软件分析工具介绍
2.TerminateProcess HOOK
3.PROCESS EXPLORER基本简介
动态恶意软件分析工具介绍
在动态恶意软件分析工具的序源介绍中,我们旨在深入理解恶意软件执行后的源码行为。本教程为恶意软件分析系列教程的序源第二部分,如需全面了解,源码请先阅读系列教程之一。序源动态恶意软件分析工具主要用于在虚拟机环境中执行恶意软件,源码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和内核模式驱动程序)加载、系统引导时记录所有操作等。