恶意代码分析系列-几种常用技术(1)

简介: 恶意代码分析系列-几种常用技术(1)

开发环境和工具


环境: Windows10x641909

开发工具和语言: VS2017 C/C++

以下内容都是debug版本


介绍


最近一种在分析恶意样本,对于各种恶意代码的行为特征和运行机制有了一些总结,抱着知己知彼才能百战百胜的态度,重新梳理一下分析时遇到的一些恶意代码的技术的手段,从一个病毒的释放、注入、隐藏和免杀等过程采用的思路和实现方法出发来进一步刨析这些代码的原理,在今后的分析中对于细节才能更加的得心应手,下面先介绍常见的和释放有关的手段。


单一实例运行


这个在分析的两个勒索病毒都有发现,起先会检查自己是否在运行,在开始的时候都使用了一个函数

WINAPI
CreateMutexA(
    _In_opt_ LPSECURITY_ATTRIBUTES lpMutexAttributes,     // 指向安全属性指针,可以为null
    _In_ BOOL bInitialOwner,                  // 初始化互斥体对象的所有者
    _In_opt_ LPCSTR lpName                  // 指向互斥体对象名称指针
    );


需要注意的是,使用 CreateMutex()创建的互斥体对象名称不能与现有的事件、信号量、或者文件映射对象名称相同,否则互斥体对象会创建失败。


资源释放


很多的木马程序会使用资源释放的技术,这样可以让一些额外的 DLLEXE、文本和图片等文件作为资源插入到程序里面,等到程序正式运行的时候再把他们释放到本地上,这样编译出的只有一个exe文件,降低了被发现的风险。


关键API函数


// 发现资源
HRSRC
WINAPI FindResource(
    _In_opt_ HMODULE hModule,    // 模块名称
    _In_ LPCWSTR lpName,         // 指定资源名称
    _In_ LPCWSTR lpType          // 资源类型
    );
// 获取资源大小
DWORD
WINAPI SizeofResource(
    _In_opt_ HMODULE hModule,
    _In_ HRSRC hResInfo
    );
// 加载资源
HGLOBAL
WINAPI LoadResource(
    _In_opt_ HMODULE hModule,    // 模块名称
    _In_ HRSRC hResInfo          // 资源句柄
    );
// 锁定资源字节
LPVOID
WINAPI LockResource(
    _In_ HGLOBAL hResData
    );
// 其它详细的函数信息可以参见MSDN文档


实现原理


  1. 通过 FindResource定位程序里的资源,通过资源类型和资源名称来定位
  2. 通过 SizeofResource获取资源的大小之后再通过 LoadResource把资源加载到程序内存中
  3. 最后使用 LockResource锁定加载到内存中的资源防止程序的其它操作影响这块内存,其中返回值就是资源在进程内存中的起始地址


DLL延迟加载


DLL延迟加载是在正式调用 DLL的时候,才会加载 DLL文件,这样在正式调用 DLL前,都是可以正常执行的,只需要在VS的开发环境设置链接器即可完成,


下面以测试程序为例:


fe369d5a54438709bef1f4e9eb44b3d5_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


在VS的链接器中编辑 ucrtbased.dll,重新生成


72aed0f86ea805ed1d208820d402f71a_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


再次查看发现这个 DLL已经不见了,延迟载入成功



如果通过编码来实现,它的字段是在PE文件NT头中的 DataDirectory—> IMAGE_DIRECTORY_ARRY,具体的编码这里就不演示了。


0291fe36f6b2d6227b738a7aa867fb71_640_wx_fmt=png&wxfrom=5&wx_lazy=1&wx_co=1.png


启动方法


按照常规的步骤在将资源中的程序释放出来后会启动它,下面是常见的几种启动方式


函数 WinExec


UINT
WINAPI
WinExec(
    _In_ LPCSTR lpCmdLine,  // 要执行的程序的命令行
    _In_ UINT uCmdShow      // 显示选项
    );


函数 ShellExecute


HINSTANCE ShellExecuteW(
    _In_opt_ HWND hwnd,           // 父窗口句柄
    _In_opt_ LPCWSTR lpOperation, // 要执行的操作:edit、explore、find、open等
    _In_ LPCWSTR lpFile,          // 指向shell名称空间对象
    _In_opt_ LPCWSTR lpParameters,// 指向一个可执行文件
    _In_opt_ LPCWSTR lpDirectory, // 指向默认操作的目录
    _In_ INT nShowCmd);           // 打开窗口如何显示 SW_HIDE


