MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Определение инжектированных библиотек"
Answer 784952
Список загруженных DLL для процесса можно получить с помощью свойства
Process.Modules
. Для определения инжектированных DLL нужно составить базовый список загруженных модулей при работе данного приложения в чистой среде, затем при выполнении в реальной среде сравнить список DLL с базовым списком:using System; using System.Diagnostics; using System.Linq; using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; using System.IO; namespace WindowsFormsTest1 { public class DLL { /*Примерный базовый список загруженных DLL для WinForms-приложения в Windows 7*/ public static string[] DllWhiteList = "ntdll.dll MSCOREE.DLL KERNEL32.dll KERNELBASE.dll apphelp.dll AcLayers.DLL SspiCli.dll msvcrt.dll RPCRT4.dll CRYPTBASE.dll sechost.dll USER32.dll GDI32.dll LPK.dll USP10.dll ADVAPI32.dll SHELL32.dll SHLWAPI.dll ole32.dll OLEAUT32.dll USERENV.dll profapi.dll MPR.dll IMM32.DLL MSCTF.dll mscoreei.dll clr.dll MSVCR110_CLR0400.dll WINHTTP.dll webio.dll VERSION.dll PSAPI.DLL mscorlib.ni.dll uxtheme.dll CRYPTSP.dll CRYPT32.dll MSASN1.dll rsaenh.dll msi.dll clrjit.dll nlssorting.dll System.ni.dll System.Drawing.ni.dll System.Windows.Forms.ni.dll comctl32.dll comctl32.dll System.Configuration.ni.dll System.Xml.ni.dll dwmapi.dll gdiplus.dll RpcRtRemote.dll SXS.DLL System.Core.ni.dll System.Xml.Linq.ni.dll System.Data.DataSetExtensions.ni.dll Microsoft.CSharp.ni.dll System.Data.ni.dll System.Data.dll WS2_32.dll NSI.dll System.Deployment.ni.dll sxs.dll SETUPAPI.dll CFGMGR32.dll DEVOBJ.dll propsys.dll" .Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); /*Получение списка DLL, загруженных процессом*/ public static List<ProcessModule> GetProcessDLLs(Process pr) { var coll = pr.Modules; List<ProcessModule> res = new List<ProcessModule>(); foreach (ProcessModule y in coll) { if (Path.GetExtension(y.FileName).ToLower().Contains("exe")) continue; if (Path.GetExtension(y.FileName).ToLower().Contains("drv")) continue; res.Add(y); } return res; } /*Вывод списка предположительно инжектированных DLL*/ public static string PrintInjectedDLLs(List<ProcessModule> dllList) { StringBuilder sb = new StringBuilder(1000); sb.AppendLine("*** Injected DLLs: ***"); sb.AppendLine(); string s; foreach (var x in dllList) { if (DllWhiteList.Contains(x.ModuleName)) continue; sb.Append(x.ModuleName); try { s = x.FileVersionInfo.CompanyName; } catch (Exception ex) { s = ex.GetType().ToString(); Debug.WriteLine(ex.ToString()); } sb.Append(" by " + s); sb.AppendLine(); } return sb.ToString(); } } }
Конечно, настоящие вредоносные программы могут перехватывать вызовы API-функций на обнаружение своих DLL. Но некоторые инжектированные модули такой способ позволяет обнаружить.
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.