函数 CreateProcess


BOOL
WINAPI
CreateProcessW(
    _In_opt_ LPCWSTR lpApplicationName,   // 执行模块名可以为 NULL
    _Inout_opt_ LPWSTR lpCommandLine,     // 执行命令行可以为NULL
    _In_opt_ LPSECURITY_ATTRIBUTES lpProcessAttributes, // 进程安全属性指针
    _In_opt_ LPSECURITY_ATTRIBUTES lpThreadAttributes,  // 线程安全属性指针
    _In_ BOOL bInheritHandles, 
    _In_ DWORD dwCreationFlags,     // 控制优先级和创建进程标志
    _In_opt_ LPVOID lpEnvironment,  // 指向新进程的环境块的指针
    _In_opt_ LPCWSTR lpCurrentDirectory,  // 指向进程当前目录的完整路径
    _In_ LPSTARTUPINFOW lpStartupInfo,    // STARTUPINFOW结构指针
    _Out_ LPPROCESS_INFORMATION lpProcessInformation // PROCESS_INFORMATION结构的指针
    );

使用这些 API主要就是对参数的理解,例如 WinExecShellExecute函数设置位 SW_HIDE方式可以隐藏程序窗口,并且成功隐藏执行 CMD命令行的窗口。


总结


上面是罗列了几种常规的恶意代码常用手段,在分析的时候看到这些 API就应该有所警觉了,不过这是一些最基本的手段,在下一篇注入篇会继续探讨稍微有点难度的东西,总结常见的注入手段。


参考:《Windows黑客编程技术详解》、《黑客大曝光》


相关文章
|
2月前
|
安全 测试技术 网络安全
|
3月前
|
SQL API Python
`bandit`是一个Python静态代码分析工具,专注于查找常见的安全漏洞,如SQL注入、跨站脚本(XSS)等。
`bandit`是一个Python静态代码分析工具,专注于查找常见的安全漏洞,如SQL注入、跨站脚本(XSS)等。
|
机器学习/深度学习 数据采集 自然语言处理
针对语言翻译系统的数据投毒攻击
在本文中展示了基于毒化一小部分并行训练数据的对黑盒 NMT 系统针对性攻击是可行的。表明这种攻击实际上可以通过有针对性地破坏为形成系统训练数据而爬取的网络文档来实现,然后分析了在两种常见 NMT 训练场景中靶向投毒的有效性:from-scratch训练和预训练和微调范式。
453 1
|
安全 API 数据库
恶意代码分析系列-几种常用技术(3)
恶意代码分析系列-几种常用技术(3)
|
安全 API Windows
恶意代码分析系列-几种常用技术(2)
恶意代码分析系列-几种常用技术(2)
|
存储 算法 安全
​恶意代码之静态分析
​恶意代码之静态分析
|
SQL 安全 测试技术
[网络安全]SQL注入原理及常见攻击方法简析
一般而言,登录验证逻辑语句为: select * from 表名 where name(用户名)='$输入' and pass(密码)='$输入' 当数据表中同时存在输入的name和pass字段时,页面将回显登录成功。
741 0
|
Java
[恶意代码分析]恶意代码种类以及分析环境介绍
[恶意代码分析]恶意代码种类以及分析环境介绍
400 1
[恶意代码分析]恶意代码种类以及分析环境介绍
|
安全 前端开发 网络安全
渗透测试服务 针对CSRF漏洞检测与代码防御办法
XSS跨站以及CSRF攻击,在目前的渗透测试,以及网站漏洞检测中 ,经常的被爆出有高危漏洞,我们SINE安全公司在对客户网站进行渗透测试时,也常有的发现客户网站以及APP存在以上的漏洞,其实CSRF以及XSS跨站很容易被发现以及利用,在收集客户网站域名,以及其他信息的时候,大体的注意一些请求操作,前端输入,get,post请求中,可否插入csrf代码,以及XSS代码。
181 0
渗透测试服务 针对CSRF漏洞检测与代码防御办法
|
安全
代码执行漏洞原理/防御
原理 代码执行漏洞是指 攻击者利用 将字符串转化成代码的函数 , 进行代码注入
526 0